angularjs惯性滚动指令
来源:互联网 发布:淘宝上电棍叫什么 编辑:程序博客网 时间:2024/05/16 15:50
指令:
.directive('inertiaScroll', function () { return { restrict: 'A', scope: {}, link: function ($scope, $element, $attrs) { var elem = $element[0]; var startY, endY, startTime, endTime; var speedDecay = 0.02;//速度衰减量 var lastMoveTime, secondLastMoveTime;//最后次手指停止移动的时间和倒数第二次手指停止移动的时间(测试的时发现有时候最后一次移动时间不准确,故而选用倒数第二次停止移动的时间) var stopMoveInterval;//手指停止滑动的时间 var stopInertiaMove = false;//停止惯性滚动的标识位 elem.addEventListener('touchstart', function (e) { stopInertiaMove = true;//当惯性滑动过程中再次触碰到屏幕的时候应该立即停止惯性滑动 startY = e.touches[0].pageY; startTime = Date.now(); }); elem.addEventListener('touchmove', function (e) { //这个事件主要用来记录最后一次停止滑动的时间,当停止滑动时间超过一定量就不执行惯性滑动 secondLastMoveTime = lastMoveTime; lastMoveTime = Date.now(); }); elem.addEventListener('touchend', function (e) { endY = e.changedTouches[0].pageY; endTime = Date.now(); if (secondLastMoveTime) { stopMoveInterval = endTime - secondLastMoveTime; } else { stopMoveInterval = endTime - lastMoveTime; } //计算速度,距离除以时间 var speed = (endY - startY) / (endTime - startTime); var speedAbs = Math.abs(speed); /** * 惯性移动的递归方法 */ function inertiaMove() { if (speedAbs < 0 || stopInertiaMove) { //如果速度绝对值小于0了,则结束惯性滚动 return; } //设置每次惯性滑动时间为20毫秒 var distance = speedAbs * 20; if (speed < 0) { //如果速度是负数,则是手指向上滑动。继续惯性滚动,则scrollTop的值会增加 elem.scrollTop += distance; //console.log('向上惯性滚动' + distance); } else { //如果速度是正数,则是手指向下滑动。继续惯性滚动,则scrollTop的值会减少 elem.scrollTop -= distance; //console.log('向下惯性滚动' + distance); } //速度衰减 speedAbs -= speedDecay; setTimeout(inertiaMove, 10); } if (stopMoveInterval < 100) { //手指停止滑动超过0.1秒的就不执行惯性滑动了 stopInertiaMove = false; inertiaMove(); } }); } }; })
使用:
在滚动的div上使用这个指令
0 0
- angularjs惯性滚动指令
- Android ScrollView取消惯性滚动
- 原生js元素惯性滚动
- AngularJS 指令
- AngularJS--指令
- angularjs--指令
- angularjs指令
- AngularJS 指令
- 指令<AngularJs>
- AngularJS 指令
- AngularJS 指令
- 指令<AngularJs>
- AngularJS 指令
- AngularJS 指令
- AngularJs指令
- AngularJS -- 指令
- AngularJS 指令
- AngularJS 指令
- CodeForces 591C
- Oracle 11g中的IO Calibrate(IO校准)
- android 自定义toast
- HttpServletResponse
- .NET 无法向会话状态服务器发出会话状态请求
- angularjs惯性滚动指令
- 表驱动法
- Android--分析内存溢出原因
- 音乐播放器-MenuFragment
- Cocos2D-x3.x:cocostudio用户数据使用
- 3D物体在UGUI下的坐标映射
- JavaScript代码性能优化总结 20151101
- 【C++】引用变量(1)
- 新手html/css/javascript入门学习及总结(一月学习记录)