touch事件调研-四个方向的滑动效果demo示例

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
<title>移动端触摸滑动</title>
<meta name="viewport" content="target-densitydpi=320,width=640,user-scalable=no">
<style>
*{margin:0;padding:0;}
html{height: 100%;}
body{ height: 100%;}

</style>
</head>

<body id=‘box‘>

<script>
var myBox = document.getElementById(‘box‘);
var slider = {
    //判断设备是否支持touch事件
    touch:(‘ontouchstart‘ in window) || window.DocumentTouch && document instanceof DocumentTouch,
    slider:document.getElementById(‘box‘),

    //事件
    events:{
        index:0,     //显示元素的索引
        slider:myBox,     //this为slider对象
        handleEvent:function(event){
            var self = this;     //this指events对象
            if(event.type == ‘touchstart‘){
                self.start(event);
            }else if(event.type == ‘touchmove‘){
                self.move(event);
            }else if(event.type == ‘touchend‘){
                self.end(event);
            }
        },
        //滑动开始
        start:function(event){
            var touch = event.targetTouches[0];     //touches数组对象获得屏幕上所有的touch,取第一个touch
            startPos = {x:touch.pageX,y:touch.pageY,time:+new Date};    //取第一个touch的坐标值
            console.log(‘startPos data as:‘ + ‘startPos.x =‘ + startPos.x+ ‘startPos.y =‘ + startPos.y);
            isScrolling = 0;   //这个参数判断是垂直滚动还是水平滚动
            myBox.addEventListener(‘touchmove‘,this,false);
            myBox.addEventListener(‘touchend‘,this,false);
        },
        //移动
        move:function(event){
            //当屏幕有多个touch或者页面被缩放过,就不执行move操作
            if(event.targetTouches.length > 1 || event.scale && event.scale !== 1) return;
            var touch = event.targetTouches[0];
            endPos = {x:touch.pageX - startPos.x,y:touch.pageY - startPos.y};
            console.log(‘endPos data as:‘ + ‘touch.x =‘ + touch.pageX+ ‘touch.y =‘ + touch.pageY);
            isScrolling = Math.abs(endPos.x) < Math.abs(endPos.y) ? 1:0;    //isScrolling为1时,表示纵向滑动,0为横向滑动

            event.preventDefault();
        },
        //滑动释放
        end:function(event){
            var duration = +new Date - startPos.time;    //滑动的持续时间
            if(isScrolling === 0){    //当为水平滚动时
                if(Number(duration) > 10){
                    //判断是左移还是右移,当偏移量大于10时执行
                    if(endPos.x > 10){ //向右移动
                        console.log(‘向右移动‘);
                    }else if(endPos.x < -10){ //向左移动
                        console.log(‘向左移动‘);
                    }
                }

            }else{
                if(Number(duration) > 10){
                    //判断是上移还是下移,当偏移量大于10时执行
                    if(endPos.y > 10){ //向下移动
                        console.log(‘向下移动‘);
                    }else if(endPos.y < -10){ //向上移动
                        console.log(‘向上移动‘);
                    }
                    //myBox.style.left = touch.pageX + ‘px‘;
                }
            }
            //解绑事件
            myBox.removeEventListener(‘touchmove‘,this,false);
            myBox.removeEventListener(‘touchend‘,this,false);
        }
    },

    //初始化
    init:function(){
        var self = this;     //this指slider对象
        if(!!self.touch) self.slider.addEventListener(‘touchstart‘,self.events,false);    //addEventListener第二个参数可以传一个对象,会调用该对象的handleEvent属性
    }
};

slider.init();
</script>
</body>
</html>
时间: 2024-08-01 22:44:04

touch事件调研-四个方向的滑动效果demo示例的相关文章

Android Touch事件传递机制详解 上

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/37961997 最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘记了,其实网上关于Touch事件的传递的文章真的很多,但是很少有系统性的,都是写了一个简单的demo运行了一下,对于我们了解Android Touch事件基本上没有任何帮助. 今

Android——View、ViewGroup事件(Touch事件)处理机制总结

