移动端事件touchstart touchmove touchend 动画事件 过渡事件

article/2025/9/19 9:32:41

在移动端新增了touch事件,因为手指的行为叫做“触摸”, 鼠标的行为叫做“点击”

但是它仍然支持点击事件,有300ms的延迟,检测是否双击

移动端的三个事件

touchstart:触摸开始   

绑定方式:

dom.addEventListener(“touchstart”, fn)

 

touchmove: 触摸移动

绑定方式:

dom.addEventListener(“touchmove”, fn)

 

 

touchend: 触摸结束

绑定方式:

dom.addEventListener(“touchend”, fn)

 

事件对象

 在touchstart和touchmove事件中获取手指相关信息的属性: e.touches

// 获取元素
var box = document.getElementById("box");
// 为box注册touchstart事件
box.addEventListener("touchstart", function(e) {console.log(e);// 在touchstart事件获取手指相关信息的属性: e.touchesconsole.log(e.touches[0].clientX);console.log(e.touches[0].clientY);
})// 注册touchmove事件
box.addEventListener("touchmove", function(e) {// 在touchmove事件中,获取手指相关信息的属性: e.touchesconsole.log(e.touches[0].clientX);console.log(e.touches[0].clientY);
})

在touchend事件中获取手指信息的相关属性叫做: e.changedTouches

// 注册touchend事件
box.addEventListener("touchend", function(e) {// 在touchend事件中获取手指相关信息的属性: e.changedTouchesconsole.log(e.changedTouches[0].clientX);console.log(e.changedTouches[0].clientY);
})

动画事件和过度事件

当一个元素过度完成之后会触发一个事件: transitionend事件

<style type="text/css">* {margin: 0;padding: 0;}#box {position: absolute;width: 100px;height: 100px;background-color: red;left: 0;top: 0;transition: all 1s;}#box.cur {left: 100px;}
</style>
</head>
<body>
<div id="box"></div>
<script type="text/javascript">
// 获取元素
var box = document.getElementById("box");// 两秒之后添加类名
setTimeout(function() {box.setAttribute("class", "cur");
}, 2000)// 当一个元素过度完成之后会触发一个事件
box.addEventListener("transitionend", function() {console.log("过度完成");
})

动画事件

当一个元素动画开始的时候会触发一个事件: animationstart

	#box {position: absolute;width: 100px;height: 100px;background-color: red;left: 0;top: 0;/*动画的调用*/animation: donghua 1s ease 2s 3 alternate;}/*动画的定义*/@keyframes donghua {from {left: 0;}to {left: 100px;}}// 获取元素
var box = document.getElementById("box");// 动画开始事件
box.addEventListener("animationstart", function() {console.log("动画开始");
})

当一个元素动画结束之后会触发一个事件: animationend事件

	#box {position: absolute;width: 100px;height: 100px;background-color: red;left: 0;top: 0;/*动画的调用*/animation: donghua 1s ease 2s 3 alternate;}/*动画的定义*/@keyframes donghua {from {left: 0;}to {left: 100px;}}// 动画结束事件
box.addEventListener("animationend", function() {console.log("动画结束");
})

touchstart   touchmove   touchend 实现轮播图

 <div class="banner" id="banner"><ul id="carousel"><li><img src="images/banner0.jpg" alt="" /></li><li><img src="images/banner1.jpg" alt="" /></li><li><img src="images/banner2.jpg" alt="" /></li><li><img src="images/banner3.jpg" alt="" /></li><li><img src="images/banner4.jpg" alt="" /></li><li><img src="images/banner0.jpg" alt="" /></li></ul></div>css
