【移动端】仿hover效果触发导航菜单展开

PC端,很多交互是由鼠标滑过触发伪类‘:hover’来实现的,
而移动端是没有鼠标hover事件的,
我们可以将原来响应:hover的DOM元素,
绑定监听touchstart和touchend,
动态添加/除去 ‘.hover’这个类来达到等价于PC端交互的效果。

逻辑核心:
**onTouchStart 相当于 onMouseOver,
onTouchEnd 相当于 onMouseOut。**

<!--html-->

<ul>
    <li class="hasUl">
        <p>菜单A</p>
        <ul>
            <li>A子菜单1</li>
            <li>A子菜单2</li>
        </ul>
    </li>
    <li class="hasUl">
        <p>菜单B</p>
        <ul>
            <li>B子菜单1</li>
            <li>B子菜单2</li>
        </ul>
    </li>
</ul>
/*CSS:*/

/*含有展开菜单的导航链接*/
.hasUl{
    position:relative;
}

/*未展开子菜单*/
.hasUl>ul{
    position:absolute;
    left:0;
    top:100%;    /*确保不会遮盖到选项,hover鼠标滑动也可衔接至子菜单*/
    transform-origin: 50% 0;
    transform:scaleY(0);
    opacity:0;
    transition:all .3s;
}

/*子菜单展开样式*/
.hasUl:hover>ul,
.hasUl.hover>ul{
    transform:scaleY(1);
    opacity:1;
}

/*激活选项颜色改变*/
.hasUl:hover>ul>li:hover,
.hasUl.hover>ul>li:hover{
    color:red;
}
//JS:

 document.body.addEventListener('touchstart',function(){});
 var myLinks = document.querySelectorAll('.hasUl');
        for(var i = 0; i < myLinks.length; i++){
            myLinks[i].addEventListener('touchstart', function(){this.className = "hasUl hover";}, false);
            myLinks[i].addEventListener('touchend', function(){this.className = "hasUl";}, false);
        }

以上です。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值