Android中的事件 Touch事件,四种状态: ACTION_DOWN     -->   表示按下了屏幕,一个事件必然从ACTION_DOWN开始 ACTION_MOVE      -->   表示移动手势 ACTION_UP            -->  表示离开屏幕 ACTION_CANCEL  -->   表示取消手势,一般由程序产生,不会由用户产生 一个ACTION_DOWN, n个ACTION_MOVE,1个ACTION_UP,就构成了Android中众多的事件.

菜鸟进阶之Android Touch事件传递(二)

这是touch事件传递系列博客的第二篇,如果想了解touch和click的那些事,请浏览投产事件传递系列的第一篇.http://blog.csdn.net/bingospunky/article/details/43603397 理理思路,我发现touch传递这部分的内容很多,所以每篇博客介绍一个方面比较好.这篇博客主要介绍touch事件传递的现象,一个简单的demo,让大家可以看到touch一步一步传递的过程.下篇博客中在研究源码是怎么实现的.再后面的博客会试图改变这篇文章看到的touch的传

移动端touch事件 || 上拉加载更多

前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误的姿势,例如长按后再touchmove等会出现卡死的假象.(ps:当然, 我不认为是插件的问题,当时的想法是觉得引用的插件存在冲突),于是,我就直接通过封装touch事件完成上拉加载实现分页的功能. 备注:文章最后会加上为实现这个功能我找的一些插件 了解touch事件 在应用touch事件实现上拉加

Android自定义组件——四个方向滑动的菜单实现

今天无意中实现了一个四个方向滑动的菜单,感觉挺好玩,滑动起来很顺手,既然已经做出来了就贴出来让大家也玩弄一下. 一.效果演示 (说明:目前没有安装Android模拟器,制作的动态图片太卡了,就贴一下静态图片吧,实际效果可以下载源代码查看) (向上滑动) (向下滑动) (向左滑动) (向右滑动) 二.实现过程介绍 1.放置5个View (分别是上下左右中) @Override protected void onLayout(boolean changed, int l, int t, int r,

Android自定义组件系列【15】——四个方向滑动的菜单实现

今天无意中实现了一个四个方向滑动的菜单,感觉挺好玩,滑动起来很顺手,目前还没有见过这样的应用,以后能不能在应用中出现或者说有没有实用价值就不好说了,既然已经做出来了就贴出来让大家也玩弄一下,说不定对你有所启发. 一.效果演示 (说明:目前没有安装Android模拟器,制作的动态图片太卡了,就贴一下静态图片吧,实际效果可以下载源代码查看) (向上滑动) (向下滑动) (向左滑动) (向右滑动) 二.实现过程介绍 1.放置5个View (分别是上下左右中) @Override protected v

Touch事件及触屏滑动距离计算

移动端涉及图片轮播或者一些交互性的游戏时都会用到,毕竟移动端交互大多都靠手指. 移动端有四个关于触摸的事件,分别是touchstart.touchmove.touchend.touchcancel(比较少用), 它们的触发顺序是touchstart-->touchmove-->touchend-->click,所以touch事件触发完成后会接着触发click事件,需要注意一下 ,阻止一下事件冒泡就可以了. touch事件可以产生一个event对象,这个event对象除基本的一些属性外还附

H5案例分享:移动端touch事件判断滑屏手势的方向

移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这两次获取的坐标差值来判断手指在手机屏幕上的滑动方向. 思路:用touchmove的最后坐标减去touchstart的起始坐标,X的结果如果正数,则说明手指是从左往右划动:X的结果如果负数,则说明手指是从右往左划动:Y的结果如果正数,则说明手指是从

实现移动端touch事件的横向滑动列表效果

要实现手机端横向滑动效果并不难,了解实现的原理及业务逻辑就很容易实现.原理:touchstart(手指按下瞬间获取相对于页面的位置)-->touchmove(手指移动多少,元素相应移动多少). 接下来讲讲实现逻辑: 其实就是手指拖动列表向哪个方向移动多少像素,并设置左右拖动的边界值. 附上代码及注释: <div id="common_wrap" class="common-wrap"> <h4 class="common-kit__