iscroll是什么?
iscroll.js是Matteo Spinelli开发的一个js文件,使用原生js编写,不依赖与任何js框架。旨在解决移动webkit系浏览器的区域滚动问题,兼容mobile safari、android默认浏览器、safari、chrome、firefox5+、opera11+、IE9+及其他webkit核心浏览器。最新版本为iscroll4。
官方网站:iscroll4
iscroll的用武之地
1.区域滚动
我们在pc端web开发中,有时会用固定某一区域的宽度和高度,然后使用overflow:auto,使其内容在该区域内滚动。
iphone默认浏览器(mobile safari)也支持固定区域的滚动,但必须双指滑动操作,而且没有滚动条。mobile safari中的单指滑动只针对页面级别,不针对页面元素。这样的操作体验很麻烦,而且很多用户根本不知道双指能够区域滑动。
android自带浏览器也支持区域滚动,且可以单指滑动操作,但是滑动起来卡的半死半活,很不流畅。
使用iscroll,可以完美解决上述问题了,不仅可以在iphone和android上单指滑动,而且滑动起来流畅之极,酣畅淋漓。滑动过程中也有漂亮的滚动条提示,让你舒心不已。
2.固定定位
固定定位不是iscroll的原生用法,而是使用iscroll协助解决固定定位问题。
话说iphone很先进,但就是不支持position:fixed。这下苦了我们了,固定定位怎么解决啊,我们会经常遇到固定标题栏、固定工具栏等情况啊!!
使用iscroll协助解决:首先获取浏览器窗口高度;然后获取固定工具栏的高度;接着将除固定工具栏之外的内容全部放在一个固定区域内,该固定区域的高度=窗口高度-工具栏高度;之后对固定区域使用iscroll。这样,整个html页面的高度正好等于窗口高度,页面级别不会出现滚动,工具栏就一直固定在当前的位置。在固定区域内滑动,可以查看页面其他内容,不会影响工具栏的定位。
鼠标滚轮滚动
iscroll支持在pc端浏览器中使用鼠标滚轮控制区域滚动,但操作起来很不灵敏。这是由于iscroll对鼠标滚轮事件做了拦截,然后缩小了滚轮的滚动距离,详见iscroll4.js源代码608-609行:
wheelDeltaX = e.wheelDeltaX / 12;//控制X轴鼠标滚轮速度
wheelDeltaY = e.wheelDeltaY / 12;//控制Y轴鼠标滚轮速度
iscroll将每次的滚轮距离缩小为系统默认距离的12分之一,难怪滚起来很慢,感觉不灵敏。只需要将12改成1,滚轮的滚动速度就恢复正常了。你也可以根据实际需要设置成其他值。
输入框聚焦不灵敏、无法选择文字
使用了iscroll之后,你会发现点击输入框时不灵敏,经常无法聚焦;页面文字也无法选择和复制。这是由于iscroll要监听鼠标事件和触摸事件来进行滚动,所以禁止了浏览器的默认行为,详见源代码92行:
onBeforeScrollStart: function (e) { e.preventDefault(); },
iscroll不分青红皂白,禁止了浏览器的一切默认行为,导致上述问题。所以我们需要稍作修改:
onBeforeScrollStart: function (e) {
var target = e.target;
while (target.nodeType != 1) target = target.parentNode;
if (target.tagName != ‘SELECT’ && target.tagName != ‘INPUT’ && target.tagName != ‘TEXTAREA’)
e.preventDefault();
},
判断触发事件的元素是不是input、select、textarea等表单输入类元素,如果不是就阻止默认行为。这样保证了输入类元素能正确快速聚焦。
在上述修改中追加一个条件 target.tagName != ‘body’或者直接将onBeforeScrollStart修改为null,即可做到鼠标选取文字,但这样的修改会导致iscroll滚动失效或不灵敏,所以无法选取文字这个问题先放一边吧。如你有更好的方法,欢迎回复。
select元素操作不灵敏或操作后白屏
使用iscroll后,还有一个较麻烦的问题,就是select元素点击不灵敏(滚动之后点击select,经常无响应);有时点击有反应了,下拉菜单显示却错位(pc端);选择一项之后,页面直接变成了空白(iphone、android中)或者页面位置向上偏离,滚动区域位置出现偏离。
说白了,就是导致select没法用。为此我调试了很久,最后发现了问题所在:iscroll默认使用的是css的transform变形中的translate3d实现区域滚动,每次滚动实际是改变translate3d中的y轴值,实际的dom位置并没有发生变化。translate3d会导致页面的焦点错误,系统级下拉菜单的显示则会导致其出现显示偏离。
控制滚动模式的代码在67行:useTransform: true。好在iscroll提供了另一种滚动方式,基于绝对定位位置变化的滚动。修改为useTransform: false之后,iscroll就会使用对定位位方式来实现滚动,该方式是我们在web开发中模拟动画的最常用方式,滚动之后dom的实际位置也同步发生了变化,不会出现错位偏离现象。
在pc端主流浏览器、iphone、android2.2下测试,select问题完美解决。
不过需要注意,使用对position决定定位后,滚动区的宽度默认会自适应内容宽度,而不是父元素的100%,所以最好将滚动区域宽度设为100%。
美中不足
iscroll是小而精的经典作品,名字也带着apple范。但唯一美中不足的是,只能使用id调用。
- 浏览: 67835 次
- 性别:
- 来自: 深圳
最新评论
-
fabulasia:
试过了,没卵用
android程序在LogCat没有日志输出解决方案 -
心惶惶呀:
有用
android程序在LogCat没有日志输出解决方案 -
jialeadmin:
写的不错 很基础
JAVA面试题解惑系列(十)——话说多线程 -
skying007:
哥们,你写的太经典了。受益匪浅!!!!
JAVA面试题解惑系列(十一)——这些运算符你是否还记得? -
skying007:
总结的真不错,辛苦了。
125常见JAVA技术面试题
相关推荐
iScroll是一个流行的JavaScript滚动插件,具备高性能、低资源占用、无外部依赖和多平台兼容性的特点。它能够让用户在各种设备上获得流畅的滚动体验,包括桌面浏览器、移动设备和智能电视平台。iScroll支持平滑滚动、...
在IT行业中,iscroll5是一款广泛使用的轻量级滚动插件,特别适合处理移动设备上的滚动事件。这个项目“iscroll5 不改动官方源码下拉刷新”提供了一种方法,使得开发者能够在不修改iscroll5核心源码的前提下实现下拉...
**iscroll:流畅的前端滚动解决方案** iscroll是一款轻量级、高性能的JavaScript库,专为处理触摸设备上的滚动事件而设计。它提供了一个简单易用的API,使得开发者能够轻松实现平滑的滚动效果,包括下拉刷新(pull-...
iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件。 它可以在桌面,移动设备和智能电视平台上工作。它一直在大力优化性能和文件大小以便在新旧设备上提供最顺畅的体验。 iScroll不仅仅是 滚动...
**iscroll5.2.0** 是一个轻量级、高性能的JavaScript滚动库,由Matteo Spinelli开发,主要用于解决移动端浏览器的滚动问题。它提供了平滑的滚动体验,并支持许多高级特性,如下拉刷新(Pull-to-Refresh)和上拉加载...
**iscroll5上拉刷新与下拉加载实例详解** iscroll是一个轻量级的JavaScript库,主要用于处理网页上的滚动事件,特别是在触摸设备上。iscroll5是其最新版本,相较于iscroll4,它引入了许多改进和优化,以适应更广泛...
下面我们将深入探讨如何使用`iscroll-4`在`H5`页面中实现这一功能。 `iscroll-4`是由Matteo Spinelli开发的一个轻量级JavaScript库,专门用于处理触摸设备上的滚动事件。它提供了平滑的滚动效果,支持多种手势,...
在移动Web开发中,iscroll是一个非常流行的JavaScript库,它提供了平滑的滚动效果,尤其在处理触摸设备上的滚动事件时。在这个场景中,我们看到iscroll被用来实现上拉和下拉加载更多的数据,这在浏览列表或者无限...
**iscroll.js** 是一个轻量级的JavaScript库,专门用于处理移动Web应用程序中的滚动交互。在WebAPP开发中,由于浏览器对触摸事件的支持不一致,以及为了实现平滑滚动和复杂的滚动效果,iscroll应运而生。它提供了一...
`iScroll 5` 是一个著名的JavaScript库,专门用于处理触摸滚动,并提供了上拉加载更多和下拉刷新的功能。结合HTML5和CSS3,我们可以创建出流畅、响应式的滚动效果。以下是对这些技术的详细讲解: ### iScroll 5 `...
《iScroll4 pull to refresh 学习》 在Web开发中,为了提供更好的用户体验,"Pull to Refresh"功能已经成为移动应用和网页的标准特性之一。它允许用户通过在页面顶部下拉来刷新内容,通常用于加载最新的数据。在这...
iscroll-probe是一款轻量级的JavaScript滚动库,它提供了高度优化的滚动体验,尤其适合在移动设备上使用。iscroll-probe版本增加了实时探测滚动事件的功能,这使得它非常适合用于实现下拉刷新和上拉加载这样的交互...
iscroll手机列表下拉刷新加载特效代码是针对移动端应用中常见的一种交互设计,它使得用户在浏览长列表时可以通过简单的手势实现数据的刷新和加载。iscroll.js 是一个轻量级且功能强大的JavaScript库,主要用于处理...
IScroll5是一款强大的JavaScript滚动插件,它允许开发者在网页上实现流畅的滚动效果,尤其在处理触摸设备上的滚动时表现优秀。IScroll5提供了下拉刷新和上拉加载的功能,使得用户在浏览数据列表时可以方便地获取新...
在使用iscroll.js库实现上拉下拉刷新功能时,开发者常常遇到一个问题,即在iOS设备的浏览器上,用户在上拉或下拉刷新后,页面无法自然回弹到原始位置。这个问题使得用户体验受到影响,一些开发者甚至因此选择放弃...
这个“iscroll和flipsnap结合实现的支持移动端的翻页切换demo”就是一个很好的例子,展示了如何在移动设备上实现这种功能。iscroll和flipsnap是两个JavaScript库,专门用来处理触摸事件和滚动效果,从而提供更流畅的...
iScroll 5是一款广泛使用的JavaScript库,主要用于在Web页面上实现高性能、平滑的滚动效果。这个库尤其适用于处理触摸事件,以及在移动设备上优化滚动体验。"iscroll5-pull-to-refresh"特指iScroll 5的一个关键特性...
"iscroll"是一个轻量级的JavaScript库,特别适合处理触摸设备上的滚动事件,包括实现拉动刷新效果。 iscroll库由Matteo Spinelli开发,它提供了平滑的滚动体验,支持多方向滚动、滚动条、滚动事件监听以及我们关注...
iSlider.js是一款基于iScroll的JavaScript滚动插件,专为实现各类滑动选项卡和交互式滚动效果而设计。在Web开发中,特别是在移动设备上,为了提供良好的用户体验,滑动效果是不可或缺的一部分,iSlider为此提供了...