iscroll总结

iScroll基本信息

官网:http://cubiq.org/iscroll-4

更新:2012.07.14

版本:v4.2.5

兼容:iPhone/Ipod touch >=3.1.1, iPad >=3.2, Android >=1.6, Desktop Webkit, Firefox, Opera desktop/mobile.

下载iScroll4.2.5

iScroll的历史

之所以iscroll会诞生,主要是因为无论是在iphone、ipod、android 或是更早前的移动webkit都没有提供一种原生的方式来支持在一个固定高度的容器内滚动内容。

这个不幸的规则导致所有web-app要模拟成app的样子时,只能由一个绝对定位的header 或是footer再加上一个可以内容的滚动的中间区域组成。

幸运的是移动webkit提供了一种强大的硬件加速的CSS属性,这个属性可以用来模拟这个缺失的功能,Iscroll从这里开始了前进之路,但是没有不带刺的玫瑰。让内容滚动像原生方式一般比想象中要难

Tigs:截至2013年,IOS5 添加如下样式 overflow:scroll; -webkit-overflow-scrolling:touch; 已经能够支持区域滚动了。但是andriod4 还是不行...

iScroll 4 新特性

iScroll 4 这个版本完全重写了iScroll 3这个框架的原始代码,除了以前版本的iScroll特性以外,iScroll 4 还包括如下的特性:

  1. 缩放
  2. 拉动刷新
  3. 速度和性能提升
  4. 精确捕捉元素
  5. 自定义滚动条

快速上手

使用指南

在此文档中你会发现很多例子来教会你如何快速上手iScroll脚本库。参看文中的demo小例子并仔细阅读此文档,可能有点小无聊,但是这篇文章中却是iScroll这个脚本库的精髓之所在哦。

iScroll需要对所要进行滚动的元素进行初始化,并且不限定一个页面中使用iScroll的元素的个数(这里不考虑您的硬件配置)。滚动元素中内容的类型和长度在一定程度上将会影响iScroll脚本库里可以同时使用的元素的个数。

使用iScroll这个脚本库时,DOM树的结构要足够简单,移除不必要的标签,尽量避免过多的标签嵌套使用。

最优的使用iScroll的结构如下所示:

	<div id="wrapper">
		<ul>
			<li></li>
			  .....
			</ul>
	</div>

在这个小例子中,ul标签将会被滚动。iScroll一定要与滚动内容外面的wrapper进行联系才会产生效果。

注意事项

只有wrapper里的第一个子元素才可以滚动,如果你想要更多的元素可以滚动,那么你可以试试下面的这种写法:

	<div id="wrapper">
		<div id="scroller">
			<ul>
				<li></li>
				...
			</ul>
			<ul>
				<li></li>
				...
			</ul>
		</div>
	</div>

在这个例子中,scroller这个元素可以滚动,即便它包含两个ul元素

实例化iScroll

iScroll必须在调用之前实例化,你可以在下面几种情况下对iScroll进行实例化:

  1. onDOMContentLoaded
  2. onLoad
  3. 以内联inline方式

ONDOMContentLoaded

适用于滚动内容只包含文字、图片,并且所有的图片都有固定的尺寸

使用方法:(在head标签中添加如下代码)

	<script src="iscroll.js"></script>
	<script>
			var myscroll;
			function loaded(){
				myscroll=new iScroll("wrapper");
			}
			window.addEventListener("DOMContentLoaded",loaded,false);
	</script>

注意: myscroll这个变量是全局的,因此你可以在任何地方调用它的函数

onLoad

有些时候在DOMContentLoaded的状态下就初始化iScroll其实是有点草率的,因此此时页面的资源可能还没有全部加载完毕。如果你遇到了一些很怪异的行为可以试试下面的写法:

	<script src="iscroll.js"></script>
	<script>
		var myscroll;
		function loaded(){
			setTimeout(function(){
				myscroll=new iScroll("wrapper");
			},100 );
		}
		window.addEventListener("load",loaded,false);
	</script>

这种情况下iScroll会在页面资源(包括图片)加载完毕100ms之后得到初始化,这应该是一种比较安全的调用iScroll的方式。

inline初始化

这种情况会在页面加载到js的时候就进行调用,此方法不推荐使用,但是很多javascript的大牛都在用这种方式,我又 有什么理由不赞成呢?

	<script src="iscroll.js"></script>
	<div id="wrapper">
		<ul>
			<li></li>
			.....
		</ul>
	</div>
	<script>
		var myscroll=new iScroll("wrapper");
	</script>

不过建议你使用一些框架的ready方法来安全调用iScroll(比如jquery里的ready())。

iScroll 参数

iScroll里的第一个参数很简单就是外容器的id,或者css语法格式的class,如‘.home .scroll‘。

