1. 滚动
以下是三种实现方式:
1) 利用原生的css属性 overflow: scroll
- <div id="parent" style="overflow:scroll;>
- <div id='content'>内容区域</div>
- </div>
Notice:
在android 有bug, 滚动完后会回退到最顶端的内容区域,解决办法是使用后两种方式实现
2)js 编程实现
思路:对比手指在屏幕上移动前后位置变化改变内容元素content的位置
第一步:设置parent的 overflow为hidden, 设置content的position为relative, top为0;
第二步:监听touch事件
- var parent = document.getElementById('parent');
- parent.addEventListener('touchstart', function(e) {
- // do touchstart
- });
- parent.addEventListener('touchmove', function(e) {
- // do touchmove
- });
- parent.addEventListener('touchend', function(e) {
- // do touchend
- });
第三步:实现滚动代码
- /**
- * 这里只实现垂直滚动
- */
- var parent = document.getElementById('parent');
- var content = document.getElementById('content')
- var startY = 0; // 初始位置
- var lastY = 0; // 上一次位置
- parent.addEventListener('touchstart', function(e) {
- lastY = startY = e.touches[0].pageY;
- });
- parent.addEventListener('touchmove', function(e) {
- var nowY = e.touches[0].pageY;
- var moveY = nowY - lastY;
- var contentTop = content.style.top.replace('px', '');
- // 设置top值移动content
- content.style.top = (parseInt(contentTop) + moveY) + 'px';
- lastY = nowY;
- });
- parent.addEventListener('touchend', function(e) {
- // do touchend
- var nowY = e.touches[0].pageY;
- var moveY = nowY - lastY;
- var contentTop = content.style.top.replace('px', '');
- // 设置top值移动content
- content.style.top = (parseInt(contentTop) + moveY) + 'px';
- lastY = nowY;
- });
第四步:优化
上边代码在手机上运行效果相对PC上要卡很多
优化部分请参见:
3) 使用iScroll4框架
- var scroll = new iScroll('parent', {
- hScrollbar: false,
- vScrollbar: true,
- checkDOMChanges : true
- });
2.惯性缓动
思路:取手指最后一段时间在屏幕上划动的平均速度v,让v按一个递减函数变化,直到不能移动或v<=0
- /**
- * 这里只实现垂直滚动
- */
- var parent = document.getElementById('parent');
- var content = document.getElementById('content')
- var startY = 0; // 初始位置
- var lastY = 0; // 上一次位置
- /**
- * 用于缓动的变量
- */
- var lastMoveTime = 0;
- var lastMoveStart = 0;
- var stopInertiaMove = false; // 是否停止缓动
- parent.addEventListener('touchstart', function(e) {
- lastY = startY = e.touches[0].pageY;
- /**
- * 缓动代码
- */
- lastMoveStart = lastY;
- lastMoveTime = e.timeStamp || Date.now();
- stopInertiaMove = true;
- });
- parent.addEventListener('touchmove', function(e) {
- var nowY = e.touches[0].pageY;
- var moveY = nowY - lastY;
- var contentTop = content.style.top.replace('px', '');
- // 设置top值移动content
- content.style.top = (parseInt(contentTop) + moveY) + 'px';
- lastY = nowY;
- /**
- * 缓动代码
- */
- var nowTime = e.timeStamp || Date.now();
- stopInertiaMove = true;
- if(nowTime - lastMoveTime > 300) {
- lastMoveTime = nowTime;
- lastMoveStart = nowY;
- }
- });
- parent.addEventListener('touchend', function(e) {
- // do touchend
- var nowY = e.touches[0].pageY;
- var moveY = nowY - lastY;
- var contentTop = content.style.top.replace('px', '');
- var contentY = (parseInt(contentTop) + moveY);
- // 设置top值移动content
- content.style.top = contentY + 'px';
- lastY = nowY;
- /**
- * 缓动代码
- */
- var nowTime = e.timeStamp || Date.now();
- var v = (nowY - lastMoveStart) / (nowTime - lastMoveTime); //最后一段时间手指划动速度
- stopInertiaMove = false;
- (function(v, startTime, contentY) {
- var dir = v > 0 ? -1 : 1; //加速度方向
- var deceleration = dir*0.0006;
- var duration = v / deceleration; // 速度消减至0所需时间
- var dist = v * duration / 2; //最终移动多少
- function inertiaMove() {
- if(stopInertiaMove) return;
- var nowTime = e.timeStamp || Date.now();
- var t = nowTime-startTime;
- var nowV = v + t*deceleration;
- // 速度方向变化表示速度达到0了
- if(dir*nowV < 0) {
- return;
- }
- var moveY = (v + nowV)/2 * t;
- content.style.top = (contentY + moveY) + "px";
- setTimeout(inertiaMove, 10);
- }
- inertiaMove();
- })(v, nowTime, contentY);
- });
转自:http://blog.csdn.net/zzm_justin/article/details/8476373
相关推荐
在JS+HTML5手机开发中,滚动和惯性缓动是提升用户体验的关键技术。滚动通常是网页或应用中浏览内容的基本方式,而惯性缓动则模拟真实世界中的物理行为,使得用户滑动屏幕时,内容能够继续滚动一段时间,增强流畅感。...
吴俊伟所编著的《惯性技术基础》一书,由哈尔滨工程大学出版社出版,深入浅出地介绍了惯性器件的工作原理、设计方法以及应用领域,对于理解惯性导航系统的核心组件——陀螺仪和加速度计具有重要意义。 ### 惯性技术...
在这个以创新为主题——“创新——打破惯性思维”的PPT中,重点讲述了如何通过打破常规思维方式来激发创新潜力。 首先,PPT引用了胡戈的《一个馒头引发的血案》和晏琳的土家西施烧饼,这两个例子都是创新思维在日常...
4. 系统开发:讨论设计和实现一个转子动平衡系统的具体过程,包括硬件选型、软件开发、数据处理和用户界面设计等。这可能涉及到信号处理、控制理论和嵌入式系统等多个技术领域。 5. 实验验证:通过实验案例展示系统...
惯性导航技术是一种基于物理原理的自主导航方式,它不依赖外部信号,而是通过测量载体在三维空间中的加速度和角速度,经过积分运算得到位置、速度和姿态信息。这项技术广泛应用于航空、航天、航海、车辆定位以及移动...
在本文中,我们将深入探讨基于MATLAB实现的“惯性权重和学习因子动态调整的改进粒子群算法”(Improved Particle Swarm Optimization, IPSO)。粒子群优化(PSO)是一种受到鸟类群体行为启发的全局优化算法,它通过...
用cocos2d-x实现的触屏拖动程序,包括手指滑动后松开的惯性运动,可以直接,cocos2d-x开发,C++写的
在Android开发中,惯性滑动和回弹效果是用户界面设计中常见且重要的功能,尤其是在ScrollView这样的滚动视图组件中。惯性滑动是指当用户快速滑动屏幕后,内容会继续保持一段时间的滑动状态,模拟真实世界的物理惯性...
惯性导航系统是一种基于传感器融合技术的导航方法,尤其在车联网和自动驾驶领域有着重要的应用。在没有GPS信号的环境中,如隧道内部,车辆需要依靠惯性导航系统来维持定位精度和实时性。惯性导航系统主要依赖于多种...
页面视觉差滚动效果是一种在网页设计中常用的创新技术,它通过使用HTML5和CSS3来增强用户的浏览体验。这种效果通常被称作“Parallax Scrolling”,它利用不同层元素以不同的速度滚动,从而创造出深度感和立体感,...
这个特性在用户滚动到页面边缘时,会模拟物理世界的惯性,让页面内容继续滚动一段距离,然后自然地“反弹”回来,增加了交互的生动性和真实感。本教程将详细介绍如何在Android中实现这一功能,主要涉及的知识点包括...
滚动状态包括SCROLL_STATE_IDLE(静止)、SCROLL_STATE_TOUCH_SCROLL(触摸滚动)和SCROLL_STATE_FLING(惯性滚动)。 - 当滚动状态为SCROLL_STATE_IDLE时,表示用户已经停止滑动,此时可以开始加载图片。 4. **...
移动设备上的交互设计越来越注重用户体验,其中“任意元素在屏幕内惯性弹动”是一种常见的效果,它模拟了物理世界中的运动规律,使用户界面更具动态感和真实感。这种效果通常出现在滚动列表、滑块以及其他可拖动的UI...
惯性导航原理是一种基于物理学的导航技术,它利用物体运动的惯性来确定其位置、速度和方向。这种技术在航空、航天、航海以及陆地车辆定位等领域有着广泛的应用。以下是对这一主题的深入探讨: 一、惯性导航系统基础...
在Flash开发中,AS3(ActionScript 3)是一种广泛使用的编程语言,尤其适用于创建交互式网页内容和动画。惯性拖拽是一个常见的物理效果,它使得用户在触摸或鼠标操作对象时,即使手指离开屏幕,对象仍会继续保持一段...
设计师通常会结合界面设计,考虑滚动速度、回弹动画的缓动函数等因素,以创造出既美观又符合用户直觉的滚动交互。 综上所述,了解并掌握ScrollView的边界拖动回弹和惯性回弹是Android开发中的重要技能。通过自定义...