• javascript 的惯性运动


    移动端的惯性运动,最早来自 ios 的专利。用于手指滑动,离开屏幕之后,屏幕内容继续滚动。更有动态感。

    这里,以 pc 端,鼠标横向(沿x轴) 拖拽的,惯性计算。移动端同理

    具体代码如下:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<meta http-equiv="X-UA-Compatible" content="ie=edge">
    	<title>惯性运动</title>
    	<style type="text/css">
    		#box{
    			background: pink;
    			 100px;
    			height: 100px;
    			position: absolute;
    			top: 100px;
    			left: 100px;
    		}
    	</style>
    </head>
    <body>
    	<div id="box"></div>
    </body>
    <script type="text/javascript">
    	var $box = document.getElementById("box");
    	
    	var isDown = false; //是否按下鼠标
    	var inertance = 1.2; //惯性系数,越大,惯性越不明显,不能小于0
    	var fv =  0; //滑动的力度
    	var timer = null;
    	$box.onmousedown = function(e){
    		clearTimeout(timer);//清除定时器
    		fv = 0;
    		this._start = e.clientX; //鼠标按下的位置
    		isDown = true;//鼠标是否有按下,主要防止用户是从容器外开始滑动的
    	}
    	
    	$box.onmousemove = function(e){
    		if(isDown){
    			var miss = e.clientX - this._start;
    			moveMiss(miss)
    			this._start = e.clientX;
    			fv = miss;
    		}
    	}
    	
    	function moveMiss(miss){
    		$box.style.left = miss + $box.offsetLeft + "px";
    	}
    	
    	window.onmouseup = function(e){
    		if(isDown){
    			isDown = false;
    			var me = this;
    			var friction = ((fv >> 31) * 2 + 1) * inertance;//根据力度套用公式计算出惯性大小,公式要记住
    			var num = Math.abs(friction);
    			timer = setInterval(function(){
    				 fv -= friction;//力度按 惯性的大小递减
    				 moveMiss(fv);
    				 if(Math.abs(fv) < num){  //如果力度减小到小于1了,结束,或者边界弹回
    					 clearInterval(timer);
    					 return ;
    				 }
    			},20);
    		}
    	}
    	
    </script>
    </html>
    

      

  • 相关阅读:
    怎样简单编写一个html网页
    C# 委托实现冒泡排序
    C# 运算符
    EF 多表联查方法
    Log4net 配置文件
    vs调试 iis发布之后的项目
    继承 ,构造方法使用
    C#扩展方法
    partial 部分类
    WeakReference 弱引用
  • 原文地址:https://www.cnblogs.com/muamaker/p/10838308.html
Copyright © 2020-2023  润新知