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 相关文章推荐
图片之间的切换
Jun 26 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
Sep 06 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
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
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
在视频前插入广告
2006/11/20 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
python实现淘宝秒杀脚本
2020/06/23 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python 爬取疫情数据的源码
2020/02/09 Python
python实现图像外边界跟踪操作
2020/07/13 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
中专毕业生自荐信范文
2013/11/28 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
给学校的建议书范文
2014/05/15 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
家属联谊会致辞
2015/07/31 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL
MYSQL如何查看操作日志详解
2022/05/30 MySQL