移动端 触屏滑动条菜单(完善版)



<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=320,user-scalable=no" />

<title>菜单条</title>
</head>

<body>

<style style=‘display:none‘ contentEditable>
*{ margin:0; padding:0;}
ul,li{ margin:0; padding:0; list-style:none;}

#outer{ border:1px  solid red; width:300px; height:46px; margin:20px auto; text-align:center; vertical-align:middle; line-height:46px; position:relative; overflow:hidden; background:#eee;}
#outer:hover{ border-color:#333; cursor:pointer;}
#inner{ position:absolute; left:0; top:1px; height:44px; line-height:44px; width:300px; background:#666;  text-align:left; clear:both; overflow:hidden;}
#inner li{ width:auto; height:44px; float:left; display:inline; padding:0 15px; text-align:center;  }
#inner li:hover{ background:#333;}
#inner li a{font-size:14px; color:#fff; display:inline;width:auto; height:44px; line-height:44px; text-decoration:none;}
.translateZ{ -webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility: hidden;backface-visibility: hidden;}

.classtest{ background:#333;}
</style>

<div id="outer">
    <ul id="inner" >
        <li><a href="">首页start</a></li>
        <li><a href="">美剧1</a></li>
        <li><a href="">电影1</a></li>
        <li><a href="">购物1</a></li>
        <li><a href="">时尚1</a></li>
        <li><a href="">新闻1</a></li>
        <li><a href="">其他1</a></li>
        <li><a href="">热点1</a></li>
        <li><a href="">电视1</a></li>
        <li><a href="">历史1</a></li>
         <li><a href="">首页2</a></li>
        <li><a href="">美剧2</a></li>
        <li><a href="">电影2</a></li>
        <li><a href="">购物2</a></li>
        <li><a href="">时尚2</a></li>
        <li><a href="">新闻2</a></li>
        <li><a href="">其他2</a></li>
        <li><a href="">热点2</a></li>
        <li><a href="">电视2</a></li>
        <li><a href="">结尾end</a></li>
    </ul>
</div>

touches:当前屏幕上所有手指的列表
targetTouches:当前dom元素上手指的列表,尽量使用这个代替touches
changedTouches:涉及当前事件的手指的列表,尽量使用这个代替touches
<script src="../js/jquery-1.9.1.min.js"></script>
<script>
window.onload=function(){

	   function getStyle(obj,attr){
       return obj.currentStyle? obj.currentStyle[attr]:getComputedStyle(obj,false)[attr];
       }

	  var support = document.body.classList==undefined ? false : true ;

	  var outer=document.getElementById("outer");
      var inner=document.getElementById("inner");
	  var li=inner.getElementsByTagName("li");
	  var innerWd=0,i=0;
	  for(;i<li.length;i++){
		   innerWd+=li[i].offsetWidth;
	  }
	  inner.style.width=innerWd+‘px‘;

	  var startX=0;
	  var alls=0;
	  var moveLeft=0;
	  var iSpeedX = 0;
	  var prevX = 0;
	  var timer = null;
	  var resetStartX=true;
	  var maxDistance=parseInt(outer.offsetWidth-innerWd); //最大滑动距离

	  inner.addEventListener("touchstart",start,false);
	  function start(e){
		   if(inner.offsetWidth<outer.offsetWidth)return;//如果内部元素小于外框 不需要滑动

		   var e=e||window.event,
		       touchs=e.changedTouches[0];
               resetStartX=true;;
            //startX=prevX=touchs.pageX;
			   startX=touchs.pageX;
	           prevX=touchs.pageX;

		       alls=this.offsetLeft;

	       inner.addEventListener("touchmove",move,false);
	       inner.addEventListener("touchend",end,false);

	   }

	   function move(e){
		 var e=e||window.event;
		 if (e.touches.length > 1 || e.scale && e.scale !== 1) return; // 当屏幕有多个touch或者页面被缩放过,就不执行move操作
		 var touchs=e.changedTouches[0];

	       iSpeedX = touchs.pageX - prevX;//获取出手一瞬间的速度
		   prevX = touchs.pageX;//当前的始终覆盖上一个
		   moveLeft=touchs.pageX-startX;

		   var that=this;

		   if(that.offsetLeft>=0){
			     if(resetStartX){
					 startX=touchs.pageX;
					 resetStartX=false;
					 }
			   that.style.left=moveLeft/3+alls+‘px‘; 

			}else if(that.offsetLeft<=maxDistance){
				if(resetStartX){
					 startX=touchs.pageX;
					 resetStartX=false;
				  }
			   that.style.left=moveLeft/3+alls+‘px‘;

			}else{
			    that.style.left=moveLeft+alls+‘px‘;
		    }

		   //this.style.webkitTransform=‘translateZ(0)‘; //移动时候  缓存到GPU层
		   that.classList.add(‘translateZ‘); //classList 对已经增加的样式 不在判断是否添加  GPU缓存hack
		   e.preventDefault();
	   }

	   function end(){

		 var self=this;
		 clearInterval(timer);

		 timer=setInterval(function(){

				  if(Math.abs(iSpeedX)<=1||self.offsetLeft>50||self.offsetLeft<maxDistance-50){
					     clearInterval(timer);
							 //if(self.classList.contains(‘translateZ‘)){  //滚动停止 结束时候回收GPU 垃圾
//		                         // self.classList.remove(‘translateZ‘); //不知道怎么删除这样样式
//								 // self.setAttribute("class",‘‘);
//		                       } 

                           if(self.offsetLeft>=0){
							  $(inner).animate({left:0},300,function(){
								  self.classList.remove(‘translateZ‘);   //移除PGU hack
								  });
						    }
						   if(self.offsetLeft<maxDistance){
						   $(inner).animate({left:maxDistance+‘px‘},300,function(){
							    self.classList.remove(‘translateZ‘);   //移除PGU hack
							    });
						   }

				  }else{
			        iSpeedX *= 0.95;
					self.style.left = parseInt(self.offsetLeft + iSpeedX) + ‘px‘;
				 }
			 },20);

	    self.removeEventListener("touchmove",move,false);
	    self.removeEventListener("touchend",end,false);
	    //self.style.webkitTransform=‘‘;
	  } 

}

</script>
</body>
</html>
时间: 2024-10-30 21:23:19

移动端 触屏滑动条菜单(完善版)的相关文章

移动端 触屏滑动条菜单(完善版 转)

移动端 触屏滑动条菜单(完善版) 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8

JS案例之5——移动端触屏滑动

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取消touch事件的时候触发,这个

移动端触屏滑动事件

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取消touch事件的时候触发,这个

移动端触屏滑动,JS事件

先了解下 移动端的触屏滑动 毕竟这玩意其实和PC端还是有一定的区别的 hh 整理了下网上的资料放一放 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:手指放到屏幕上时触发 touchmove:手指在屏幕上滑动式触发 touchend:手指离开屏幕时触发 touchcan

移动端 滑动条菜单(简陋版)

 这个滑动条 淘宝 app上比较常见; <!doctype html> <html> <head> <meta charset="utf-8"> <title>滑动条</title> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="vi

JS移动客户端--触屏滑动事件

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart: //手指放到屏幕上时触发 touchmove: //手指在屏幕上滑动式触发 touchend: //手指离开屏幕时触发 touchcancel: //系统取消touch事件的时候触发,这个好像比较少用 每个触摸事件被触发

JS移动客户端--触屏滑动事件 banner图效果

JS移动客户端--触屏滑动事件 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取

touch移动触屏滑动事件

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 四种touch事件 touchstart 当手指触摸到屏幕时触发,即使已经有一个手指放在了屏幕上也会触发. touchmove 当手指在屏幕上连续滑动时触发,在这个事件发生期间,调用preventDefault()可阻止滚动. touchend 当手指从屏幕上移开时触发

移动端touch触屏滑动事件、滑动触屏事件监听!

移动端touch触屏滑动事件.滑动触屏事件监听! 一.触摸事件 ontouchstart.ontouchmove.ontouchend.ontouchcancel 目前移动端浏览器均支持这4个触摸事件,包括IE.由于触屏也支持MouseEvent,因此他们的顺序是需要注意的:touchstart → mouseover → mousemove → mousedown → mouseup → click1 Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小