当前位置:首页 » 《随便一记》 » 正文

小米商城左侧菜单布局和效果实现(分析+代码)_李易峰是温柔本身.

8 人参与  2022年04月18日 09:44  分类 : 《随便一记》  评论

点击全文阅读


目录

效果展示

结构分析

菜单栏

内容盒子

JS实现

总结


效果展示

  • 左边菜单栏,鼠标经过菜单栏,对应的背景颜色会发生改变
  • 右边内容盒子,有一个边框宽度会随着显示的内容的而变化。
  • 鼠标经过左边的菜单栏,右边对应的盒子内容才会显示出来。

结构分析

菜单栏

用一个简单的 ul li 布局就行。

<ul class="b_nav">
    <li class="bnavli"><a href="#">手机 电话卡</a></li>
    <li class="bnavli"><a href="#">电视 盒子</a></li>
    <li class="bnavli"><a href="#">笔记本 平板</a></li>
    <li class="bnavli"><a href="#">出行 穿戴</a></li>
    <li class="bnavli"><a href="#">智能 路由器</a></li>
    <li class="bnavli"><a href="#">健康 儿童</a></li>
    <li class="bnavli"><a href="#">耳机 音响</a></li>
    <li class="bnavli"><a href="#">智能 路由器</a></li>
    <li class="bnavli"><a href="#">健康 儿童</a></li>
    <li class="bnavli"><a href="#">耳机 音响</a></li>
</ul>

内容盒子

一个大的div盒子,由于有内容盒子的宽度要跟着内容的宽度而变化的效果,所以里面的内容是一列一列显示的,一列(一个ul)做的。里面的内容需要几列就复制几列就OK了,显示的文字图片内容自己修改修改。

!!!需要注意的一点:我们经过左边菜单栏,显示右边内容盒子,要是还想对内容盒子有其他的操作,比如想要鼠标可以点击里面的内容,那就一定要把内容盒子放到菜单栏对应的菜单栏里面。 

<div class="bncontainer">
     <!--需要几列就复制ul,内容自己修改一下-->                     
     <ul>
         <li><a href="#"><img src="upload/Redmi Note 10 Pro.webp" alt="">
             <span>Redmi Note 10</span></a>
         </li>
         <li><a href="#"><img src="upload/Redmi Note 10 Pro.webp" alt="">
             <span>Redmi Note 10</span></a>
         </li>
         <li><a href="#"><img src="upload/Redmi Note 10 Pro.webp" alt="">
             <span>Redmi Note 10</span></a>
         </li>
         <li><a href="#"><img src="upload/Redmi Note 10 Pro.webp" alt="">
             <span>Redmi Note 10</span></a>
         </li>
         <li><a href="#"><img src="upload/Redmi Note 10 Pro.webp" alt="">
             <span>Redmi Note 10</span></a>
         </li>         
     </ul>
</div>

JS实现

思路:设置最开始的内容盒子宽度为 0px,当鼠标经过以后,内容盒子的宽度就改变。

!!!获取变化的宽度=孩子的个数 X 一个孩子的宽度。

/* --左边导航栏右滑显示-- */
/* --获取元素-- */
var bnavlis = document.querySelectorAll('.bnavli');
var bncontainer = document.querySelectorAll('.bncontainer');

for (var i = 0; i < bnavlis.length; i++) {
     bnavlis[i].setAttribute('data-index', i);
     bnavlis[i].addEventListener('mouseenter', function () {
         index = this.getAttribute('data-index');
         /* --获取变化的宽度=孩子的个数*其中一个孩子的宽度-- */
         /* --bncontainer[index]  返回的是对应的整个bncontainer-- */
         maxwidth = bncontainer[index].children.length*bncontainer[index].children[0].offsetWidth;
         bncontainer[index].style.width = maxwidth + 'px';
         bncontainer[index].style.borderColor = '#ccc';
     });

     bnavlis[i].addEventListener('mouseleave', function () {
         index = this.getAttribute('data-index');
         bncontainer[index].style.width = 0 + 'px';
     });
}

总结

这些效果都是常见的效果动图,只要弄懂一个就能举一反三,实现类似其他的效果。这里只分析了效果结构和JS实现,CSS修饰代码就不展示了(很简单的)。看完这篇,大家可以尝试去做一做小米商城上边导航栏的下滑效果,原理都一样,加油哦!


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/38308.html

内容  盒子  宽度  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1