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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
javascript中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
jquery中实现简单的tabs插件功能的代码
Mar 02 Javascript
js获取php变量的实现代码
Aug 10 Javascript
HTML Color Picker(js拾色器效果)
Aug 27 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 Javascript
react中fetch之cors跨域请求的实现方法
Mar 14 Javascript
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 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 Undefined index的问题
2009/06/01 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Python阶乘求和的代码详解
2020/02/14 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
护理专业毕业生自我鉴定
2013/10/08 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
培训通知书模板
2015/04/17 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
白银帝国观后感
2015/06/17 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android