一 网易严选分类效果图
分析:
- 共3级分类,正常页面1级分类显示2,3级分类弹窗隐藏,当鼠标移到1级分类上面,下面的2,3级分类弹窗显示
- 鼠标可以从一级分类顺滑移入到下面弹窗2,3级分类,且弹窗一直显示
- 当鼠标移出分类范围,2,3级分类弹窗隐藏
二 思路分析
- 最开始想的是使用鼠标移入移出事件: mouseover,mouseout,实现了一下,发现在1级分类与2,3级分类之间移入时,弹窗总是先隐藏,比较麻烦,故舍弃
- 最后决定使用 css 的 hover 属性,关键是:最开始的弹窗需要隐藏,用哪种方式? display:none、visibility:hidden、opacity:0、overflow:hidden;
- 先后使用了 opacity:0、overflow:hidden 这2种,出现一个bug: 从任何1级分类往下移,都只展示1级分类最后一个的2,3级分类,如下图:
从彩妆护肤往下移鼠标,就变成了海鲜水产的2,3级分类了
但是使用 display:none、visibility:hidden 这两个属性,问题就不存在了
三 实现核心代码
html:
<!-- 分类 -->
<li
v-for="(item,i) in categoryList"
:key="i"
class="categoryBox"
:class="{'active':i === choosePage}"
@click="goCategoryPage(item.id,i)"
@mouseover="mouseoverEvent(item.children)"
>
<div class="categoryName cursor">{{item.categoryName}}</div>
<ul class="categoryList2" ref="categoryPopRef">
<li
v-for="(stem,d) in categoryList2"
:key="d"
class="categoryItem2"
>
<div
class="categoryName2 cursor"
@click="goCategoryPage(stem.id,i)"
>{{stem.categoryName}}</div>
<ul class="categoryList3">
<li
v-for="(titem,t) in stem.children"
:key="t"
class="categoryItem3"
@click="goCategoryPage(titem.id,i)"
>
<div class="categoryName3 cursor">{{titem.categoryName}}</div>
</li>
</ul>
</li>
</ul>
</li>