移动端 触屏轮播图(完善版)

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=320,user-scalable=no" />

<title>ios 轮播图简版</title>
<style>
*{ margin:0; padding:0;}
ul,li{margin:0; padding:0;list-style:none;}

#outer{ width:800px; height:440px; margin:10px auto 0; position:relative; overflow:hidden; border:1px solid #666; background:#999;}
#inner{  position:absolute; left:0; top:1px; }
#inner li{ width:800px; height:448px; float:left;  overflow:hidden;}
#inner li img{width:800px; height:438px; }
#selects{ position:absolute; bottom:20px; right:50px;  z-index:666;}
#selects span{ float:left; padding:5px; background:#fff; margin-right:5px; border-radius:50%;}
#selects  .on{background:red;}
.translateZ{ -webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility: hidden;backface-visibility: hidden;}
</style>
</head>

<body>
<div id="outer">
	<ul id="inner">
    	<li><a href="https://www.qq.com"   target="_blank">  <img src="../../images/love5.jpg"></a></li>
        <li><a href="https://www.baidu.com" target="_blank"><img src="../../images/love4.jpg"/></a></li>
        <li><a href="https://www.sina.com" target="_blank"><img src="../../images/love3.jpg"/></a></li>
        <li><a href="https://www.163.com"  target="_blank">  <img src="../../images/106442464.jpg"/></a></li>
        <li><a data-href="http://www.baidu.com" ontouchmove="this.s=1;" ontouchend="this.s||window.open(this.dataset.href);this.s=0"> <img src="../../images/love1.jpg"/></a></li>
    </ul>
    <div id="selects"><span class="on"></span><span></span><span></span><span></span><span></span></div>
</div>
<!--<script src="mov3.js"></script>-->
<script src="../../js/jquery-1.9.1.min.js"></script>
<script>

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


window.onload = function(){
	var outer = document.getElementById('outer');
	var inner = document.getElementById('inner');
	var aLi = inner.getElementsByTagName('li');
	var w = parseInt(aLi[0].offsetWidth);
	var innerWid=inner.style.width = aLi.length * w + 'px';
	var iNow=0;
	var startX = 0;
	var downLeft = 0;
	var bBtn=true;
	var startTime=0
	var maxDiatance=parseInt(w)-parseInt(innerWid);
	var nowLeft=0;
	
	//document.ontouchmove = function(e){
		//e.preventDefault();
	//};
	
	inner.addEventListener("touchstart",function(e){
		var self=this;
		var e=e||window.event;
		var touchs = e.changedTouches[0]; //手指头的一个
		startX = touchs.pageX||touchs.clientX;
	    downLeft= parseInt(getStyle(self,'left')); //获取的是21px 带单位的  		//downLeft = this.offsetLeft;     this.offsetLeft获取不到border 以及padding
		var isMoveScale=false;
		
		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];
				   startTime=+new Date; // startTime=Date.now();//html5
			       nowLeft=parseInt((touchs.pageX-startX)),
			       self=this;
				self.classList.add('translateZ');   
			   if(downLeft>=0){//如果从左侧向右到尽头  增加阻力
			           if(isMoveScale){//修复跳跃问题 重置被缩小的 startX
							startX = touchs.pageX||touchs.clientX;
							isMoveScale=false;
						}
				        self.style.left=nowLeft/5+'px';
						
				  }else if(downLeft<= maxDiatance){   //增加阻力
				        if(isMoveScale){//修复跳跃问题 重置被缩小的 startX
							startX = touchs.pageX||touchs.clientX;
							isMoveScale=false;
						}
				        self.style.left=parseInt(nowLeft/5)+maxDiatance+'px';
						
				  }else { 
				        self.style.left=nowLeft+downLeft+'px';	   
			   }
			e.preventDefault();  
		 }
		
		
		function end(e){
		    var e=e||window.event,
			 touchs = e.changedTouches[0],
			 self=this,
		     aboveY=parseInt(self.style.left);
			 
			  if(aboveY>0){
                       $(inner).animate({left:0},200,function(){
							    self.classList.remove('translateZ'); //移除 GPU hack
							    });  
                    }
			  if(aboveY<0&&aboveY<maxDiatance){
                        $(inner).animate({left:maxDiatance+'px'},200,function(){
							    self.classList.remove('translateZ');  //移除 GPU hack
							    }); 
                    }   
			var toLeft=touchs.pageX||touchs.clientX;
			if(toLeft<startX){//右侧往左边滑动  滑动距离大于一定 或者 滑动时间小于250毫秒
			    if(iNow!=aLi.length-1){
					
					if(Math.abs(nowLeft)>parseInt(w/3)||+new Date-startTime<200&&Math.abs(nowLeft)>30){
			        iNow++;
					//document.title='滑动了'+nowLeft+'/'+w/3+(nowLeft>w/3);
					}
					$(inner).stop(true,false).animate({left:-iNow*w+'px'},400);
				}
				}else{ //左边往右侧滑动
				 if(iNow!=0){
					if(Math.abs(nowLeft)>parseInt(w/3)||+new Date-startTime<200&&Math.abs(nowLeft)>30){
			        iNow--;
					}

				   $(inner).stop(true,false).animate({left:-iNow*w+'px'},400);
				}
			}	
			
			//小圆点样式
			var selects=document.getElementById("selects"),
			    spans=selects.getElementsByTagName("span"),
			     i=0;
			for(;i<spans.length;i++){
			  	spans[i].className='';
			}
			spans[iNow].className='on';
			
			
			self.removeEventListener("touchmove",move,false);
			self.removeEventListener("touchend",end,false);	
		   
		  };		
		
	 });// touchstart end
		
		
		
	
	
};
</script>
</body>
</html>

本文地址:http://www.cnblogs.com/surfaces/
posted @ 2015-06-08 11:21  surfaces  阅读(1504)  评论(2编辑  收藏  举报