javascript的惯性运动实现代码实例


Posted in Javascript onSeptember 07, 2019

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

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

效果

javascript的惯性运动实现代码实例

代码如下

<!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;
      width: 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 字符 Escape,encodeURI,encodeURIComponent
Jul 09 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
May 31 Javascript
详解Vue 实例中的生命周期钩子
Mar 21 Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
layUI实现列表查询功能
Jul 27 Javascript
JS原型和原型链原理与用法实例详解
Feb 05 Javascript
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
vue的滚动条插件实现代码
Sep 07 #Javascript
微信小程序页面滚动到指定位置代码实例
Sep 07 #Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 #Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 #Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 #Javascript
解决layer.open后laydate失效的问题
Sep 06 #Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
Sep 06 #Javascript
You might like
网络资源
2006/10/09 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
程序员跳槽必看面试题总结
2013/06/28 面试题
买房委托公证书
2014/04/08 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
公司离职证明样本
2014/09/13 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
Python如何将list中的string转换为int
2022/07/15 Ruby