/*头部部分完成*/
.banner {position: relative;max-width: 540px;min-width: 320px;height: 107px;width: 100%;margin: 0 auto;overflow: hidden;/*background: url(../images/banner.jpg) no-repeat;*//*background-size: 100% 100%;*/
}/*滚动轮播图的布局关键: ul的宽度要足够的宽,所有的图片要并排在一起*/
.banner #carousel {position: absolute;width: 600%;height: 100%;left: 0;top: 0;
}.banner #carousel li {float: left;width: 16.66%;
}.banner #carousel li img {width: 100%;height: 100%;
}#carousel {transition: all 1s;}<script type="text/javascript">/* 实现轮播图banner 的高度自适应 */// 获取元素var banner = document.getElementById("banner");// 计算图片的比例  图片大小宽高var r = 768 / 154;// 获取当前视口的宽var width = document.documentElement.clientWidth;// console.log(width);// 计算比例var height = width / r;// console.log(height);// 赋值给bannerbanner.style.height = height + "px";/* 轮播图动画效果 */var carousel = document.getElementById("carousel");var length = carousel.getElementsByTagName("li").length - 1;// 定义信号量var idx = 0;// 定义中转量var left = 0;// 定义锁  函数节流var lock = true;// 为carousel注册touchstart事件carousel.addEventListener("touchstart", function(e) {// 函数节流   防止用户频繁首次滑动if (!lock) {return;}// 在touchstart事件中取消过度  首次滑动屏幕先把过渡取消掉this.style.transition = "none";// 获取手指首次触摸屏幕相关的信息left = e.touches[0].clientX;})// 为了让图片跟随手指移动为carousel去注册touchmove事件carousel.addEventListener("touchmove", function(e) {// 函数节流  防止用户频繁滑动if (!lock) {return;}// 获取手指移动时候的位置var x = e.touches[0].clientX;// 当idx===0并且还是往右滑动,此时应该显示最后一张图片if (idx === 0 && x > left) {// 改变carousel的定位left值carousel.style.left = -width * length + x - left + "px";return;}// 改变carousel的定位值  让图片开始滑动到指定的位置carousel.style.left = -width * idx + x - left + "px";})// 为carousel注册touchend事件   手指离开屏幕的事件carousel.addEventListener("touchend", function(e) {// 函数节流if (!lock) {return;}// 把锁关闭 lock = false;// 在手指离开屏幕的时候要加上过度this.style.transition = "all 1s";// 获取手指离开之后的位置var x = e.changedTouches[0].clientX;// 判断手指滑动的方向if (x > left) {// 说明是往右滑动,图片应该从左侧出现,相当于左按钮点击事件// 左按钮点击事件的策略: 先验证, 再拉动// 改变信号量idx--;// 验证if (idx < 0) {idx = length - 1;}} else if (x < left) {// 说明往左滑动,图片应该从右侧出现,相当于右按钮点击事件// 右按钮点击事件的策略: 先拉动, 再验证// 改变信号量idx++;// 边界判断}// 拉动carousel.style.left = -width * idx + "px";})// 给carousel注册过度完成事件carousel.addEventListener("transitionend", function() {if (idx > length - 1) {// 取消过度carousel.style.transition = "none";idx = 0;carousel.style.left = -width * idx + "px";}console.log("过渡完成")// 开锁lock = true;})</script>

 


http://chatgpt.dhexx.cn/article/ShcK4Vpp.shtml

相关文章

微信小程序、uniapp使用touchstart和touchmove左右滑动删除。以及解决上下抖动问题。

展示效果图直接上代码 <viewv-for"(item, index) in arr":key"item.id"touchstart"touchstart($event)"touchmove"touchmove(index, $event)":class"[touch-item, item.isTouchMove ? touch-move-active : ]" ><…

html按键使用touch,HTML touchstart事件用法及代码示例

每当用户触摸HTML元素时&#xff0c;就会使用touchstart事件执行脚本。触摸特定元素时&#xff0c;如果touchstart事件与之关联&#xff0c;则可以使用它触发javascript函数。 注意&#xff1a;touchstart事件仅在触摸屏设备上起作用。 用法: object.ontouchstart myScript; 以…

JavaScript touch 事件 touchstart touchmove touchend

JavaScript touch 事件 touchstart touchmove touchend MDN 官方文档&#xff1a; https://developer.mozilla.org/en-US/docs/Web/API/Touch_events 一、touch 事件有哪些 页面中的 touch 事件一般在移动端使用&#xff0c;pc 端是没有效果的。 touch 相关的事件有四个 touc…

触摸事件(touchstart、touchmove和touchend)

触摸事件(touch)会在用户手指放在屏幕上面的时候、在屏幕上滑动的时候或者是从屏幕上移开的时候出发。下面具体说明 touchstart事件&#xff1a;当手指触摸屏幕时候触发&#xff0c;即使已经有一个手指放在屏幕上也会触发。 touchmove事件&#xff1a;当手指在屏幕上滑动的时候…

Vue 绑定使用 touchstart touchmove touchend

今天要做一个页面div长按后触发事件&#xff0c;简单学习后实现如下&#xff1a; 先看代码&#xff1a; <template><div><div class"test" touchstart"gtouchstart()" touchmove"gtouchmove()" touchend"gtouchend()"…

H5移动端 利用touchstart 达到长按事件

一开始的没加.native ,结果长按事件不会触发, 原因是: 给vue组件绑定事件时候&#xff0c;必须加上native &#xff0c;否则会认为监听的是来自Item组件自定义的事件等同于在子组件中: 子组件内部处理click事件然后向外发送click事件: semit"dlick”.fn) //长按事件&am…

javaScript-touch事件详解(touchstart、touchmove和touchend)-滑动事件案例

HTML5中新添加了很多事件&#xff0c;但是由于他们的兼容问题不是很理想&#xff0c;应用实战性不是太强&#xff0c;所以在这里基本省略&#xff0c;咱们只分享应用广泛兼容不错的事件&#xff0c;日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件…

「移动端」touch事件,touchEvent对象

