JS实现css的hover效果,兼容移动端

news2024/9/20 20:45:36

Hi I’m Shendi


JS实现css的hover效果,兼容移动端


功能概述

CSS的hover即触碰时触发,在电脑端鼠标触碰,移动端手指触摸


有的时候光靠css实现不了一些效果,例如元素触发hover,其他元素触发动画效果,所以需要使用到js



实现方法

JS想模拟css的hover效果,可以使用鼠标的进入移出事件

此类事件有两种,一种为只对当前元素生效,一种对当前及当元素子元素也生效


var div = document.getELementById("div");
// enter是进入触发,leave移出触发,对子元素不生效,模拟hover使用这种
div.onmouseenter = function () {};
div.onmouseleave = function () {};

// over是进入触发,out是移出触发,对子元素也生效
div.onmouseover = function () {};
div.onmouseout = function () {};


以上方法就可以在电脑端用js模拟css的hover效果了,但在移动端还是有点小问题

移动端的css hover效果是手指短暂触碰即可触发,上面的方法需要长按才能触发

于是可以使用 touch 函数(移动端才有)

var div = document.getELementById("div");
// start按下触发,end抬起触发
div.ontouchstart = function () {};
div.ontouchend = function () {};


上面这两种方法还是不能和移动端hover达到一样的效果,移动端是按下后触发hover,然后抬起不会解除hover,只有点击其他元素才会解除当前hover


于是可以只使用 touchstart,在任意元素按下后解除

当前元素的事件会先执行,然后再执行其他事件,所以要考虑先后问题

代码如下

var div = document.getELementById("div");
// 当前触发的元素,用于解决先后执行的问题
var curEle;
div.ontouchstart = function() {
    curEle = this;
};
// 任意元素按下解除hover
document.ontouchstart = function () {
    // 这里是解除hover部分
    // ...
    
    if (curEle) {
        // 这里是显示触摸的hover部分
        // ...
        
        // 最后将这一次触摸的元素置空,避免元素无法解除hover
        curEle = null;
    }
};

最后整合两部分代码,就可以在电脑端,移动端使用js实现css的hover效果了

还有一点小问题,比如移动端按下大概需要1秒才会触发hover,上面的方法是直接触发,有要求可以参考自行处理


最后挂上我实现的效果,hover就隐藏元素显示另一元素,反之则显示回来

在这里插入图片描述在这里插入图片描述

sdpro.top


示例部分完整代码,使用JQ方便选择元素

html

<div class="menu">
    <a>
        <div>
            <span>菜单1</span>
        </div>
        <p>内容1</p>
    </a>
    <a>
        <div>
            <span>菜单2</span>
        </div>
        <p>内容2</p>
    </a>
</div>

js

$(".menu > a").mouseenter(function () {
    $($(this).children("div")).slideUp();
    $($(this).children("p")).slideDown();
});
$(".menu > a").mouseleave(function () {
    $($(this).children("div")).slideDown();
    $($(this).children("p")).slideUp();
});

var curEle;
document.ontouchstart = function () {
    $(".menu > a > div").slideDown();
    $(".menu > a > p").slideUp();

    if (curEle) {
        $($(curEle).children("div")).slideUp();
        $($(curEle).children("p")).slideDown();
        curEle = null;
    }
};
$(".menu > a").each(function () {
    this.ontouchstart = function() {
        curEle = this;
    };
});



END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm i 安装报错

