js移动端事件

1.触摸事件
click事件多用于pc端,在移动端有延迟

touchstart() //手指触摸屏幕
touchmove() //手指在屏幕上移动
touchend() //手指离开屏幕
touchcancle() //触摸被系统事件终段

var d1 = document.getElementById("d1");
d1.addEventListener("touchstart",function(){
    console.log("触摸了");
    event.touches;
    //获取其中的一个触摸点 touches[0]
    var t = event.touches[0];

    /*
     * clientX / clientY
     * screenX / screntY
     * pageX / pageY
     */
    d1.innerHTML = "x:"+t.pageX+"\ny:"+t.pageY;

},false);

d1.addEventListener("touchmove",function(){
    d1.innerHTML +="触摸滑动";
})

d1.addEventListener("touchend",function(){
    d1.innerHTML += "触摸结束";
});

2.移动端对比PC端需要考虑性能优化:
实现动画时:
1.改变元素的位置,尽量不要使用定位修改left,top属性,推荐transform属性,渲染性能更好动画相比更流畅
2.移动端动画时,尽量游戏考虑使用css动画,若使用JS动画实现,则尽量避免使用计时器,优先考虑requestAnimationFrame()

var d2 = document.getElementById("d2");
var w=0;
function test(){
    w++;
    if(w<100){
        window.requestAnimationFrame(test);
    }
    d2.style.width = w + "%";
}

requestAnimationFrame(test);

3.requestAnimationFrame() 区别于计时器
1.不需要设置时间间隔,默认安装浏览器刷新频率
2.当窗口处于闲置状态,会自动暂停当前的动画;节省浏览器消耗,优化内存.如果窗口恢复计划状态动画会继续

移动端开发中,JavaScript 的点击事件与桌面端有所不同,主要是由于触摸屏的交互方式不同。为了提升用户体验,移动端通常会使用 `touchstart`、`touchmove`、`touchend` 等触摸事件来替代或增强 `click` 事件。 ## 一、移动端点击事件的实现方式 ### 1. 使用 `click` 事件 虽然 `click` 事件移动端也可以使用,但存在 **300ms 的延迟**(用于判断是否是双击缩放)。在移动端,建议使用 `touchend` 来避免延迟。 ```javascript document.getElementById('myButton').addEventListener('click', function() { alert('Clicked!'); }); ``` ### 2. 使用 `touchend` 事件(推荐) ```javascript document.getElementById('myButton').addEventListener('touchend', function(e) { e.preventDefault(); // 阻止默认行为 alert('Touched!'); }); ``` ### 3. 同时支持 `click` `touchend` 为了兼容桌面移动端,可以同时监听两种事件: ```javascript const button = document.getElementById('myButton'); function handleClick() { alert('Button clicked or touched!'); } button.addEventListener('click', handleClick); button.addEventListener('touchend', function(e) { e.preventDefault(); handleClick(); }); ``` --- ## 二、优化移动端点击体验 ### 1. 阻止默认行为(如滚动、缩放) ```javascript document.addEventListener('touchstart', function(e) { e.preventDefault(); // 阻止默认的滚动缩放行为 }, { passive: false }); // 注意:passive: false 是为了允许 preventDefault() ``` > ⚠️ 注意:现代浏览器默认 `touchstart` `touchmove` 的监听器是 passive 的,不能使用 `preventDefault()`,除非显式设置 `{ passive: false }`。 ### 2. 防止重复触发(节流/去抖) ```javascript let isTouched = false; button.addEventListener('touchend', function(e) { if (isTouched) return; isTouched = true; handleClick(); setTimeout(() => { isTouched = false; }, 300); // 300ms 内不能重复点击 }); ``` --- ## 三、使用 `PointerEvent`(现代浏览器推荐) `PointerEvent` 是一种统一的 API,可以同时处理鼠标、触摸、触控笔等输入方式。 ```javascript button.addEventListener('pointerup', function(e) { alert('Pointer clicked or touched!'); }); ``` --- ## 四、CSS 优化点击区域 ```css #myButton { -webkit-tap-highlight-color: rgba(0,0,0,0); /* 去除点击高亮 */ touch-action: manipulation; /* 提高点击响应速度 */ } ``` --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值