m-yk

1、移动端实现滑动切换轮播图,主要由touch(touchstart,touchmove,touchend)事件实现。在touch事件中可以通过 e.touches[0].clientX获取当前触摸点的位置,在touchend事件中没有e.touches[0].clientX值

var banner=function(){
	/*
	 *1、无缝滚动和无缝滑动
	 *2、点盒子对应改变
	 *3、可以滑动
	 *4、当滑动距离不够时 吸附回去
	 *5、当滑动距离够了时 跳转上/下一张
	*/
	var banner=document.querySelector(\'.jd_bannar\');
	var imgBox=banner.querySelector(\'ul:first-child\');
	var pointBox=banner.querySelector(\'ul:last-child\');
	var points=pointBox.querySelectorAll(\'li\');
	var width=banner.offsetWidth;


	var addTransition=function(){
		imgBox.style.transition = \'all 0.2s\';
		imgBox.style.webkitTransition=\'all 0.2s\';
	}
	var removeTransition=function(){
		imgBox.style.transition = \'none\';
		imgBox.style.webkitTransition=\'none\';
	}

	var setTranslateX=function(tx){
		imgBox.style.transform = \'translateX(\'+tx+\'px)\';
		imgBox.style.webkitTransform = \'translateX(\'+tx+\'px)\';
	}
	var index=1;
	var timer=setInterval(function(){
		index++;
		addTransition();
		setTranslateX((-index*width))
	},1000)
	//监听 transition结束之后的事件
	imgBox.addEventListener(\'transitionend\',function(){
		if(index==9){
			index=1;
			removeTransition();
			setTranslateX((-index*width))
		}else if(index<=0){
			index=8;
			removeTransition();
			setTranslateX((-index*width))
		}
		setPoint()
	})
	var setPoint=function(){
		for(var i=0;i<points.length;i++){
			points[i].classList.remove(\'now\')
		}
		points[index-1].classList.add(\'now\')
	}
	
	var stratX=0;
	var disX=0;
	var ismove=false;
	imgBox.addEventListener(\'touchstart\',function(e){
		clearInterval(timer)
		stratX=e.touches[0].clientX;
	})
	imgBox.addEventListener(\'touchmove\',function(e){
		var moveX=e.touches[0].clientX;
		disX=moveX-stratX;
		/*计算定位*/
		var tx=-index*width+disX;
		//清除定位
		removeTransition();
		setTranslateX(tx);
		ismove=true;
	})
	imgBox.addEventListener(\'touchend\', function(e){
		/*disX确定滑动距离,判断是否吸附或者跳转*/
		if(ismove && Math.abs(disX)<(width/3)){
			addTransition();
			setTranslateX(-index*width)
		}else{
			//判断滑动方向
			if(disX>0){
				index--;
			}else{
				index++
			}
			addTransition();
			setTranslateX(-index*width)
		}
		clearInterval(timer)
		timer=setInterval(function(){
			index++;
			addTransition();
			setTranslateX((-index*width))
		},1000)
		//初始化数据
		stratX=0;
		ismove=false;
		disX=0;
	})


}

  

分类:

技术点:

相关文章: