关于移动端的问题

本文详细介绍了移动端开发中常见的点透现象,解释了其产生的原因,并提供了多种解决方案,包括阻止事件传播、禁止用户缩放等,同时展示了具体的JavaScript代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动端的点透:
当上层元素发生点击的时候,下层元素也有点击(焦点)特性,
在300ms之后,如果上层元素消失或者隐藏,目标点就会“漂移”到
下层元素身上,就会触发点击行为。

    解决:
        1.下层不要使用有点击(焦点)特性的元素。

        2.阻止pc事件。

        1.IOS10下设置meta禁止用户缩放是不可行的。(使用阻止pc事件就可以在IOS10下禁止用户缩放)

        2.解决IOS10下溢出隐藏的问题。

        3.禁止系统默认的滚动条、阻止橡皮筋效果

        4.禁止长按选中文字、选中图片、系统默认菜单

        5.解决点透问题

        6.也阻止了焦点元素的焦点行为(要正常使用:ev.stopPropagation()阻止冒泡)

document.addEventListener(‘touchstart’,function(ev){
ev.preventDefault();
}, { passive: false });

/*
当给某个元素加上了事件绑定函数之后,事件函数默认的第一个参数就是事件对象
事件对象:
当用户在浏览器下触发了某个行为,事件对象会记录用户操作时一些细节信息。

    touches 当前位于*屏幕*上的所有手指的一个列表

    targetTouches 位于当前DOM元素上的手指的一个列表

    changedTouches  涉及当前事件的手指的一个列表

*/
document.addEventListener('touchstart',function(ev){
    ev.preventDefault();
});
var div = document.getElementById('div1');


div.addEventListener('touchmove',start);
function start(ev){
    //this.innerHTML = ev.touches.length;
    //this.innerHTML = ev.targetTouches.length;
    this.innerHTML = ev.changedTouches.length;
}

//判断安卓还是ios
var u = navigator.userAgent;
var isAndroid = u.indexOf(‘Android’) > -1 || u.indexOf(‘Adr’) > -1;
var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/);

检测横竖屏
// window.orientation
// 横屏 90 -90
// 竖屏 0 - 180

设备的晃动
window.addEventListener(‘devicemotion’, function(e) {
var motion = e.accelerationIncludingGravity;
var x = Math.round(motion.x);
var y = Math.round(motion.y);
var z = Math.round(motion.z);
})

检测手机角度变换
window.addEventListener(‘deviceorientation’, function(e) {
var x = Math.round(e.beta);
var y = Math.round(e.gamma);
var z = Math.round(e.alpha);
});

var box = document.querySelector(‘#box’);
/*
当手指触摸元素,当前屏幕上有两根或者两根以上的手指执行
*/
box.addEventListener(‘gesturestart’, function(e) {
this.style.background = “blue”;
});
/*
当我们触发了 gesturestart时,手指位置发生变化时执行
*/
box.addEventListener(‘gesturechange’, function(e) {
this.style.background = “blue”;
});
/*
当我们触发了 gesturestart时,然后抬起手指,这时屏幕上的手指个少于2个或者当前元素没有手指了,就会触发gestureend
*/
box.addEventListener(‘gestureend’, function(e) {
this.style.background = “red”;
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值