npm WARN EBADENGINE Unsupported engine { npm WARN… npm WARN deprecated stable0.1.8: Modern JS… 诸如此类的报错。大部分都是因为 node 版本问题&#xff01;比如node版本无法满足&#xff0c;对应项目里需要的那些模块和依赖所需要的条件。 有些模块对node版本是有要…

【兴趣探索】采用Docker部署Rustdesk自建服务器

采用Docker部署Rustdesk自建服务器 场景&#xff1a;本想找一个远程手机的软件&#xff0c;使用的三款都存在限制&#xff1a; ①向日葵一天只能远程三次&#xff0c;需要花钱升级会员 ②Todesk因为手机兼容问题&#xff0c;需要花钱买插件解决 ③Airdorid免费200M&#xf…

23年如何备考PMP考试呢?攻略+资料

我建议准备的最短时间至少1个半月到2个月&#xff0c;集中精力备考大约4个小时&#xff0c;大家可以根据自己的专注力的长短去调节每天的备考时间。 1、《PMBOK指南》第六版&#xff08;16天&#xff09; 教材是要读的&#xff0c;虽然说考试考纲和教材不太一样&#xff0c;但…

led灯性价比最高的品牌有哪些?2023名牌led灯有这些品牌值得推荐

Led灯是现在人造灯具中使用最为普遍的一种灯光&#xff0c;具有高效节能、光线柔和等特点&#xff0c;这方面有一些专业的品牌做的很不错&#xff0c;比如松下、南卡、雷士照明等等&#xff0c;那么它们好在哪儿呢&#xff1f; 一个是光线舒适度高。采用高品质的led灯珠&#…

网络编程之UDP套接字(四)

12. 基于 UDP 的套接字 UDP 是无链接的&#xff0c;可以实现服务端与多个客户端进行同时进行通讯&#xff0c;无论先启动哪一端都可以。&#xff08;qq 聊天 UDP 服务&#xff09; 12.1 基于 udp 套接字模板 UDP 服务端 s socket(AF_INET, SOCK_DGRAM) # 创建一个服务器的…

MySQL运维篇之分库分表

03、分库分表 3.1、介绍 3.1.1、问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是呈指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&#…

脑机接口科普0012——脑机接口的灭亡

本文禁止转载&#xff01;&#xff01;&#xff01;&#xff01;中国人比较好玩&#xff0c;好玩就好玩在&#xff0c;对于每个行业&#xff0c;都喜欢说一句话&#xff0c;XXX从入门到放弃&#xff01;我们才科普到第12小节&#xff0c;然后&#xff0c;我们这边就说到脑机接口…

Vue 使用 Export2Excel.js 导出多 sheet 的 excel

项目需求&#xff0c;导出多sheet的excel表格。 具体思路是&#xff1a;后端返回json数据&#xff0c;前端根据数据和具体的几项字段去导出excel表格&#xff0c;多sheet&#xff0c;多页表格到一个excel表里面&#xff0c;具体思路 根据Export2Excel插件&#xff0c;并修改插件…

NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?

对很多开发者来说&#xff0c;在 NFT 数据海洋中需要对每个 NFT 进行索引和筛选是十分困难且繁琐的&#xff0c;NFT 数据获取仍是一大问题。而数据平台提供的 API 使得开发者可以通过接口获取区块链上 NFT 的详细信息&#xff0c;并对其进行分析、处理、统计和可视化。在本篇文…

今天女神节,用python画个贺卡送给母亲吧

今天女神节&#xff0c;你给女神妈妈准备了什么祝福呢&#xff1f;如果还没有&#xff0c;那么画个贺卡送给她吧&#xff0c;在你眼里&#xff0c;她是一个什么样的人呢&#xff1f; 是"可爱"&#xff0c;“温柔”&#xff0c;“美丽”&#xff0c;“漂亮”&#xf…

OpenCV各模块函数使用实例(11)--- 矩阵和数组操作(Operations on arrays)

OpenCV各模块函数使用实例&#xff08;11&#xff09;M、矩阵和数组操作&#xff08;Operations on arrays&#xff09;本节描述矩阵的基本操作&#xff0c;这些操作是图像处理和其他数组算法实现的基本操作&#xff0c;包括矩阵的运算&#xff0c;特征值和特征向量&#xff0c…

详细介绍关于链表【数据结构】

文章目录链表单链表尾插头插尾删第一种方式删除第二种头删查找pos之前插入pos位置删除pos后面插入pos位置后面删除链表 顺序表缺点&#xff1a; 空间不够了 需要扩容&#xff0c;但是扩容是有消耗的头部或中间位置需要插入或删除&#xff0c;需要挪动 &#xff0c;但是挪动是…

如何让AI帮你干活-娱乐(3)

背景今天的话题会偏代码技巧一些&#xff0c;对于以前没有接触过代码的朋友或者接触代码开发经验较少的朋友会有些吃力。上篇文章介绍了如何广视角的生成相对稳定的视频。昨天的实现相对简单&#xff0c;主要用的是UI界面来做生成。但是生成的效果其实也显而易见&#xff0c;不…

汽车娱乐系统解决方案

Danlaw在汽车和航空航天行业里是全球知名的技术和服务供应商&#xff0c;致力于提供更加安全与智能的系统。Danlaw以突破性技术和高效开发、动态环境的自适应解决方案而闻名。Danlaw优秀的联网汽车解决方案使之成为全球大型互联设备供应商之一。 一 信息娱乐系统测试 | 风丘科…

力扣-查找每个员工花费的总时间

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1741. 查找每个员工花费的总时间二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行…

妙算(manifold-2G)通过网线连接笔记本实现静态ip上网

本质就是共享笔记本wifi&#xff0c;配置以太网静态ip&#xff0c;然后在工控机上连接 参考&#xff1a; https://zhuanlan.zhihu.com/p/378814739 https://blog.csdn.net/weixin_42128941/article/details/98635554 设备 笔记本电脑win10妙算ubuntu16.04网线 首先&#xff0…

RTOS中的消息队列的原理以及应用

消息队列的原理 RTOS中的消息队列是一种用于任务间通信的机制&#xff0c;它可以实现任务之间的异步通信&#xff0c;从而实现任务间的解耦。消息队列是一个先进先出的数据结构&#xff0c;任务可以向队列中发送消息&#xff0c;也可以从队列中接收消息。 消息队列的原理如下…

ChatGPT技术与商业模式及产业发展布局方案

文章目录模块一&#xff1a;概念模块二&#xff1a;架构模块三&#xff1a;技术模块四&#xff1a;算力模块五&#xff1a;体验模块六&#xff1a;应用模块七&#xff1a;商业模块八&#xff1a;产业模块九&#xff1a;建议结语主要内容&#xff1a; 采用模块化教学方法&#x…

【数据结构】二叉树与堆

文章目录1.树概念及结构1.1树的相关概念1.2树的结构2.二叉树概念及结构2.1相关概念2.2特殊的二叉树2.3二叉树的性质2.4二叉树的存储结构3.二叉树的顺序结构及实现3.1二叉树的顺序结构3.2堆的概念3.3堆的实现Heap.hHeap.c3.4堆的应用3.4.1 堆排序3.4.2 TOP-KOJ题最小K个数4.二叉…