1.12移动端事件

解决移动端延迟300s的插件:
<script type='application/javascript' src='/path/to/fastclick.js'></script>
使用:

jquery:
$(function() {
    FastClick.attach(document.body);
});
js原生:
if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function() {
        FastClick.attach(document.body);
    }, false);

事件类型

touchstart 手指按下
touchmove 手指移动
touchend 手指抬起

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

    <meta name="viewport" content="width=device-width">
<style>
    div{
        height: 200px;
        width: 200px;
        background: red;
    }
</style>
</head>
<body>


    <div></div>
    <p></p>


<script>


var oDiv = document.querySelector('div');
var oP = document.querySelector('p');

//最好不要用on的方式, 在chrome 模拟器下时好时坏
oDiv.addEventListener('touchstart', function(){
    oP.innerHTML += '按下';
}, false);

oDiv.addEventListener('touchmove', function(){
    oP.innerHTML += '移动';
}, false);

oDiv.addEventListener('touchend', function(){
    oP.innerHTML += '抬起';
}, false);

</script>
</body>
</html>

PC端事件用在移动端会慢300s

移动端的点透

<style>
div{
    height: 200px;
    width: 200px;
    background: rgba(99, 99, 99, 0.5);
    position: absolute;
    top: 0;
}
</style>
<span>span, 点击我</span>

<div></div>
<script>
var oDiv = document.querySelector('div');
var oSpan = document.querySelector('span');


oDiv.addEventListener('touchend', function(){
    this.style.display = 'none';
}, false);

oSpan.addEventListener('click', function(){
    alert(1);
}, false);

</script>

效果是点击div,手指抬起div消失

但是,当你点到div上span标签的位置,会触发span的click事件,div是覆盖了span标签的

解决:
1:如果你点击div300毫秒之后才抬起手指, 也不会触发span的click事件
原因就是因为pc上的事件比移动端的事件的300ms延迟
2:换成移动端事件

 oSpan.addEventListener('touchend', function(){
    alert(1);
}, false);

3:阻止pc的事件

//猜想(pc的事件应该都算默认行为) 
document.addEventListener('touchstart', function(ev){//在移动事件里阻止默认行为
    ev.preventDefault();
}, false);

这是你阻止的click事件, 永远都不会触发, a标签也不会跳转,

touch所有类型事件都会冒泡,如果阻止了touchstart的默认行为,后续的mousedown和click事件将不会触发

阻止了touchmove的默认行为,后续的mousemove事件将不会触发

如果阻止了touchend的默认行为,后续的mouseup和click事件将不会触发

同时解决了:
// <meta name="viewport" content="width=device-width,user-scalable=no">
IOS10下设置meta禁止用户缩放是不可行的。(使用阻止pc事件就可以在IOS10下禁止用户缩放)

解决IOS10下溢出隐藏的问题。
禁止系统默认的滚动条、阻止橡皮筋效果

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

解决点透问题

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

手机端,无缝滚动效果代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <style>
    *{
        margin:0;
        padding:0;
    }
    .box{
        width:100%;
        
        font-size: 0;
        /*overflow: hidden;*/
    }
    .wrap{
        position: relative; 
        left: 0;
        white-space: nowrap;
    }
    .wrap img{
        width:100%;
        display: inline-block;
    }
    </style>
</head>
<body>
    <div class="box">
        <div class="wrap">
            <img src="img/1.jpg" alt="">
            <img src="img/2.jpg" alt="">
            <img src="img/3.jpg" alt="">
            <img src="img/4.jpg" alt="">
            <img src="img/5.jpg" alt="">
            <img src="img/1.jpg" alt="">
            <img src="img/2.jpg" alt="">
            <img src="img/3.jpg" alt="">
            <img src="img/4.jpg" alt="">
            <img src="img/5.jpg" alt="">
        </div>
    </div>
    <script>
        var wrap=document.querySelector('.wrap');
        var img=document.querySelector('img');
        var left;
        var disX;
        var imgW=img.offsetWidth;
        wrap.addEventListener('touchstart',function(ev){

            this.style.transition='none';
            this.style.webkitTransition='none';
            left=getComputedStyle(this)['left'];//当前wrap的left 有px单位
            left = parseInt(left);//去掉px
            disX=ev.changedTouches[0].pageX;//手指的位置
            // console.log(disX)
            var iNow=Math.round(left/imgW)
            if(iNow===0){
                this.style.left=-5*imgW+'px';
            }
            if(iNow===-9){
                this.style.left=-4*imgW+'px';
            }
            left=getComputedStyle(this)['left'];//当前wrap的left 有px单位
            left = parseInt(left);//去掉px

        })
        wrap.addEventListener('touchmove',function(ev){
            ev.preventDefault();//阻止图片的默认行为,使图片可以拖动
            var moveDisX=ev.changedTouches[0].pageX-disX;//获取手指移动距离
            this.style.left=left+moveDisX+'px';
            // console.log(moveDisX)
                
        })
        wrap.addEventListener('touchend',function(ev){
            this.style.transition='1s left';
            this.style.webkitTransition='1s left';
            left=getComputedStyle(this)['left'];
            left=parseInt(left);
            var iNow=Math.round(left/imgW);
            this.style.left=iNow*imgW+'px';

        })

    </script>
    
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 移动端的常见事件 touchstart 手指按下时触发touchmove 手指移动touchend 手指抬起 p...
    llpy阅读 2,024评论 0 3
  • javascript事件基础 我们的网页之所以丰富多彩并具有交互功能,是因为我们的javascript脚本语言,而...
    keyworldtony阅读 484评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 在西湖边吟诵“欲把西湖比西子,淡妆浓抹总相宜。” 在个园中感叹“宁可食无肉,不可居无竹。” 在昨夜星风雨骤,繁花落...
    讼儿阅读 214评论 4 7
  • 闪电总是逃不出眼睛 雷声也无法掩盖耳朵旁听 天地织起一张网 没有一条鱼能离开池塘 蝉的洞穴已被淹没 就像曾经的话语...
    _赵小妮_阅读 225评论 0 5