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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
JS文字球状放大效果代码分享
Aug 19 Javascript
一分钟理解js闭包
May 04 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
bootstrap multiselect 多选功能实现方法
Jun 05 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
Dec 06 Javascript
详细分析Node.js 模块系统
Jun 28 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程序
2012/02/04 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
js获取单选按钮的数据
2006/11/27 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
python实现与redis交互操作详解
2020/04/21 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
优秀女职工事迹材料
2014/02/06 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
影视广告专业求职信
2014/09/02 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
MySQL创建管理LIST分区
2022/04/13 MySQL