参考 http://hi.baidu.com/xiaowuphp/blog/item/8ca07e000e6cbc94d43f7cc2.html
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调用。
分享到:
相关推荐
本文将详细介绍`iscroll.js`的基本用法和一些常见的实例。 ### 1. 安装与引入 首先,你需要下载`iscroll`库,可以从官方网站或者GitHub上获取最新版本。下载后,将其解压并引入到HTML文件中: ```html ...
#### 特性介绍 iScroll 4.2.5版本相比之前的版本有了很大的改进,新增了多项实用特性: 1. **缩放功能**:用户可以通过双击或捏合手势对内容进行缩放。 2. **拉动刷新**:支持通过下拉屏幕顶部来刷新数据,增强了...
描述中提到的“NULL 博文链接:https://it-fan.iteye.com/blog/1987768”虽然没有提供具体的信息,但通常这样的博客文章会详细介绍如何在实际项目中配置和使用iscroll来实现多层滚动嵌套。在该博客中,作者可能会...
同时,iscroll的文档会详细介绍各个配置选项和API,帮助开发者更好地理解和使用这个库。 iscroll适用于需要高度定制滚动效果的移动Web应用,如新闻阅读器、电商应用、社交网络等。通过熟练掌握iscroll,开发者可以...
本文将深入探讨如何利用 `iScroll5` 实现下拉拖拽刷新功能,并介绍相关技术细节。 首先,我们需要了解 `iScroll5` 的基本用法。`iScroll5` 提供了强大的滚动管理,包括水平滚动、垂直滚动、鼠标滚轮支持以及触摸...
本文将详细介绍iScroll 5的核心特性、下拉刷新与上拉加载的实现原理,以及如何自定义扩展这些功能。 首先,iScroll 5相较于早期版本,改进了性能和稳定性,优化了滚动体验。它支持多种滚动元素,如div、ul、li等,...
本文档将详细介绍IScroll5的核心配置项及其功能特性,帮助开发者更好地理解和应用这些设置。 #### 二、核心配置 IScroll5的核心配置主要涉及到渲染引擎的选择和性能优化等方面: - **options.useTransform**:此...
通过以上介绍,我们可以看出iScroll库在实现页面滚动分页、下拉刷新等功能上的强大能力。结合合理的后端接口设计,iScroll可以帮助开发者创建出既美观又高效的网页应用。在实际项目中,开发者可以根据具体需求对...
本文将详细介绍如何基于iscroll实现这样的功能。 iscroll是由Matteo Spinelli开发的一个轻量级、高性能的JavaScript滚动库,它支持触摸事件、滚动动画以及各种滚动效果,包括上拉加载和下拉刷新。iscroll适用于Web ...
3. `README.md`:这是一个Markdown格式的文档,通常用于介绍项目的基本信息、使用方法、安装指南等。 4. `license.txt`:项目许可文件,定义了软件的使用、修改和分发规则。 5. `src`:源代码目录,可能包含了...
**jQuery Mobile a4中文教程**是针对jQuery Mobile的中文版参考手册,包含了该框架的详细API、组件介绍、事件和方法,对于学习和理解jqmobile的用法非常有帮助。通过阅读这个教程,开发者可以更好地理解如何利用jq...
本文将详细介绍如何利用iScroll实现内容滚动效果。 一、iScroll简介 iScroll是由Matteo Spinelli开发的开源项目,其目标是为Web应用提供更接近原生应用的滚动体验。iScroll支持多种浏览器和设备,包括iOS、Android...
本篇文章主要介绍了如何使用iScroll库实现H5页面的下拉刷新和上拉加载更多功能。下拉刷新是指用户下拉屏幕以刷新最新数据,而上拉加载更多是指用户上拉屏幕以加载更多数据。 在实现这个功能时,需要使用iScroll库的...
本文将详细介绍如何利用iScroll 4 实现图片轮播图的效果。 首先,我们需要准备HTML结构。一个基本的轮播图由内容区域(#scroller)和导航指示器(#indicator)组成。内容区域包含一个无序列表(#thelist),每个...
以下将详细介绍如何在HTML5中使用iScroll实现下拉刷新和上拉加载更多。 首先,你需要引入iScroll.js库到你的HTML文件中。iScroll提供了触摸和鼠标滚轮事件的处理,以及平滑的滚动效果。在页面加载完成后,你需要...
本文将详细介绍如何解决IScroll与`<select>`元素冲突的问题,以及这两个步骤背后的原理。 首先,我们需要理解问题的根源。IScroll在处理触摸事件时,会捕获所有的触摸操作,包括在`<select>`元素上的点击。这会导致...
最后,我们来介绍**iscroll插件**。iscroll是一款轻量级的JavaScript插件,主要用于解决移动端浏览器的滚动问题,提供平滑的滚动效果。在京东移动端,iscroll可能被用于商品列表或者页面的滚动区域,它能处理触摸...