首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原生 JS 实现惯性滚动,给鼠标滚轮增加阻尼感,纵享丝滑

前言当我们在移动终端上滑动页面,手指离开屏幕后,页面的滚动并不会马上停止,而是在一段时间内继续保持惯性滚动,并且滑动阻尼感和持续时间与滑动手势的幅度成正比。...,同时讲解其中技术原理与细节,用最少量的代码实现 JS 鼠标惯性滚动。...实现原理首先需要利用 DOM 事件禁止鼠标滚动,转为 JS 控制。...通过 JS 模拟页面滚动实际可以看做是在执行一个连续的动画,这时候肯定就离不开与浏览器动画息息相关的 requestAnimationFrame 函数了,我们需要知道它的回调函数会传入一个 DOMHighResTimeStamp...(value);}此时页面就可以像往常一样滚动了,并且是不依赖系统默认事件的,由 JS 代理滚动效果,接下来我们继续往方法里处理如何平滑过渡。

1.8K41

Java selenuim用执行js模拟鼠标滚动的方式

题目: Java selenuim用执行js模拟鼠标滚动的方式完成页面滚动的异步加载及Java接收浏览器js的返回值 在使用selenuim webdriver爬取网页时,经常会有很多网页并不是访问链接就会加载全部内容的...,而是需要鼠标向下滚动,动态的加载内容,比如知乎首页。...这样在爬取的过程中并不能直接抓数据,需要先模拟鼠标滚动,让页面先加载出来才行。 ---- 我使用的方法是利用如下js代码来完成页面的滚动,每次滚动多少可以根据不同情况自行调整。...想到加载过程中 document.body.scrollHeight 这个值是会根据每次新加载数据动态变化的,那么也就是说 当执行一次js代码后,这个值没有发生改变,就代表本次没有加载新的数据了。...接下来的问题就是如何使Java代码能够接收到浏览器执行的js代码返回值的问题了。很简单,在js代码上加上return 即可。注意有一个空格。

4.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    吸顶效果解决方案

    stickyEl.classList.remove('fixed-top'); } }; 把吸顶元素用相同高度的占位符包起来,临界位置stickyEl被fixed出去,空间由stickyHolder撑起来,下面元素挤不上来,页面不抖了...-> 滚动 -> 手指抬起 -> 惯性滚动 -> 停止滚动 整个过程,直到停止滚动时才会触发1次scroll事件,也就是说,IOS8以下的scroll变成了scrollend。...,iscroll等等 有前辈做了详细测试,见参考资料1 定时器在手指没有离开屏幕时不会执行,touchmove触发频率足够,也能拿到scrollTop,但touchend后,惯性滚动期间,没有任何事件可用...,拿不到这段的scrollTop,很难预测这段惯性滚动距离(减速运动),甚至不确定各IOS版本这段距离的计算方式是否相同 iscroll这种假滚动,自然可以实时获取滚动位置,iscroll有一个专用版本来做这个事情...IOS 8+的Safari和WKWebView能够疯狂触发scroll,无论手指在不在屏幕上,无论是不是惯性滚动期间。

    3.6K10

    移动端滚动研究

    发现触发的时机区分android和ios两种情况,具体可以看下面表格: | 机型(内核) | body滚动 | 局部滚动 | | :-: | :-: | :-: | | ios | 不能实时触发 |...方案比较 第一种方案由于惯性滚动的时机时由js自己控制所以可以拿到滚动触发阶段的scrolltop值,并且滚动的回调函数onscroll在滚动的阶段都会触发。...第二种方案相比第一种要劣势一些,区别在于手指离开时,采用的时css的animation来实现惯性滚动,所以无法直接触发惯性滚动过程中的onscroll事件,只有在animation结束时才可以借助animationend...在使用模拟滚动时,浏览器在js层面会消耗更多的性能去改变dom元素的位置,在dom复杂层级深的页面更为高,所以在长列表滚动时还要使用正常滚动更好。...需要注意的是,隐藏和显示视窗外的元素这个操作在下拉刷新时只会执行一次,并且只有在下拉刷新时才会执行。

    3.2K20

    iScroll学习小结

    IMWeb 黎清龙 原文出处:IMWeb社区 未经同意,禁止转载 前言 最近项目需要实现一个fixed标题栏的功能,很普通的功能,实现核心也是在sroll事件中切换到fixed状态即可,但是在某些版本ios...的某些内核中,在惯性滚动过程中不执行任何js代码,亦即不会触发scroll事件,基本任何事情都做不了,为了解决这个问题不得不使用div内滚动,然后使用iscroll库实现滚动逻辑。...absDistY < 10) ) { return; } newY = this.y + deltaY; //[3] //判断滑动是否超出范围了 //自从ios...scrollStart事件 //一个健全的组件肯定有相关的插口,一般都是用事件机制实现的 //这里的细节是,开始事件是要在判定为标准滑动才会触发的,并且只触发一次 //如果考虑不细的话...特殊css prefix缓存 用js处理特殊css的时候,可以先缓存prefix,这样就不用每次都操作所有的内置属性 var _elementStyle = document.createElement

    92130

    iScroll学习小结

    前言 最近项目需要实现一个fixed标题栏的功能,很普通的功能,实现核心也是在sroll事件中切换到fixed状态即可,但是在某些版本ios的某些内核中,在惯性滚动过程中不执行任何js代码,亦即不会触发...scroll事件,基本任何事情都做不了,为了解决这个问题不得不使用div内滚动,然后使用iscroll库实现滚动逻辑。...absDistY < 10) ) { return; } newY = this.y + deltaY; //[3] //判断滑动是否超出范围了 //自从ios...scrollStart事件 //一个健全的组件肯定有相关的插口,一般都是用事件机制实现的 //这里的细节是,开始事件是要在判定为标准滑动才会触发的,并且只触发一次 //如果考虑不细的话...特殊css prefix缓存 用js处理特殊css的时候,可以先缓存prefix,这样就不用每次都操作所有的内置属性 var _elementStyle = document.createElement

    980100

    微信小程序开发注意指南和优化实践

    WXSS 1 Css伪类看不到 在微信开发者工具中, Styles不会显示Css伪类,喜欢写::before或:first-child的小伙伴们请注意了,你的伪类在控制台是看不到的,所以本妹子不建议在小程序里用...滚动区域没有开启惯性滚动 当加了overflow: scroll时,IOS 下需要额外设置:-webkit-overflow-scrolling: touch,来开启惯性滚动。...JS 1 JavaScript 支持情况 如果需要支持到 IOS8 话,建议下面 js 方法都不使用。 ?...5 http需变https HTTP是明文传输有篡改内容的风险,而且有些安卓机会不兼容。所以我们需要使用https。 ...在微信开发者工具中,可勾选”不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书”规则即可用http,但是在实体里并没有这个选项,所以建议开发时就用https路径。 ?

    1.3K40

    移动端吸顶fixbar解决方案

    问题 position:fixed给移动端带来的问题: IOS8在页面滚动时,吸顶不连续;页面滑动时,不见吸顶,页面滚动停止后,吸顶缓慢出现 滚动到顶部之后,会出现两个一样的吸顶, 过一会才恢复正常。...iPhone 4s&5 / iOS 6&7 / Safari 下,页面底部footer输入框失去焦点时,header定位出错。当页面有滚动动作时,header定位恢复正常。...安卓 滚动距离超过某位置时,js动态设置样式;为了防止惯性滚动引起的fix不及时的情况,在 touchstart、 touchmove 、 touchend 事件都进行监听。...target.css('position', 'relative'); me.replaceEle.hide(); } }; // 安卓情况下,防止惯性滚动引起的...setting.fixedClazz fixed时给fixedNode添加的类 * @param {function} setting.runInScrollFn 滚动期间额外执行的函数

    3K30

    挥别web移动端开发差异和经典坑

    整体表现就是滑动不流畅,没有滑动惯性。 解决: iOS 5.0 以及之后的版本,滑动有定义有两个值 auto 和 touch,默认值为 auto。...touch: 使用具有回弹效果的滚动, 当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果。继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文。...问题 描述: iOS系统中JS转换字符串变日期对象的时候,字符串格式必须是/相隔,通常情况是-相隔,在微信小程序IOS环境中同样出现出现此问题 iOS系统对js中的new Date()方法有格式要求 let...true; }) $('#ipt').on('compositionend',function(){ typing = false; }) //oninput在oncompositionend之前执行...解决方法: 刷新需要跳转到的URL,可使用PHP的Header跳转,默认header是不刷新的。

    2.9K20

    混合开发hybrid原理_unity引擎开源吗

    response) =>{ } 有可能有的公司为了安全性,会对参数进行加密或者编码 3.native调用回调函数 native执行完之后,应该怎么告诉h5我执行完了呢?...;//控制ios中的惯性滚动 2.滚动穿透 背景页面有滚动的时候,此时有个弹窗出现了,你的手指在弹窗上滑动,你的背景也会跟着滑动。...2.1 弹窗内无滚动,背景页面有滚动 直接在弹窗容器元素上加一个监听事件就可以了 …js document.addEventListener('touchmove',function(e){ //阻止默认事件...,背景恢复滚动 vue里面只适用于v-if,v-show不行 …js const inserted = () =>{ //弹窗出现的行为 const scrollTop = document.body.scrollTop...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.3K20

    UITableView性能优化-中级篇

    (是否惯性效果) ScrollView一次拖拽的代理方法执行流程: ?...下的任务会暂停 停止滚动的时候 - 进入`defaultMode` - 继续执行`trackingMode`下的任务 - 例如这里的loadImage */...- trackingMode 滚动的时候,进入trackingMode,导致defaultMode下的任务会被暂停,停止滚动的时候 ==> 进入defaultMode - 继续执行defaultMode...下的任务 - 例如这里的defaultMode 大tips:这里,如果使用RunLoop,滚动的时候虽然不执行defaultMode,但是滚动一结束,之前cell中的p_loadImgeWithIndexPath...-)iOS本来就是提前进入寒冬,iOS小白们可以尝试思考下这个问题 问:UITableView的圆角性能优化如何实现 答: 让服务器直接传圆角图片; 贝塞尔切割控件layer; YYWebImage为例

    1.6K20

    滚动穿透的6种解决方案【已自测】

    不过为了流畅体验,可以加上-webkit-overflow-scrolling: touch,以解决在IOS上滚动惯性失效的问题,提高滚动的流畅度。...加一个属性 -webkit-overflow-scrolling: touch;/* 解决在IOS上滚动惯性失效的问题 */ 但是这只是简单地解决了一个问题:实现了滑动弹窗其他地方(蒙层背景),底部body...就能阻止滚动穿透。 关键代码: js控制弹窗的交互、弹窗的禁止滚动 ?...局限问题: 这个方法我在真机上测试时发现一个问题,是IOS的: 大家应该都知道IOS的页面顶部继续下拉或者底部继续上拉,都会出现页面后边的背景,这个在手机上很常见。...但是到了这个解决方法里边,如果用户在弹窗黑屏上继续下拉漏出了底部背景,那弹层的滚动效果就都没了。 我。。。 只有在这个时候,会很讨厌IOS。

    13.8K31

    Flutter 渲染性能问题分析

    ,Web (Chromium) 的惯性滚动动画性能理论上要远远优于 Flutter。...这里的帧率数据给的是一个范围是因为我们使用了几种不同的滚动速度进行测试,一般来说滚动速度越快,平均帧率就越低 \2. iPhone 基本不存在所谓的低端机,iOS 整体表现都还可以,不同实现的差异不大,...Web (Chromium) 在惯性滚动上的优势主要体现在以上两方面: Chromium 有完整独立的合成器驱动惯性滚动动画的运行,有独立的合成线程,惯性滚动动画的更新和主线程更新 DOM 树是不同步的...,主线程运行 JS,Build & Layout 不会阻塞合成线程; Chromium 的分块异步光栅化机制一方面减少了惯性滚动动画过程中图层的重复光栅化,另一方面光栅化不会阻塞合成线程的合成输出; 对比...如果它们集中频繁地发生,即使单次耗时不高,也很容易造成 Flutter UI 线程的阻塞,简单说就是这些非 UI 任务的频繁执行可能会导致惯性滚动过程中 UI 任务的延迟,最终导致掉帧,但是 Dart

    2.7K20

    收藏 | 移动端H5开发常用技巧总结

    整体表现就是滑动不流畅,没有滑动惯性。iOS 5.0 以及之后的版本,滑动有定义有两个值 auto 和 touch,默认值为 auto。...内部元素超出 body 即产生滚动,超出的部分 body 隐藏。...如果该元素已经在浏览器窗口的可见区域内,则不会发生滚动。 true,则元素将在其所在滚动区的可视区域中居中对齐。 false,则元素将与其所在滚动区的可视区域最近的边缘对齐。...keyup 事件 IOS12 输入框难以点击获取焦点,弹不出软键盘 定位找到问题是 fastclick.js 对 IOS12 的兼容性,可在 fastclick.js 源码或者 main.js 做以下修改...下 fixed 失效的原因 软键盘唤起后,页面的 fixed 元素将失效,变成了 absolute,所以当页面超过一屏且滚动时,失效的 fixed 元素就会跟随滚动了。

    4.2K20

    WebView性能、体验分析与优化

    R829T Android 4.2.2 内容值: 编译时间(ms)/执行时间(ms) 系统 Zepto.js Vue.js React.js + ReactDOM.js iOS 5.2 / 8 12.8...Vue.js React.js + ReactDom.js iOS 0.9 / 1.9 5 / 7.4 3.5 / 23 Android 5 / 9 17 / 12 25 / 60 执行时间指的是框架代码加载的页面的初始化时间...页面滑动期间不渲染/执行 在很多需求中会有一些吸顶的元素,例如导航条,购买按钮等;当页面滚动超出元素高度后,元素吸附在屏幕顶部。...这个功能在PC和native中都能够实现,然而在WebView中却成了难题: 在页面滚动期间,Scroll Event不触发 不仅如此,WebView在滚动期间还有各种限定: setTimeout和setInterval...GIF动画不播放。 很多回调会延迟到页面停止滚动之后。 background-position: fixed不支持。 这些限制让WebView在滚动期间很难有较好的体验。

    5.1K141

    Hippy 常用调试方法和常见问题案例

    iOS,要注意不能使用到太新的 JS 特性。...这里的固定高度可以是直接指定高度,也可以是通过 flex 进行界面动态分割的高度,但是一定要是固定的,因为滚动实际是终端去实现的,它需要能够区分可以滚动和不可以滚动的区域,如果容器高度和内容高度一样,那就变成不可以滚动了...,例如 updateNode 执行过于频繁,或者 deleteNode/createNode 异常执行,这通常发生在数据有变化导致界面重绘,可以通过调用栈看一下是哪里的数据更新导致界面重绘,并针对性地进行前端优化...如果一致依然出错的话,很大几率是之前 JS 执行失败,也不排除 SDK 更新后存在 bug,也有可能其它问题,导致 __GLOBAL__.appRegister 未注册成功,但我们有个办法可以在该错误抛出时二次确认一下终端所寻找到...如果非要在低版本的 iOS 上进行调试,修改一下 webpack 配置文件 iOS 将 preset-env 中的 ios 版本改成更低即可,但目前经过测试 core-js 对 iOS 8 那样对低版本可能存在问题

    4.6K100
    领券