js如何实现惯性滑动效果 100

我想做一个html5的相册,主要想实现以下效果:根据鼠标左右滑动时的速度来加载图片,速度越快加载越多,反之越少,就像有惯性一样。这效果也有点像手机浏览器的平滑滚动... 我想做一个html5的相册,主要想实现以下效果:根据鼠标左右滑动时的速度来加载图片,速度越快加载越多,反之越少,就像有惯性一样。这效果也有点像手机浏览器的平滑滚动 展开
 我来答
百度网友2571d37bb
推荐于2017-09-09 · 知道合伙人软件行家
百度网友2571d37bb
知道合伙人软件行家
采纳数:1971 获赞数:7905
前端工程师

向TA提问 私信TA
展开全部
主要思路是:鼠标当前点到下一点直接间隔计算出速度。这样就实现了惯性滑动效果。
下面是简单的js代码实现:仅供参考:
<style>    
#div1{ width:100px; height:100px; background:red; position:absolute; left:0px; top:0;}    
</style>    
<script>    
window.onload=function(){    
var oDiv=document.getElementById('div1');    
var iSpeedX=0;    
var iSpeedY=0;     
var lastX=0;    
var lastY=0;    
var timer=null;     
oDiv.onmousedown=function(ev){    //div的鼠标按下事件,主要计算鼠标当前位置,和移动位置。这样可以计算出鼠标移动速度。
var oEvent=ev || event;    
var disX=oEvent.clientX-oDiv.offsetLeft;    
var disY=oEvent.clientY-oDiv.offsetTop;      
clearInterval(timer);      
document.onmousemove=function(ev){   //鼠标拖动事件。 
var oEvent=ev || event;     
oDiv.style.left=oEvent.clientX-disX+'px';    
oDiv.style.top=oEvent.clientY-disY+'px';    
iSpeedX=oEvent.clientX-lastX;    
iSpeedY=oEvent.clientY-lastY;     
lastX=oEvent.clientX;    
lastY=oEvent.clientY;
}    
document.onmouseup=function(){    //当鼠标抬起后,清掉移动事件。
document.onmousemove=null;    
document.onmouseup=null;
oDiv.releaseCapture && oDiv.releaseCapture();      
startMove();    
}    
oDiv.setCapture && oDiv.setCapture();    
return false;
}         
function startMove(){    //移动函数,主要操作是计算鼠标移动速度和移动方向。
clearInterval(timer);    
timer=setInterval(function(){    
iSpeedY+=3;    
var t=oDiv.offsetTop+iSpeedY;    
var l=oDiv.offsetLeft+iSpeedX;    
if(t>document.documentElement.clientHeight-oDiv.offsetHeight){    
t=document.documentElement.clientHeight-oDiv.offsetHeight;    
iSpeedY*=-0.8;    
iSpeedX*=0.8;
}     
if(t<0){    
t=0;    
iSpeedY*=-0.8;    
iSpeedX*=0.8;
}    
if(l>document.documentElement.clientWidth-oDiv.offsetWidth){    
l=document.documentElement.clientWidth-oDiv.offsetWidth;
    
iSpeedX*=-0.8;    
iSpeedY*=0.8;    
}    
if(l<0){    
l=0;    
iSpeedX*=-0.8;    
iSpeedY*=0.8;
    
}    
    
oDiv.style.left=l+'px';    
oDiv.style.top=t+'px';    
    
if(Math.abs(iSpeedX)<1)iSpeedX=0;    
if(Math.abs(iSpeedY)<1)iSpeedY=0;    
if(iSpeedX==0 && iSpeedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight){    
clearInterval(timer);    
}    
document.title=i++;    
},30);
}    
};    
</script>    
</head>    
<body>    
<div id="div1"></div>    
</body>
是勇敢
2014-12-21 · 希望快乐渡过第一天。
是勇敢
采纳数:914 获赞数:1799

向TA提问 私信TA
展开全部
一般用jq来实现,
有专门的类包。

直接调用即可。
追问
可否上传下?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式