`

转:天生我才很有用——iscroll的那些事

 
阅读更多
iscroll是什么?

iscroll.js是Matteo Spinelli开发的一个js文件,使用原生js编写,不依赖与任何js框架。旨在解决移动webkit系浏览器的区域滚动问题,兼容mobile safari、android默认浏览器、safari、chrome、firefox5+、opera11+、IE9+及其他webkit核心浏览器。最新版本为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调用。

链接:http://www.wybai.net/?p=273
分享到:
评论
7 楼 justmiracle 2013-12-26  
。。。。。
所谓,美中不足,略扯
6 楼 魏祖清 2012-11-01  
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();
},

在android平板中 只要有滚动TEXTAREA就获得不到焦点了,只有那些没有滚动的才可以
5 楼 yzwushang007 2012-10-22  
您好,请问,怎么使用iscroll4,与jquery mobile结合,同时能实现左右上下的滑动,能给个demo学习下嘛。。谢谢
4 楼 whudongyang 2012-04-19  
请问iscroll能否实现淘宝iphone应用首页的 横向纵向可同时滚动呢?
3 楼 312102021 2012-03-21  
解决了
2 楼 pkwjava 2012-02-03  
keren 写道
您好,请问,怎么跟 jqm结合啊,还望指点一个或给个demo,谢谢!

之前弄了个,还不是很完善,放在附件中了。
1 楼 keren 2011-12-11  
您好,请问,怎么跟 jqm结合啊,还望指点一个或给个demo,谢谢!

相关推荐

    iscroll5上拉下拉实例完整demo

    iscroll5是Jacob Gohmann开发的一个轻量级的JavaScript库,它允许在触摸设备和非触摸设备上实现滚动、滚动条、点击、滚动事件等功能,特别是在处理复杂滚动场景时非常有用。 iscroll5相较于之前的iscroll4版本,...

    iScroll 实例:下拉刷新,滚动翻页

    iScroll 是一个强大的JavaScript库,主要用于处理网页中的滚动效果,特别是在移动端或响应式设计中,它能提供平滑、高性能的滚动体验。在"iScroll 实例:下拉刷新,滚动翻页"这个主题中,我们将深入探讨如何利用...

    iscroll.js下载 5.1.3最新版本

    **iscroll.js** 是一个高性能、轻量级的JavaScript滚动库,主要用于解决移动Web端的滚动问题,尤其在处理触摸事件和实现平滑滚动效果时表现出色。它为开发者提供了强大的API接口,使得在网页中实现复杂滚动效果变得...

    iscroll4

    **iscroll4** 是一个轻量级的JavaScript库,由Matteo Spinelli开发,用于在Web页面上实现平滑的滚动效果。iscroll主要用于处理触摸设备和鼠标滚轮事件,提供高性能的滚动功能,特别是在移动端,它可以替代浏览器原生...

    iscroll插件

    iScroll通过提供高性能的滚动解决方案,很好地解决了这一问题。它支持上拉刷新(pull-to-refresh)和下拉加载(infinite-scrolling)功能,使得在网页应用中实现这些交互变得更加便捷。 **上拉刷新与下拉加载** 1....

    iScroll4框架

    iScroll.js的用法 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生完全是因为移动版webkit浏览器(诸如iPhone,iPad,Android 这些系统上广泛使用) 提供了一种本地化的方式来对一...

    iscroll5 滑动 滚动

    **iscroll5 滑动滚动技术详解** iscroll 是一款轻量级的JavaScript库,由Matteo Spinelli开发,主要用于实现移动端和桌面端网页的高性能滚动效果。iscroll5是该库的一个版本,专注于解决移动设备上的滚动问题,提供...

    滚动分页,iscroll

    6. **优化性能**:为了提高性能,避免在每次滚动时都进行Ajax请求,可以设置一个加载状态标志,确保只有在满足特定条件(如达到底部)时才加载更多内容。同时,考虑使用懒加载技术,只在内容即将进入视口时加载图片...

    iscroll适应IE8,9支持Mozilla浏览器

    **iscroll适应IE8,9支持Mozilla浏览器** iscroll是一个轻量级的JavaScript库,用于在网页上实现平滑的滚动效果,特别是在移动端。它能够处理触摸事件,并且支持多种浏览器,包括较旧版本的Internet Explorer(如IE8...

    iscroll demo

    **iscroll 演示项目详解** iscroll 是一个轻量级、高性能的JavaScript滚动库,主要用于处理触摸设备上的滚动事件。它能够提供平滑、流畅的滚动效果,尤其在移动浏览器上表现卓越。iscroll 支持多种滚动场景,如滚动...

    iscroll 下拉 上拉 刷新

    **iscroll:流畅的前端滚动解决方案** iscroll是一款轻量级、高性能的JavaScript库,专为处理触摸设备上的滚动事件而设计。它提供了一个简单易用的API,使得开发者能够轻松实现平滑的滚动效果,包括下拉刷新(pull-...

    iscroll4例子

    **iscroll4详解** iscroll4是一款轻量级的JavaScript滚动插件,由Cubiq组织开发,专门用于处理移动设备上的滚动效果。这个插件主要用于解决在触摸设备上实现流畅、高性能滚动的问题,尤其在处理长列表或者无限滚动...

    iscroll所用到的js文件

    iscroll库适用于那些需要精确控制滚动行为的场景,比如在网页应用中实现与原生应用类似的滚动体验。 **iscroll.js** iscroll的基础版本,包含了核心的滚动功能。它提供了基本的滚动事件监听、滚动动画以及滚动范围...

    iscroll开发多层滚动嵌套

    5. **兼容性和问题解决**:iscroll通常能很好地兼容各种浏览器,但在某些特定环境下可能存在问题。例如,与Bootstrap或其他JavaScript库的冲突,或者在某些移动设备上的滚动不顺畅。这些问题通常可以通过调整iscroll...

    html iscroll demo.rar

    3. **初始化iscroll**:在JavaScript中,使用`new IScroll`来创建一个iscroll实例。你需要传入两个参数,第一个是滚动容器的选择器,第二个是一个配置对象,可以设置滚动方向、是否启用鼠标滚轮等选项。 ```...

    iscroll组件

    4. **滚动定位**:iscroll提供API接口,可以方便地获取或设置滚动位置,这对于实现滚动到特定位置或者创建滚动导航非常有用。 5. **滚动动画**:iscroll内置了平滑滚动动画,可以通过配置参数自定义滚动速度和加...

    iscroll5 demo

    **iscroll5 深度解析** iscroll5 是一个高性能、轻量级的JavaScript滚动库,由Matteo Spinelli开发,专为处理移动设备上的滚动问题而设计。iscroll5提供了平滑的滚动效果,支持各种触摸事件,使得在手机、平板电脑...

    jquery iscroll下拉插件

    《jQuery iScroll下拉插件详解》 在Web开发中,滚动效果是用户界面不可或缺的一部分,尤其是在移动设备上。为了实现更加流畅、响应式的滚动体验,开发者常常会使用到jQuery iScroll这个强大的库。本文将深入探讨...

    iScroll.zip

    iScroll 是一个高性能的JavaScript滚动库,主要用于解决前端开发中网页滚动流畅性的问题,尤其是在处理大量数据或元素时。在移动设备和触摸屏环境中,iScroll 提供了平滑的滚动体验,支持横向和纵向滚动,同时兼容...

    iscroll v5.2.0最新demo下载

    **iscroll v5.2.0 最新demo下载** iscroll是一个轻量级的JavaScript库,主要用于解决在移动设备上实现高性能的滚动效果。在iscroll v5.2.0这个版本中,开发者可以享受到更加优化的滚动体验,特别是在处理移动端上拉...

Global site tag (gtag.js) - Google Analytics