第二个参数允许你自定义一些属性配置和方法,比如下面的这段代码:

	<script>
		var myscroll=new iScroll("wrapper",{hScrollbar:false, vScrollbar:false});
	</script>

第二个参数通常都是一个对象,像上面的这个例子里就设定了不显示滚动条。所有参数如下(*号为常见参数):

基本参数
参数名 说明 可选值 默认值
hScroll * 是否允许水平滚动 false 否 true 是 true
vScroll * 是否允许垂直滚动 false 否 true 是 true
bounce * 是否超过实际位置反弹 false 否 true 是 true
bounceLock 当内容少于滚动是否可以反弹 false 否 true 是 false
momentum * 是否开启拖动惯性 false 否 true 是 true
lockDirection 当水平或垂直拖动时是否锁定另一边的拖动 false 否 true 是 true
useTransform 是否使用CSS变形 false 否 true 是 true
useTransition 是否使用CSS变换 false 否 true 是 false
checkDOMChanges 是否自动检测内容变化 false 否 true 是 false
topOffset 已经滚动的基准值(一般用在拖动刷新) 数字值 0
x 滚动水平初始位置(负值) 数字值 0
y 滚动垂直初始位置(负值) 数字值 0
Scrollbar 的相关参数
参数名 说明 可选值 默认值
hScrollbar * 是否显示水平滚动条 false否 true 是 true
vScrollbar * 是否显示垂直滚动条 false否 true 是 true
fixedScrollbar 在iOS系统上,当元素拖动超出了scroller的边界时,滚动条会收缩,设置为true可以禁止滚动条超出scroller的可见区域。 false否 true 是 默认在Android上为true, iOS上为false
hideScrollbar 是否隐藏滚动条 false否 true 是 默认在Android上为false, iOS上为true
fadeScrollbar 滚动条是否渐隐渐显 false否 true 是 默认在Android上为false, iOS上为true
scrollbarClass * 字定义滚动条的样式名 自定义class ‘‘
Zoom 放大相关的参数
参数名 说明 可选值 默认值
zoom 是否放大 false 否 true 是 false
zoomMin 放大的最小倍数 数字值 1
zoomMax 放大的最大倍数 数字值 4
doubleTapZoom 双击放大倍数 数字值 2
wheelAction 鼠标滚动行为(还可以是zoom) none 不支持 ‘scroll‘ 鼠标滚动 ‘zoom‘ 鼠标缩放 ‘scroll‘
snap 捕捉元素相关的参数
参数名 说明 可选值 默认值
snap 是否开启捕捉元素,snap值可以为true 或是 DOM元素的tagname,当为true 时,捕捉的元素会根据可滚动的位置和滚动区域计算得到可滑动几页。如果为tagname,则滑动会对齐到捕捉的元素上。 false 否 true 是< DOM元素的tagname false
snapThreshold 滑动的长度限制,只有大于这个距离才会触发捕捉元素事件 数字值 1
自定义 Events 的相关参数
参数名 说明 可选值 默认值
onBeforeScrollStart 开始滚动前的事件回调
默认是阻止浏览器默认行为
null 不设置 
Function 自定义函数
function (e) { e.preventDefault(); }
onRefresh refresh 的回调 null
onScrollStart 开始滚动的回调
onBeforeScrollMove 在内容移动前的回调
onScrollMove 内容移动的回调
onBeforeScrollEnd 在滚动结束前的回调
onScrollEnd 在滚动完成后的回调
onTouchEnd 手离开屏幕后的回调
onDestroy 销毁实例的回调
onZoomStart 放大开始时的回调
onZoom 放大的回调
onZoomEnd 放大结束后的回调

iScroll 方法API

destroy

销毁你实例化的iScroll 实例,包括之前绑定的所有iscroll 事件。

refresh

这个方法非常有用,当你的滚动区域的内容发生改变 或是 滚动区域不正确,都用通过调用refresh 来使得iscroll 重新计算滚动的区域,包括滚动条,来使得iscroll 适合当前的dom。

scrollTo

这个方法接受4个参数 x, y, time, relative x 为移动的x轴坐标,y为移动的y轴坐标, time为移动时间,relative表示是否相对当前位置。

scrollToElement

这个方法实际上是对scrollTo的进一步封装,接受两个参数(el,time),el为需要滚动到的元素引用,time为滚动时间。

scrollToPage

此方法接受三个参数(pageX,pageY,time) 当滚动内容的高宽大于滚动范围时,iscroll 会自动分页,然后就能使用scrollToPage方法滚动到页面。当然,当hscroll 为false 的时候,不能左右滚动。pageX这个参数就失去效果

disable

调用这个方法会立即停止动画滚动,并且把滚动位置还原成0,取消绑定touchmove, touchend、touchcancel事件。

enable

调用这个方法,使得iscroll恢复默认正常状态

stop

立即停止动画

zoom

改变内容的大小倍数,此方法接受4个参数,x,y,scale,time 分别表示的意思为,放大的基准坐标,以及放大倍数,动画时间

isReady

当iscroll 没有处于正在滚动,没有移动过,没有改变大小时,此值为true

拉动刷新

说明

自从Twitter和一些Apple的本地化应用出现了这个效果之后,这个效果就变得非常流行,你可以点击这里(需要FQ)看看视频先一睹为快,也可以点击这里试试拉动刷新是如何工作的。

实现原理

  1. 通过 topOffset 参数属性设置iScroll已经滚动的基准值;
  2. 通过 onScrollMove 参数方法判断当前滚动是到顶端还是底端;
  3. 通过 onScrollEnd 参数方法触发加载新数据,再通过 refresh 方法重新渲染界面;
  4. 通过 onRefresh 参数方法调整刷新后的界面结构;
	<script>
		var myScroll =new iScroll("wrapper",{
			topOffset: 50,
			onRefresh: function(){...},
			onScrollMove: function(){...},
			onScrollEnd: function()...{}
		});
	</script>

具体的实现代码可以查看这里的源文件;

缩放

我们不得不面对一个事实,那就是光有滚动其实没什么新意的。这就是为什么在iScroll 4这个版本里我们允许你可以放 大和缩小。想要这个功能,只需要设置放大的参数zoom 为true即可实现利用手势来放大和缩小。你可以看看这儿。

双击放大和缩小的功能在iScroll 4里也是得到支持的。要使用缩放功能,你至少需要如下配置:

	<script>
		var myScroll =new iScroll("wrapper",{zoom:true});
	</script>

如果你想对缩放功能进行深度的自定义的话可以使用下面的一些选项:

参数名 说明
zoomMax 指定允许放大的最大倍数,默认为4

【注意事项】: 如果想要图片缩放的效果很好的话要把他们放到硬件的合成层中。通俗点说,就是在所有需要缩放的img元素上使用-webkit-transform:translate3d(0,0,0)来实现,而且尤为重要的是,硬件的加速会占用大量资源,要谨慎使用,否则你的应用可能就此崩溃。

捕捉元素

捕捉的功能会促使scroller去重新定义位置,这样可以制作更加花哨的传送带效果。点击这里有个小例子。

默认情况下,iScroll将scroller分成四分体,或者是相同大小的wrapper。iScroll 4加入了这个属性允许捕捉scroller里的任何元素,不考虑外部wrapper的大小。如果你想要实现这样的传送带效果,我建议你使用“quadrant”分割。最佳的设置如下:

	<script>
		var myscroll=new iScroll("wrapper",{
			snap:true,
			momentum:false,
			hScrollbar:false,
			vScrollbar: false
		});
	</script>

捕获元素,可以通过传递一个字符串来作为查询条件,如下:

	<script>
		var myscroll=new iScroll("wrapper",{
			snap:"li",
			momentum:false,
			hScrollbar:false,
			vScrollbar: false
		});
	</script>

在这个例子中scroller可以捕捉到滚动区域中最左上角的li元素

自定义滚动条

在iScroll 4这个版本中,可以利用一系列的css来自定义滚动条的呈现。可以给滚动条添加一个class参数,如下:

	<script>
		var myscroll=new iScroll("wrapper",{
			scrollbarClass: "myScrollbar"
		});
	</script>

你可以点击这里看一个小例子,在这个小例子里,myScrollbarH这个类被添加到了水平滚动条上,myScrollbarV这个类则被添加给了垂直方向上的滚动条上了。需要提醒的是,滚动条是由两个元素组合而成的:容器和显示器。容器同wrapper的高度相同,而显示器则代表的是滚动条本身。

