原生js实现拖动图片左右弹性切换(模仿iPhone弹性拖拽的功能)

因为弹性运动我在弹性菜单实例中已经列过详细的步骤了,所以此处不再赘述,有不懂的或有兴趣的请点击原生js实现弹性菜单

这个例子里面我们主要解决的问题有

1、弹性运动的实现(不再详细讲解)

2、怎样判断鼠标是向左拖动还是向右拖动

  • 当抬起鼠标的位置大于按下鼠标的位置时,则判断为向左拖拽,当抬起鼠标的位置小与按下鼠标的位置时,则判断为向右拖拽。

解决了上面两个问题,然后我们直接上代码

HTML代码

<div id="iphone" >
	<div id="wrap">
		<ul id="ul1">
			<li style="background:url(images/pic1.png);" title="妙味课堂"></li>
			<li style="background:url(images/pic2.png);" title="妙味课堂"></li>
			<li style="background:url(images/pic3.png);" title="妙味课堂"></li>
			<li style="background:url(images/pic4.png);" title="妙味课堂"></li>
		</ul>
	</div>
</div>
CSS代码
* { padding: 0; margin: 0; }
li { list-style: none; }
body { background: #333; }
#iphone { width: 900px; height: 600px; background: url(images/bg.png); position: absolute; top: 50%; left: 50%; margin: -300px 0 0 -450px; }
#wrap { width: 238px; height: 360px; position: absolute; top: 121px; left: 326px; overflow:hidden; }
#iphone ul { width: 960px; height: 361px; cursor: pointer; position: absolute; top: 0px; left: 0px; }
#iphone li { float: left; width:240px; height:360px; overflow:hidden; }

JS代码

<script>
window.onload = function(){
	var oUl = document.getElementById('ul1');
	var aLi = oUl.getElementsByTagName('li');	
	var disX = 0;
	var downX = 0;
	var iNow = 0;
	var timer = null;
	var iSpeed = 0;	
	oUl.onmousedown = function(ev){
		var ev = ev || window.event;
		disX = ev.clientX - oUl.offsetLeft;//记录鼠标按下的位置到ul左侧是位置
		downX = ev.clientX;//记录鼠标按下时的位置	
		clearInterval(timer);	
		document.onmousemove = function(ev){
			var ev = ev || window.event;
			oUl.style.left = ev.clientX - disX + 'px';//鼠标移动时,ul随着鼠标的移动而偏移
		};
		document.onmouseup = function(ev){
			document.onmousemove = null;
			document.onmouseup = null;//鼠标抬起时,取消鼠标移动和抬起时的事件
			var ev = ev || window.event;		
			if( ev.clientX < downX ){
				//alert('←');
				if( iNow != aLi.length-1 ){
					iNow++;
				}
				
				startMove( - iNow * aLi[0].offsetWidth  );//鼠标抬起时,让ul进行移动
			}
			else{
				//alert('→');
				
				if( iNow != 0 ){
					iNow--;
				}				
				startMove( - iNow * aLi[0].offsetWidth  );				
			}
			
		};
		return false;//取消默认行为
	};
	
	function startMove(iTarget){//下面为弹性运动的封装
		clearInterval(timer);//清空定时器
		timer = setInterval(function(){	//开启定时器	
			iSpeed += (iTarget - oUl.offsetLeft)/6;
			iSpeed *= 0.75;		
			if( Math.abs(iSpeed)<=1 && Math.abs(iTarget - oUl.offsetLeft)<=1 ){
				clearInterval(timer);
				iSpeed = 0;
				oUl.style.left = iTarget + 'px';
			}
			else{
				oUl.style.left = oUl.offsetLeft + iSpeed + 'px';
			}
			
		},30);
	}
	
};
</script>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的原生JS实现淘宝图片切换的示例代码: HTML代码: ``` <div class="slider"> <ul> <li><img src="img/1.jpg"></li> <li><img src="img/2.jpg"></li> <li><img src="img/3.jpg"></li> </ul> <div class="prev"></div> <div class="next"></div> </div> ``` CSS代码: ``` .slider { position: relative; } .slider ul { list-style: none; margin: 0; padding: 0; position: relative; } .slider li { float: left; } .slider img { display: block; width: 100%; height: auto; } .slider .prev, .slider .next { position: absolute; top: 50%; margin-top: -15px; width: 30px; height: 30px; background-color: #000; opacity: 0.5; cursor: pointer; } .slider .prev { left: 0; } .slider .next { right: 0; } .slider .prev:hover, .slider .next:hover { opacity: 1; } ``` JS代码: ``` var slider = document.querySelector('.slider'); var sliderUl = slider.querySelector('ul'); var sliderLi = slider.querySelectorAll('li'); var sliderPrev = slider.querySelector('.prev'); var sliderNext = slider.querySelector('.next'); var currentIndex = 0; var imageCount = sliderLi.length; var sliderWidth = slider.clientWidth; sliderUl.style.width = (sliderWidth * imageCount) + 'px'; function slideTo(index) { if (index < 0) { index = imageCount - 1; } else if (index >= imageCount) { index = 0; } sliderUl.style.transform = 'translateX(-' + (sliderWidth * index) + 'px)'; currentIndex = index; } sliderPrev.addEventListener('click', function() { slideTo(currentIndex - 1); }); sliderNext.addEventListener('click', function() { slideTo(currentIndex + 1); }); slideTo(0); ``` 这段代码实现了一个简单的图片轮播效果,当点击“上一张”或“下一张”按钮时,会切换到相应的图片。可以根据自己的需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值