除了以前版本的iScroll的特性以外,iScroll 4还包括如下的特性:

(1)缩放(Pinch/Zoom)

(2)拉动刷新(Pull up/down to refresh)

(3)速度和性能提升

(4)精确捕捉元素

(5)自定义滚动条

友情提示:iScroll 4并不是iScroll 3的简易替代版本,API文档已经不一样了。同时考虑到此版本正处于测试期,一些API可能会有细微的变化。

使用指南

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

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

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

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

  1. <div id="wrapper">
  2.  
  3. <ul>
  4.  
  5. <li></li>
  6.  
  7. .....
  8.  
  9. </ul>
  10.  
  11. </div>

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

【注意事项】:

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

  1. <div id="wrapper">
  2.  
  3. <div id="scroller">
  4.  
  5. <ul>
  6.  
  7. <li></li>
  8.  
  9. ...
  10.  
  11. </ul>
  12.  
  13. <ul>
  14.  
  15. <li></li>
  16.  
  17. ...
  18.  
  19. </ul>
  20.  
  21. </div>
  22.  
  23. </div>

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

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

(1)onDOMContentLoaded

(2)onLoad

(3)以内联inline方式

下面我们逐个来讲讲这三种用法的优缺点

ONDOMContentLoaded

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

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

  1. <script src="iscroll.js"></script>
  2.  
  3. <script>
  4.  
  5. var myscroll;
  6.  
  7. function loaded(){
  8.  
  9. myscroll=new iScroll("wrapper");
  10.  
  11. }
  12.  
  13. window.addEventListener("DOMContentLoaded",loaded,false);
  14.  
  15. </script>

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

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

  1. <script src="iscroll.js"><script>
  2.  
  3. <script>
  4.  
  5. var myscroll;
  6.  
  7. function loaded(){
  8.  
  9. setTimeout(function(){
  10.  
  11. myscroll=new iScroll("wrapper");
  12.  
  13. },100 );
  14.  
  15. }
  16.  
  17. window.addEventListener("load",loaded,false);
  18.  
  19. </script>

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

inline初始化

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

  1. <script src="iscroll.js"></script>
  2.  
  3. <div id="wrapper">
  4.  
  5. <ul>
  6.  
  7. <li></li>
  8.  
  9. ...
  10.  
  11. </ul>
  12.  
  13. </div>
  14.  
  15. <script>
  16.  
  17. var myscroll=new iScroll("wrapper");
  18.  
  19. </script>

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

iScroll里的第二个参数允许你自定义一些内容,比如下面的这段代码:

  1. <script>
  2.  
  3. var myscroll=new iScroll("wrapper",{hScrollbar:false, vScrollbar:false});
  4.  
  5. </script>

