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 相关文章推荐
基于jquery的文字向上跑动类似跑马灯的效果
Sep 22 Javascript
12行javascript代码绘制一个八卦图
Apr 02 Javascript
jqTransform美化表单
Oct 10 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
Jan 08 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
mpvue全局引入sass文件的方法步骤
Mar 06 Javascript
前端面试知识点目录一览
Apr 15 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
vue-cli3配置与跨域处理方法
Aug 17 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
python中迭代器(iterator)用法实例分析
2015/04/29 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Python 寻找局部最高点的实现
2019/12/05 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
学生的自我鉴定范文
2013/10/24 职场文书
毕业生自荐信
2013/12/14 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
物业消防安全责任书
2014/07/23 职场文书
六查六看剖析材料
2014/10/06 职场文书
团员年度个人总结
2015/02/26 职场文书
应届生简历自我评价
2015/03/11 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
python学习之panda数据分析核心支持库
2021/05/07 Python
Python正则表达式中flags参数的实例详解
2022/04/01 Python
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers