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

要实现手机端横向滑动效果并不难,了解实现的原理及业务逻辑就很容易实现。原理:touchstart(手指按下瞬间获取相对于页面的位置)——》touchmove(手指移动多少,元素相应移动多少)。

接下来讲讲实现逻辑:

其实就是手指拖动列表向哪个方向移动多少像素,并设置左右拖动的边界值。

附上代码及注释:

	<div id="common_wrap" class="common-wrap">
		<h4 class="common-kit__h4">在区域内向左右滑动</h4>
			<ul class="common-kit__list" id="mask" style="left:0px">
				<li><a href="javascript:;">感冒药箱</a></li>
				<li><a href="javascript:;">健胃消食药箱</a></li>
				<li><a href="javascript:;">高血压药箱</a></li>
				<li><a href="javascript:;">慢病控制药箱</a></li>
				<li><a href="javascript:;">孕妇育儿药箱</a></li>
				<li><a href="javascript:;">糖尿病药箱</a></li>
			</ul>
	</div>

设置样式:

	*{
		padding: 0;
		margin: 0;
	}
	html,body{
		width: 100%;
		overflow: hidden;
	}
	.common-wrap{
		width: 100%;
		height: 105px;
		border-bottom: 8px solid #eee;
	}
	.common-kit__h4{
		font-size: 14px;
		margin-top: 17px;
		margin-left: 8px;
		letter-spacing: 0.2px;
	}
	.common-kit{
		width: 100%;
		position: relative;
	}
	.common-kit__list{
		width: 558px;
		position: absolute;
		margin-top: 10px;
		height: 80px;
	}
	.common-kit__list li{
		position: relative;
		list-style: none;
		width: 80px;
		height: 80px;
		background-color: #eee;
		float: left;
		margin-left: 13px;
	}
	.common-kit__list li a{
		text-decoration: none;
		font-size: 12px;
		position: absolute;
		top:50%;
		transform:translateY(-50%);
		text-align: center;
		padding: 0px 12px;
	}
	.common-kit__list li:first-child{
		margin-left: 8px;
	}

js代码:

function slidecommonkit(){

	var mask = document.getElementById(‘mask‘);
	var common_kit__list=document.querySelector(‘.common-kit__list‘);
        var startPosition, endPosition, deltaX, deltaY, moveLength;
        var commonkitLeft;

    /*手指按下瞬间触发touchstart事件*/
    mask.addEventListener(‘touchstart‘, function (e) {
        commonkitLeft=parseInt(common_kit__list.style.left);
        var touch = e.targetTouches[0];  //targetTouches位于当前DOM元素上的手指动作的列表
        startPosition = {   //取屏幕上第一个手指相对于页面的坐标
            x: touch.pageX,
            y: touch.pageY
        }
    });

    /*手指移动触发touchmove事件*/
    mask.addEventListener(‘touchmove‘, function (e) {
        var touch = e.targetTouches[0];
        endPosition = {
            x: touch.pageX,
            y: touch.pageY
        }

        deltaX = endPosition.x - startPosition.x;   //移动到最后的坐标x - 开始时的坐标x
        moveLength = Math.abs(deltaX);   //获得移动的x方向的距离

        /*向左移动的函数*/
        var swipeLeft=function(){
            if( deltaX<(-30) ){   //这里以30作为判断是否触发、如果deltaX小于-30,说明向左移动

                if(Math.abs(commonkitLeft)+moveLength > ( common_kit__list.offsetWidth-window.innerWidth ) ){   //判断临界值
                    common_kit__list.style.left=window.innerWidth-common_kit__list.offsetWidth+‘px‘;
                }else{
                    common_kit__list.style.left=commonkitLeft-moveLength+‘px‘;  //上一次的left值-移动的距离(由于距离是正数,而向左移动left值是负数,所以用-)
                }
            }
        }
        swipeLeft();   //执行该函数

        /*向右移动的函数*/
        var swipeRight=function(){
            if( deltaX>30 ){
                /*主要是逻辑*/
                if(commonkitLeft+moveLength > 0  ){
                    common_kit__list.style.left=0+‘px‘;
                }else{
                    common_kit__list.style.left=commonkitLeft+moveLength+‘px‘;
                }
            }
        }
        swipeRight();

    });

};

slidecommonkit();

效果图如下:

这样就实现横向滑动列表效果了。

注意:使用touch事件必须要下载touch.min.js   <script src="touch.min.js"></script> 才能使用,原生js是没有这个事件的。

时间: 2024-10-18 01:51:49

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

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

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

移动端touch事件的使用

一.支持webkit的touch事件 pc上的web页面鼠标会产生 iphone.ipod  Touch.ipad上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel 事件,分别对应了触屏开始.拖拽及完成触屏事件和取消. 1.touchstart--当手指触碰屏幕时候发生.不管当前有多少只手指 2.touchmove--当手指在屏幕上滑动时连续触发.通常我们再滑屏页面,会调用event的preventDefault()可以阻

移动端 Touch 事件

在移动端页面开发时,常常会用到touch事件,比如左滑右滑的轮播等.常用的触摸事件有touchstart,touchmove,touchend. 每个事件包含下面三个用于跟踪虎摸的属性: touches:表示当前跟踪的触摸操作的touch对象的数组. targetTouches:特定于事件目标的Touch对象的数组. changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组. 每个touch事件包含下面的属性: clientX:触摸目标在视口中的x坐标. clientY

移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法

这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且touchend也经常不触发. 之后百度了一下这个问题,原因是 主要是由于200ms超时导致内核不一定会一直处理touchmove事件,一旦超时会将后续所有的事件转交给UI处理,导致touchmove不会一直触发. 为了解决开发者需要,建议开发者在touchstart时调用event.preventDe

web移动端touch事件

1.移动端与pc端的区别 移动端没有鼠标,自然也没有鼠标事件.所以onmousedown之类的事件监听在移动端时无效的. 移动端为了响应双击事件,onclick事件有300ms的延迟,因为要看看接下来的300ms有没有再次点击,有的话视为双击,没有的话视为单击. 延迟300ms只是理论上,实际上每台手机上这个延迟可能会不同,下面的代码可以测试当前手机上onclick事件的延迟 <script> var now document.ontouchstart = function(){ // 返回

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

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

移动端touch事件滚动

本来想用在北京欢乐谷手机上用touch事件来模拟局部左右内容滚动里,但在touchmove上下滚动时由于禁止了默认事件而body滚动条不能滚动,虽然可以根据touchmove的坐标来判断方向,但体验效果不理想. 后来在查询相关资料后原来可以直接在css中使用overflow:auto;出来的滚动条用CSS3的-wekit-scrollbar{display:none}来隐藏; *拓展*::-webkit-scrollbar 滚动条整体部分*::-webkit-scrollbar-thumb 滚动

原生js移动端touch事件实现上拉加载更多

大家都知道jQuery里没有touch事件,所以在移动端使用原生js实现上拉加载效果还是很不错的,闲话不多说,代码如下: 1 //获取要操作的元素 2 var objSection = document.getElementsByTagName("div")[0]; 3 //给元素绑定监听事件 个人习惯把监听事件写在一块 4 objSection.addEventListener("touchstart", touchStart, false); 5 objSect

移动端--touch事件与点透问题

也来说说touch事件与点击穿透问题: http://blog.csdn.net/alex8046/article/details/52299785