手机端iscoll插件的使用方法

除了以前版本的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的结构如下所示:

<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进行实例化:

(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里的第二个参数允许你自定义一些内容,比如下面的这段代码:

       <script>

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

       </script>

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

               hScroll               false 禁止横向滚动 true横向滚动 默认为true

               vScroll               false 精致垂直滚动 true垂直滚动 默认为true

               hScrollbar         false隐藏水平方向上的滚动条

               vScrollbar         false 隐藏垂直方向上的滚动条

               fixedScrollbar  在iOS系统上,当元素拖动超出了scroller的边界时,滚动条会收缩,设置为true可以禁止滚动条超出

                                        scroller的可见区域。默认在Android上为true, iOS上为false

               fadeScrollbar  false 指定在无渐隐效果时隐藏滚动条

               hideScrollbar  在没有用户交互时隐藏滚动条 默认为true

               bounce            启用或禁用边界的反弹,默认为true

               momentum     启用或禁用惯性,默认为true,此参数在你想要保存资源的时候非常有用

               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”分割。最佳的设置如下:

                 var myscroll=new iScroll("wrapper",{

                       snap:true,

                       momentum:false,

                       hScrollbar:false,

                       vScrollbar: false

                  });

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

                var myscroll=new iScroll("wrapper",{

                      snap:"li",

                      momentum:false,

                      hScrollbar:false,

                      vScrollbar:false

                });

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

自定义滚动条(custom scrollbars)

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

                  var myscroll=new iScroll("wrapper",{

                     scrollbarClass: "myScrollbar"

                 });

你可以点击这里看一个小例子,在这个小例子里,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);
                 }

通用方法:

     (1)refresh                          在DOM树发生变化时,应该调用此方法

     (2)scrollTo()                     滚动到某个位置

               eg: myscroll.scrollTo(0,10,200,true);

     (3)scrollToElement()      滚动到某个元素

               eg: myscroll.scrolToElement("li:nth-child(10)",100);

     (4)detroy()                       完全消除myscroll及其占用的内存空间

                eg: myscroll.destroy()
时间: 2024-10-09 08:32:31

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

DZ3.2手机端访问bug彻底解决方法:您访问的页面无手机页面,是否进一步访问电脑版

手机访问dz3.2出现这种情况是部分页面有手机版也会出现这个提示: 提示您访问的页面无手机页面,是否进一步访问电脑版? 使用手机访问的时候,会出现这样的提示 您访问的页面无手机页面,是否进一步访问电脑版? 目前网上提供的解决方案都没有找到问题的根本原因,只是提供了强制刷新的方法,根据本人的调试最终找到了此bug的问题所在,只需要修改 source/function/function_core.php 找到 source/function/function_core.php第618行: 把 $mo

webkit内核浏览器 手机端 滚动顿卡 处理方法 修改

今天遇到一个问题.因为之前也遇到过,解决了,但是一下子想不起来如何解决 所以,今天就把这个记录一下. 问题是这样: body下的一个容器 section 高度为100%  宽度为100% 即该 父类是和屏幕同宽同高的.但是 section 下的 子标签的 高度超过父标签 此时在手机端的滚动  有可能会滚动顿卡.这其实因为设备是没有启用弹性滚动,或者不支持弹性滚动. 测试一下 1 <!DOCTYPE html> 2 <html lang="en"> 3 <h

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

官方介绍PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone.iPad.黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品. 为谁而用让移动站点的相册体验和原生App一样的设计师和开发者. 绝佳特性PhotoSwipe提供给用户一个熟悉又直观的相册交互界面. 官方网站http://www.photoswipe.com/ 源码示例http://github.com/downloads/codecomputerlove/P

手机端选择时间插件

<!--时间选择css+js--> <link href="js/datatime/mobiscroll.css" rel="stylesheet" type="text/css"> <link href="js/datatime/mobiscroll_002.css" rel="stylesheet" type="text/css"> <lin

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

//创建一个video标签 var __video = $("#video").appendTo('.i-i-video'); //设置视频文件地址 __video.attr('src',"http://vd3.bdstatic.com/mda-jjuinqnj6b758kdq/sc/mda-jjuinqnj6b758kdq.mp4"); //创建临时使用的a标签 var __tmpA = __tmpA || $("#goDetail").app

手机端优化列表滚动性能——分页加载

现在在手机端列表滚动随处可见,拿现在大家都在用的微信来说,朋友圈就是一个列表,和好友发信息界面就是一个列表. 如果列表长度不长,比如你微信朋友圈一共就只有两三个人分享过他们的动态,那没问题,如果你是大屏手机估计还不用滚动就已经看完了. 但那有可能吗?有也只是少数.我们现在每天刷朋友圈那都是几屏几屏这样刷的. 我们设定一屏有五个人分享的动态,每一个动态里面有5个dom节点,即一屏有25个dom节点. 我们开始刷朋友圈,才看了四屏就已经100个节点了,再往下刷成百甚至上千个dom节点都出来了,那你手

手机端全屏滑动方法

最近做了一个手机端的微信分享领红包的项目,在这个项目中需要用到一个全屏滑动的功能,所以自己就根据网上查找的相关资料再通过自己的改造,封装了一个滑动的插件,这个插件可以实现以下几个功能: 指定水平/垂直滑动 指定滑动的回调函数 下面是具体的代码: 1 ;(function(root){ 2 'use strict'; 3 function touch(opts){ 4 5 this.canvas = opts.dom; 6 this.section = opts.section; 7 this.d

jquery手机端带农历的万年历插件

简要教程 这是一款使用jquery结合swiper.js来制作的手机端带农历的万年历插件.该万年历类似百度的万年历,带有农历日期.用户可以通过类似iphone的滚轮来选择不同的的日期. 使用方法: 在页面中引入common.css.index.css和swiper-3.3.1.min.css样式文件,以及jquery.swiper-3.3.1.min.js.common.js文件. 下面是该手机端带农历的万年历插件的一些效果截图. 演示下载地址:http://www.datouwang.com/

用jQuery.touchSwipe插件实现手机端场景滑动切换效果

使用jQuery的touchSwipe插件监听触摸滑动事件,结合css3实现手机端场景滑动切换效果.最好在手机端测试代码,也可以在PC端用鼠标点击模拟滑动. 1.html代码: <div class="container"> <div class="page page0 page_current"> <h1>你好,我是0号屏幕,第一屏,鼠标单击向下/向上拖动</h1> </div> <div clas