滚动条的HTML结构如下:

	<div class="myScrollbarV">
		<div></div>
	</div>

	.myscrollbarV{
		position:absolute;z-index:100;width:8px;bottom:7px;top:2px;right:1px;
	}

	.myScrollbarV > div {
		position:absolute;
		z-index:100;
		width:100%;
		/* The following is probably what you want to customize */
		background:-webkit-gradient(linear, 0 0, 100% 0, from(#f00), to(#900));
		border:1px solid #800;
		-webkit-background-clip:padding-box;
		-webkit-box-sizing:border-box;
		-webkit-border-radius:4px;
		-webkit-box-shadow:inset 1px 1px 0 rgba(255,255,255,0.5);
	}
时间: 2024-10-05 20:40:38

iscroll总结的相关文章

运用iscroll.js遇到的问题

1.无法滑动的问题 需要检查iscroll.js文件加载上没有,如果加载上检查一下它和jquery文件加载的先后顺序.wrapper的position必须得写,bottom也必须得写. 2.滑不上去的问题 wrapper的height设置成了100%.所以出现这个问题,把这个属性去掉了好了 3.页面滑动不流畅(这样是暂时行可以,还没找到更好的解决办法)  #scroller {        transform: translate3d(0,0,0);        -webkit-transf

iscroll.js实现上拉刷新,下拉加载更多,应用技巧项目实战

上拉刷新,下拉加载更多...仿原生的效果----iscroll是一款做滚动效果的插件,具体介绍我就不废话,看官方文档,我只写下我项目开发的一些用到的用法: (如果不好使,调试你的css,想必是个很蛋疼的问题,给点提示 :#wrapper,以及#scroller-content要注意) html如下: <div class="viewport"> <div id="wrapper" class="wrapper"> <

IScroll介绍--案例

一.下面简单介绍一下iScroll: iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件. 它可以在桌面,移动设备和智能电视平台上工作.它一直在大力优化性能和文件大小以便在新旧设备上提供最顺畅的体验. iScroll不仅仅是 滚动.它可以处理任何需要与用户进行移动交互的元素.在你的项目中包含仅仅4kb大小的iScroll,你的项目便拥有了滚动,缩放,平移,无限滚动,视差滚动,旋转功能.给它一个扫帚它甚至能帮你打扫办公室. 即使平台本身提供的滚动已经很不错,iSc

iscroll的进阶问题

关于iscroll的进阶问题 刚开始使用Iscroll的时候会遇到好多问题,其实大部分都是缺少配置参数.这些配置参数可以解决好多问题. 但是有一种的是关于页面加载的. 比如说 刚打开页面的时候 你的页面可以正常进行滑动 当你的页面再次刷新 或者跳转的时候 并不能滑动. 所以 你需要 让他页面加载完毕的时候  在此执行那段js代码. var myScroll; function loaded() { setTimeout(function () { myScroll = new IScroll('

iScroll.js 向上滑动异步加载数据回弹问题

iScroll是一款用于移动设备web开发的一款插件.像缩放.下拉刷新.滑动切换等移动应用上常见的一些效果都可以轻松实现. 现在最新版本是5.X,官网这里:http://iscrolljs.com/ 下面是按照官网给的Demo,写的一个异步加载数据实例: 1 <title>iScroll demo: click</title> 2 <script src="~/Scripts/iscroll5/jquery-1.10.2.js"></scrip

基于iscroll实现下拉和上拉刷新

http://www.zhangyunling.com/359.html 重要提示 本插件已经经过更新,查看更新的插件代码,以及介绍请查看:基于iscroll实现下拉和上拉刷新(优化); 在原生APP的开发中,有一个常见的功能,就是下拉刷新的功能,这个想必大家都是知道的,但是原生APP的开发,有一个很大的问题就是,你每次更新一些功能,就要用户重新下载一次版本,尤其是在IOS系统中,新版本还需要经过审核才能通过,这就使得版本的更新受到很大的限制,而如果我们改用网页来展示,那么只要改变服务器中网页的

IScroll的诞生和缺点

转自http://lhdst-163-com.iteye.com/blog/1239784 iscroll.js是Matteo Spinelli开发的一个js文件,使用原生js编写,不依赖与任何js框架.旨在解决移动webkit系浏览器的区域滚动问题,兼容mobile safari.Android默认浏览器.safari.chrome.firefox5+.opera11+.IE9+及其他webkit核心浏览器.最新版本为iscroll4. 官方网站:iscroll4 iscroll的用武之地 1

项目小结一:在项目中使用 IScroll 所碰到的那些坑

最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://github.com/ansiboy/ChiTuStore 一. 使用 abstract 定位 顶栏和底栏最好不要使用 fixed 定位,应该使用 abstract 定位.我最初使用的是 fixed 定位,页面从右往左呈现的时候,经常会出现两个问题:1.顶栏时不时地会消失掉,2.新页面在移动的过程中,顶栏

iScroll学习笔记2--浅读源码

iscroll的架子是这样的 (function (window, document, Math){ var utils = (function (){ var me = {}; // 扩展一些常用的工具方法为me的方法 return me; }()); function IScroll(el, options){ // 初始化一些属性和状态 } IScroll.prototype = { constructor: IScroll, // 主体方法都在这里 } }(window, documen

iScroll学习笔记

背景: 都说iScroll是移动端开发必学的库之一,先来看看为啥要用iScroll.网上找了找资料,总结下原因如下: 1.position:fixed 在移动端浏览器上的兼容性不好 简单列举如下: IOS的Safari : IOS5及以后的版本支持该属性, IOS4及以下会把它当成默认的 position: static, 跟着页面一起滚动 Android : Android 2.1及以下不支持 Android 2.2会在滚动完成之后把定位的元素拉回到原来的位置 Android 2.3 只有在禁