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 相关文章推荐
用js实现手把手教你月入万刀(转贴)
Nov 07 Javascript
使用js 设置url参数
Jul 08 Javascript
js 操作符汇总
Nov 08 Javascript
详谈js模块化规范
Jul 07 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
layui的table单击行勾选checkbox功能方法
Aug 14 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP新手上路(十三)
2006/10/09 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
JS验证不重复验证码
2017/02/10 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
.NET是怎么支持多种语言的
2015/02/24 面试题
致垒球运动员加油稿
2014/02/16 职场文书
李培根演讲稿
2014/05/22 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
民间借贷被告代理词
2015/05/23 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL