iScroll 优化
iScroll 它比较好的解决了移动互联网 web app 滚动支持问题以及点击事件缓慢的问题,经过简单配置即可让 web app 像原生 app 一样流畅,甚至都不需要改变原来的编码方式,目前它几乎是移动 web 开发的标配库。
受技术限制,iScroll 模拟滚动条也会带来一些问题,如:遇到异步写入元素后其不能及时适应新的高度/宽度。
为了解决 UI 刷新问题,它有提供 refresh 方法手动刷新 UI,但这样十分繁琐,你忘记执行它可能引发app的可用性问题。它提供 checkDOMChanges 选项用来自动监控 UI 变化,但却是使用定时器判断,每500ms执行一次,响应速度与性能都大打折扣。理想状态下它应“加载即用”,这样等未来不需要 iScroll 作为补丁的时候,我们可以立即删除掉 iScroll。
一、优化滚动条自适应容器
W3C 定义的 DOMSubtreeModified 事件可以监听节点的修改,不幸这个事件已经过时(最新的ios6仍然支持),幸运的是有了更强大的 MutationObserver 方法监听元素修改。
MutationObserver 给开发者们提供了一种能在某个范围内的 DOM 树发生变化时作出适当反应的能力。该 API 设计用来替换掉在 DOM3 事件规范中引入的 Mutation 事件。
自动监测容器内容修改
iScroll 构造函数中优先使用 MutationObserver ,同时也保留定时器的方式:
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; if (that.options.checkDOMChanges) { if (MutationObserver) { that.mutationObserver = new MutationObserver(that.refresh.bind(that));
that.mutationObserver.observe(that.scroller, {
childList: true,
subtree: true
}); } else {
that.checkDOMTime = setInterval(function () {
that._checkDOMChanges();
}, 500);
}
}
注销监听
在 iScroll destroy 方法中注销监听:
if (that.options.checkDOMChanges) {
if (MutationObserver) {
that.mutationObserver.disconnect();
} else {
clearInterval(that.checkDOMTime);
}
}
二、调整超出容器反弹行为
IOS应用程序、网页拖动页面超出容器时会出现反弹效果,但是 iScroll 的速度却比与默认行为更快,在私有 _end 函数倒数第二行
that._resetPos(200) 修改为 that._resetPos(600)
useTransform: true, 改为 useTransform: false,
iScroll 优化的更多相关文章
- 分享整理vue.js在日常工作中用到的组件,帮助你在vue应用中快速开发
Vue-Echarts vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1+ 开发,依赖 Vue.js v2.2.6+,功能一样的只是把它封装成vue插件 这样更方便以v ...
- 【IScroll深入学习】解决IScroll疑难杂症
前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ...
- 记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- 【IScroll深入学习】突破移动端黑暗的利器(上)
前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ...
- 【webapp的优化整理】要做移动前端优化的朋友进来看看吧
单页or多页 本文仅代表个人观点,不足请见谅,欢迎赐教. webapp 小钗从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,weba ...
- 【iScroll源码学习02】分解iScroll三个核心事件点
前言 最近两天看到很多的总结性发言,我想想今年好像我的变化挺大的,是不是该晚上来水一发呢?嗯,决定了,晚上来水一发! 上周六,我们简单模拟了下iScroll的实现,周日我们开始了学习iScroll的源 ...
- 【iScroll源码学习01】准备阶段
前言 我们昨天初步了解了为什么会出现iScroll:[SPA]移动站点APP化研究之上中下页面的iScroll化(上),然后简单的写了一个demo来模拟iScroll,其中了解到了以下知识点: ① v ...
- iScroll.js 用法参考 (share)
分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍清楚了.如果你英文比较好的话,可以看看官网的资料 ...
- iscroll简单使用说明
iScroll是一个高性能,资源占用少,无依赖,跨平台的javascript上拉加载,下拉刷新的滚动插件,目前版本v5.2.0. GitHub下载地址:https://github.com/cubiq ...
随机推荐
- Visual Studio 2012 RC 中RC表示什么意思
来自:http://zhidao.baidu.com/question/507233956.html Release Candidate 缩写为 RC ,经常用于计算机软件方面,表示软件的候选发布版. ...
- Json知识总结
JSON对象是一个无序的"名称/值"对的集合它开始于“{”,结束于“}”.每一个属性名和值间用“:”提示,属性间用“,”分隔.一个数组开始于"[",结束于&qu ...
- css+JS实现遮罩弹框
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...
- 如何制作exe程序可执行文件
很多软件的运行都需要搭建环境,只有exe文件可以在不安装软件和数据库的环境下运行,那么怎么制作exe程序可执行文件呢,下面天使教你如何制作. 工具/原料 Microsoft Visual St ...
- 转!!java中的内部类总结
java内部类 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液 ...
- hiho1093_spfa
题目 SPFA模板题,题目中数据可能有两个点之间有多条边直接相连,使用 unordered_map< int, unordered_map< int, int>>, 来存储图的 ...
- djangoadmin导出csv
from django.contrib import admin from .models import Order,OrderItem from django.http import HttpRes ...
- imeOptions 属性详解
默认情况下软键盘右下角的按钮为“下一个”,点击会到下一个输入框,保持软键盘 设置 android:imeOptions="actionDone" ,软键盘下方变成“完成”,点击后光 ...
- html页面,左边点击链接,右边显示内容参考代码。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Jsp-Servlet 那一大堆事儿--1
为毛全局变量声明时初始化在try内不能用? import javax.servlet.http .*; import java.io.*; import javax.servlet.*; import ...