第二个参数通常都是一个对象,像上面的这个例子里就设定了不显示滚动条。常用的参数如下:

  1. hScroll false 禁止横向滚动 true横向滚动 默认为true
  2.  
  3. vScroll false 精致垂直滚动 true垂直滚动 默认为true
  4.  
  5. hScrollbar false隐藏水平方向上的滚动条
  6.  
  7. vScrollbar false 隐藏垂直方向上的滚动条
  8.  
  9. fixedScrollbar iOS系统上,当元素拖动超出了scroller的边界时,滚动条会收缩,设置为true可以禁止滚动条超出
  10.  
  11. scroller的可见区域。默认在Android上为true iOS上为false
  12.  
  13. fadeScrollbar false 指定在无渐隐效果时隐藏滚动条
  14.  
  15. hideScrollbar 在没有用户交互时隐藏滚动条 默认为true
  16.  
  17. bounce 启用或禁用边界的反弹,默认为true
  18.  
  19. momentum 启用或禁用惯性,默认为true,此参数在你想要保存资源的时候非常有用
  20.  
  21. lockDirection false取消拖动方向的锁定, true拖动只能在一个方向上(up/down 或者left/right

为了保持资源的完整性,建议去除滚动条拉动刷新(pull to refresh)

自从Twitter和一些Apple的本地化应用出现了这个效果之后,这个效果就变得非常流行。你可以看看这儿先一睹为快。

我最近把"pull to refresh"这个部分单分出来作为iScroll的一个额外插件。你可以点击这儿看看pull to refresh是如何工作滴。你只需要做的就是自定义pullDownAction()这个方法。你可能需要一个ajax来加载新的内容,不过一旦DOM树发生了变化要记得调用refresh这个方法来。需要记住的是在例子中我们加了1秒的延迟来模拟网络的延迟效果。当然,如果你不想使用这个延迟,那就把setTimeout方法去掉就行了。

缩放(pinch / zoom)

我们不得不面对一个事实,那就是光有滚动其实没什么新意的。这就是为什么在iScroll 4这个版本里我们允许你可以放

大和缩小。想要这个功能,只需要设置放大的参数zoom 为true即可实现利用手势来放大和缩小。你可以看看这儿。

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

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

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

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

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

捕捉元素(snap and snap to element)

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

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

  1. var myscroll=new iScroll("wrapper",{
  2.  
  3. snap:true,
  4.  
  5. momentum:false,
  6.  
  7. hScrollbar:false,
  8.  
  9. vScrollbar: false
  10.  
  11. });

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

  1. var myscroll=new iScroll("wrapper",{
  2.  
  3. snap:"li",
  4.  
  5. momentum:false,
  6.  
  7. hScrollbar:false,
  8.  
  9. vScrollbar:false
  10.  
  11. });

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

自定义滚动条(custom scrollbars)

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

  1. var myscroll=new iScroll("wrapper",{
  2.  
  3. scrollbarClass: "myScrollbar"
  4.  
  5. });

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

滚动条的HTML结构如下:

  1. <div class="myScrollbarV">
  2.  
  3. <div></div>
  4.  
  5. </div>
  6.  
  7. .myscrollbarV{
  8.  
  9. position:absolute;z-index:100;width:8px;bottom:7px;top:2px;right:1px;
  10.  
  11. }
  12.  
  13. .myScrollbarV > div {
  14. position:absolute;
  15. z-index:100;
  16. width:100%;
  17. /* The following is probably what you want to customize */
  18. background:-webkit-gradient(linear, 0 0, 100% 0, from(#f00), to(#900));
  19. border:1px solid #800;
  20. -webkit-background-clip:padding-box;
  21. -webkit-box-sizing:border-box;
  22. -webkit-border-radius:4px;
  23. -webkit-box-shadow:inset 1px 1px 0 rgba(255,255,255,0.5);
  24. }

通用方法:

  1. 1refresh DOM树发生变化时,应该调用此方法
  2.  
  3. 2scrollTo() 滚动到某个位置
  4.  
  5. eg: myscroll.scrollTo(0,10,200,true);
  6.  
  7. 3scrollToElement() 滚动到某个元素
  8.  
  9. eg: myscroll.scrolToElement("li:nth-child(10)",100);
  10.  
  11. 4detroy() 完全消除myscroll及其占用的内存空间
  12.  
  13. eg: myscroll.destroy()
 

手机端iscoll插件的使用方法的更多相关文章

  1. Css实现手机端页面强制横屏的方法示例

    样式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 @media screen ...

  2. 手机端图片插件可缩放 旋转 全屏查看photoswipe

    官方介绍PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone.iPad.黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品 ...

  3. 手机端 video 视频自动播放方法

    //创建一个video标签 var __video = $("#video").appendTo('.i-i-video'); //设置视频文件地址 __video.attr('s ...

  4. DT6.0二次最后一次开发插件-手机端熊掌号定时提交

    今天写完这个,就是DT6.0最后开放的插件,因为群里的朋友需要,就写了一个适合DT6的手机端定时插件.不过个人还是喜欢7.0的版本,7.0的插件在上几期分享了,今天就不过多说了! 我这个是初成品,改善 ...

  5. css的盒模型手机端兼容写法应该是啥样的呢?

    前言:刚刚接触css3的盒模型,感觉对于解决水平垂直居中.固定宽度/高度和可变宽度/高度同时存在这样的问题很有效.但是最近在看一个腾讯手机端框架(Frozen UI )的时候发现一个很神奇的多行文字截 ...

  6. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  7. Android系统手机端抓包方法

    抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root, ...

  8. ThinkPHP3.2判断手机端访问并设置默认访问模块的方法

    ThinkPHP3.2判断是否为手机端访问并跳转到另一个模块的方法 目录结构 公共模块Common,Home模块,Mobile模块 配置Application/Common/Conf/config.p ...

  9. megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题

    最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...

随机推荐

  1. mingw编译opencv2.4.13问题记录

    为了在程序中用regex,升级了我的mingw,结果官网上的GCC版本都到6.3了,之前一直用4.8.换了编译器以后,对opencv2.4.10的引用就出了问题:undefined reference ...

  2. JavaWeb笔记(十二)日志

    日志 日志信息根据用途与记录内容的不同,分为调试日志.运行日志.异常日志等. Java常用记录日志 logger log4j log4j2 logback 其中除了logger使用的概率较小,因此主要 ...

  3. winform 控件大小随着窗体自适应

    3个方法: #region 控件缩放变量        double formWidth;//窗体原始宽度        double formHeight;//窗体原始高度        doubl ...

  4. vue.js的特点-1

    1. Vue.js是数据驱动的,无需手动操作DOM. 它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应的更新. 2. MV ...

  5. 【Linux】——搭建redis

    1.准备安装文件 redis-3.0.5.tar.gz redis-desktop-manager(可视化管理工具) 2.解压.编译 软件存放目录:/usr/local/software 解压存放路径 ...

  6. clientHeight & clientWidth & offsetHeight & offsetWidth & outerWidth & innerWidth & outerWidth & outerHeight

    clientHeight & clientWidth & offsetHeight & offsetWidth MDN https://developer.mozilla.or ...

  7. delphi如何模块内部获得自身路径ExtractFilePath和paramstr(0)

    如何模块内部获得自身路径?Exe程序:DLL程序: ExtractFilePath(Application.ExeName) GetCurrentDir TIniFile.Create(GetCurr ...

  8. 【ZJ选讲·BZOJ 5071】

    小A的数字 有一串数字A1 ,A2,--,An,每次可以进行如下骚操作: 选择一个数字i,将(Ai-1,Ai,Ai+1)变为(Ai-1+Ai,-Ai,Ai+1+Ai), (特别地,若i=N,则( ...

  9. Expect使用小记

    By francis_hao    May 31,2017   本文翻译了部分Expect的man手册,只选取了个人常用的功能,因此并不完善.   Expect是一个可以和交互式程序对话的程序 概述 ...

  10. D. Relatively Prime Graph

    Let's call an undirected graph G=(V,E)G=(V,E) relatively prime if and only if for each edge (v,u)∈E( ...