随着智能手机普及&#xff0c;有越来越多的手机网页和网页版游戏&#xff0c;手机触摸、移动、旋转等等&#xff0c;多种操作。一般电脑的人机交互靠的是鼠标&#xff0c;而手机用的就是触摸。区别有&#xff1a; PC 端一个电脑只能有一个鼠标&#xff0c;而移动端有多点触摸。…

移动端开发touchstart,touchmove,touchend事件详解使用

页面使用到了触摸事件"touchstart"&#xff0c;“touchmove”&#xff0c;“touchend”。需求&#xff1a;当你手指接触到屏幕并向左滑动时&#xff0c;被滑动的服务商信息开始向左滑动同时出现"编辑"和"停用"操作按钮。若继续用手指向右滑动&am…

C++智能指针的实现与使用(详解)

C智能指针的实现与使用(详解) 智能指针介绍 缘起 C指针的实际问题 分配内存忘记释放&#xff0c;导致内存泄漏有指针引用时释放内存&#xff0c;导致其它指针非法访问异常一些对象的声明周期难以明确 办法 首先重载运算符*、->、[]、使得一个类具有指针的操作 其次&a…

详谈智能指针

一、什么是智能指针 在讲智能指针之前我们必须先知道什么是智能指针&#xff0c;智能指针是一个类&#xff0c;是对普通指针的一个封装使得智能指针对象具有普通指针类型一样的操作。 智能指针是存储指向动态分配&#xff08;堆&#xff09;对象指针的类&#xff0c;用于生…

C++中智能指针详解

1、问题引入 在C中&#xff0c;静态内存和栈内存外&#xff0c;还有一部分内存称为堆程序用堆来存储动态分配的对象即那些在程序运行时分配的对象&#xff0c;当动态对象不再使用时&#xff0c;我们的代码必须显式的销毁它们。在C中一般使用“new”&#xff1a;在动态内存中为对…

C/C++智能指针

目录 1.1RAII(资源获取几初始化) 1.2auto_ptr 1.3unique_ptr 1.4shared_ptr 1.5weak_ptr 我们在在动态开辟空间的时候&#xff0c;malloc出来的空间如果没有进行释放&#xff0c;那么回传在内存泄漏问题。或者在malloc与free之间如果存在抛异常&#xff0c;那么还是有内存泄…

Qt 之 智能指针汇总

来源 还有其他一些&#xff0c;做了一些汇总和测试&#xff0c;就不全列了。 文章目录&#xff1a; 一、垂悬指针的问题 二、Qt中的智能指针 1、QPointer 2、QSharedPointer & QWeakPointer 3、QScopedPointer 4、其他智能指针 三、实践记录 …

智能指针用法及其使用代码详解

网络上大多有关智能指针的解析只停留于简单的字面理解&#xff0c;今天来详细解析一下三种智能指针的用法以及具体的代码。 目录 概念 RAII机制介绍 智能指针雏形 shared_ptr原理介绍 shared_ptr使用方法 unique_ptr weak_ptr 概念 智能指针不是一个指针&#xff0c;它…

C++ 智能指针

shared_ptr 智能指针也是模板类&#xff0c;因此当我们创建一个智能指针是要提供额外的信息——指针可以指向的类型。默认初始化的智能指针保存着一个空指针。shared_ptr允许多个指针指向同一对象。 shared_ptr<string> p1; //可指向string shared_ptr<list<int&…

【C++】智能指针详解

今天我们来讲一下c中的智能指针。 目录 1. 智能指针初识1.1 什么是智能指针1.2 智能指针发展历史1.3 为什么需要智能指针 3. 智能指针原理3.1 RALL3.2 智能指针的分类3.2.1 auto_ptr3.2.2 unique_ptr3.2.3 shared_ptr3.2.3.1 shared_ptr 原理3.2.3.2 shared_ptr 的模拟实现3.2.…

智能指针详解

目录 前言 1、为什么需要智能指针&#xff1f; 2、智能指针的原理 3、智能指针的分类 3.1 auto_ptr 3.2 unique_ptr 3.3 shared_ptr 前言 C11中引入了智能指针的特性&#xff0c;本文将详细介绍智能指针的使用。 1、为什么需要智能指针&#xff1f; 我们来看一段代码&…

【c++复习笔记】——智能指针详细解析(智能指针的使用,原理分析)

&#x1f482; 个人主页:努力学习的少年&#x1f91f; 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 一. 智能指针的基本概念 二. 智能指针的定义和使用 三. a…

C++ 智能指针 - 全部用法详解

为什么要学习智能指针&#xff1f; 咳咳&#xff0c;这个问题不是问大家的&#xff0c;是询问我自己的&#xff01; 我依稀记得刚离校出来找实习工作那会儿(2020年7月)&#xff0c;去面试一份工作&#xff0c;面试官问了我许多问题&#xff0c;其中有一个问题就是问&#xff1a…