JS进阶篇--iscroll.js的运用

入门

Scroll是一个类,每一个须要运用转动功用的地区均要举行初始化。每一个页面上的iScroll实例数量在装备的CPU和内存能蒙受的局限内是没有限定的。

尽量坚持DOM组织的简约。iScroll运用硬件合成层然则有一个限定硬件能够处置惩罚的元素。
最好的HTML组织以下:

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

iScroll作用于转动地区的外层。在上面的例子中,UL元素能举行转动。只需容器元素的第一个子元素能举行转动,其他子元素完整被疏忽。

最基本的剧本初始化的体式格局以下:

<script type="text/javascript">
    var myScroll = new IScroll('#wrapper');
</script>

第一个参数能够是转动容器元素的DOM挑选器字符串也能够是转动容器元素的援用对象。下面是一个有效的语法:

var wrapper = document.getElementById('wrapper');
var myScroll = new IScroll(wrapper);

所以基本上你要么直接通报元素,要么通报一个querySelector字符串。因而能够运用css称号替代ID去挑选一个转动器容器,以下:

var myScroll = new IScroll('.wrapper');

注重,iScroll运用的是querySelector 而不是 querySelectorAll,所以iScroll只会作用到挑选器选中元素的第一个。假如你须要对多个对象运用iScroll,你须要构建自身的轮回机制。

初始化

当DOM预备完成后iScroll须要被初始化。最保险的体式格局是在window的onload事宜中启动它
DOMContentLoaded事宜中或许inline initialization中做也能够,须要记着的是剧本须要晓得转动地区的高度和宽度。假如你有一些图片在转动地区致使不能立马猎取地区的高度和宽度,iScroll的转动尺寸有能够会毛病

为转动起容器增添position:relative或许absolute款式。这将处理大多数转动器容器大小盘算不准确的题目。
综上所述,最小的iScroll设置以下:

<head>
    ...
    <script type="text/javascript" src="iscroll.js"></script>
    <script type="text/javascript">
    var myScroll;
    function loaded() {
        myScroll = new IScroll('#wrapper');
    }
    </script>
    </head>
    ...
    <body onload="loaded()">
    <div id="wrapper">
        <ul>
            <li>...</li>
            <li>...</li>
            ...
        </ul>
    </div>
    </body>
    

注:假如你有一个庞杂的DOM组织,最幸亏onload事宜以后恰当的耽误,再去初始化iScroll。最好给阅读器100或许200毫秒的间隙再去初始化iScroll。

参数设置

在iScroll初始化阶段能够经由过程组织函数的第二个参数设置它。

var myScroll = new IScroll('#wrapper', {
    mouseWheel: true,
    scrollbars: true
});

上面的例子示例了在iScroll初始化时开启鼠标滚轮支撑和转动条支撑。

明白中心

iScroll运用基于装备和阅读器机能的种种手艺来举行转动。一般不须要你来设置引擎,iScroll会为你挑选最好的体式格局。

尽管云云,明白iScroll事变机制和相识怎样去设置他们也是很主要的。

options.useTransform

默许情况下引擎会运用CSStransform属性。假如如今照样2007年,那末能够设置这个属性为false,这就是说:引擎将运用top/left属性来举行转动。
这个属性在转动器感知到Flash,iframe或许视频插件内容时会有效,然则须要注重:机能会有极大的消耗。
默许值:true

options.useTransition

iScroll运用CSS transition来完成动画结果(动量和弹力)。假如设置为false,那末将运用requestAnimationFrame替代。
在如今阅读器中这两者之间的差别并不显著。在老的装备上transitions实行得更好。默许值:true

options.HWCompositing

这个选项尝试运用translateZ(0)来把转动器附加到硬件层,以此来转变CSS属性。在挪动装备上这将进步机能,但在有些情况下,你能够想要禁用它(迥殊是假如你有太多的元素和硬件机能跟不上)。
默许值:true

注:假如不确定iScroll的最优设置。从机能角度动身,上面的一切选项应当设置为true。(或许更好的体式格局,让他们自动设置属性为true)。你能够尝试这设置他们,然则要警惕内存走漏。

转动条

转动条不只是像名字所表达的意义一样,在内部它们是作为indicators的援用。

一个指示器侦听转动条的位置而且实际它在全局中的位置,然则它能够做更多的事变。
先从最基本的最先。

options.scrollbars

正如我们在基本功用引见中提到的,激活转动条只须要做一件事变,这件事变就是:

var myScroll = new IScroll('#wrapper', {
    scrollbars: true
});

固然这个默许的行动是能够定制的。

转动的编程接口

固然还能够经由过程编程来举行转动。

scrollTo(x, y, time, easing)

对应存在的一个叫做myScroll的iScroll实例,能够经由过程下面的体式格局转动到恣意的位置:

myScroll.scrollTo(0, -100);

经由过程上面的体式格局将向下转动100个像素。记着:0永远是左上角。须要转动你必需通报负数。
time 和 easing是可选项。他们掌握转动周期(毫秒级别)和动画的擦除结果。
擦除功用是一个有效的IScroll.utils.ease对象。比方运用一个一秒的典范擦除动画你应当这么做:

myScroll.scrollTo(0, -100, 1000, IScroll.utils.ease.elastic);

擦除动画的范例选项有:quadratic, circular, back, bounce, elastic。

scrollBy(x, y, time, easing)

和上面一个要领相似,然则能够通报X和Y的值从当前位置举行转动。

myScroll.scrollBy(0, -10);

上面这个语句将在当前位置向下转动10个像素。假如你当前所在位置为-100,那末转动完毕后位置为-110.

scrollToElement(el, time, offsetX, offsetY, easing)

这是一个很有效的要领,你会喜好它的。
在这个要领中只需一个强迫的参数就是el。通报一个元素或许一个挑选器,iScroll将尝试转动到这个元素的左上角位置。
time是可选项,用于设置动画周期。
offsetX 和 offsetY定义像素级的偏移量,所以你能够转动到元素而且加上迥殊的偏移量。但并不仅限于此。假如把这两个参数设置为true,元素将会位于屏幕的中心。
easing参数和scrollTo要领里的一样。

对齐

iScroll能对齐到牢固的位置和元素。

options.snap

最简朴的对齐设置以下:

var myScroll = new IScroll('#wrapper', {
    snap: true
});

这将根据页面容器的大小自动支解转动条。
snap属性也能够通报字符范例范例的值。这个值是转动条将要对齐到的元素的挑选器。比以下面:

var myScroll = new IScroll('#wrapper', {
    snap: 'li'
});

这个示例中转动条将会对齐到每一个LI标记的元素。
下面将协助你疾速阅读iScroll供应的关于对齐的一系列风趣的要领。

goToPage(x, y, time, easing)

x 和 y显现你想转动到横向轴或许纵向轴的页面数。假如你须要在单个惟独上运用转动条,只须要为你不须要的轴向通报0值。
time属性是动画周期,easing属性是转动到指定点运用的擦除功用范例。请参考高等功用中的option.bounceEasing。这两个属性都是可选项。

myScroll.goToPage(10, 0, 1000);
上面这个例子将在一秒内沿着横向转动到第10页。

next()

prev()

转动到当前位置的下一页或许前一页。

缩放

为了运用缩放功用,你最好运用iscroll-zoom.js剧本。
和前面的示例一样,一个好的缩放功用的设置以下:

myScroll = new IScroll('#wrapper', {
    zoom: true,
    mouseWheel: true,
    wheelAction: 'zoom'
});

革新

iScroll须要晓得包装器和转动器确实的尺寸,在iScroll初始化的时刻举行盘算,假如元素大小发作了变化,须要通知iScroll DOM发作了变化。
下面将供应挪用refresh要领的准确机遇。

每次触摸DOM,阅读器衬着重视绘页面。一旦发作了重画我们能够安全地读新的DOM属性。从新绘制阶段不是瞬时发作的只是局限完毕时触发。这就是为何我们须要给衬着器革新iScroll之前一点时候。

为了确保javascript获得更新后的属性,应当像下面的例子如许运用革新要领:

ajax('page.php', onCompletion);

function onCompletion () {
    // Update here your DOM

    setTimeout(function () {
        myScroll.refresh();
    }, 0);
};

这里挪用refresh()运用了零秒守候,假如你须要马上革新iScroll边境就是云云运用。固然另有其他要领能够守候页面重绘,但零超时体式格局相称稳固。

注:*假如你有一个相称庞杂的HTML组织,你应当给阅读器更多的实行事宜,能够设置100到200毫秒的超时时候。
这一般适用于一切使命必需在DOM上举行。一般给衬着器一些实行的时候。*

自定义事宜

iScroll还供应额一些你能够挂靠的有效的自定义事宜。
运用on(type, fn)要领注册事宜。

myScroll = new IScroll('#wrapper');
myScroll.on('scrollEnd', doSomething);

上面的代码会在每次转动住手是实行doSomething要领。
能够挂靠的事宜以下:

beforeScrollStart,在用户触摸屏幕但还没有最先转动时触发。
scrollCancel,转动初始化完成,但没有实行。
scrollStart,最先转动
scroll,内容转动时触发,只需在scroll-probe.js版本中有效,请参考onScroll event。
scrollEnd,住手转动时触发。
flick,用户翻开左/右。
zoomStart,最先缩放。
zoomEnd,缩放完毕。

按键绑定

你能够激活keyBindings选项来支撑键盘掌握。默许情况下iScroll监听方向键,高低翻页建,home/end键,但这些按键绑定完整能够自定义。
你能够经由过程通报一个包括按键代码列表的对象来举行按键绑定。
默许的按键值以下:

keyBindings: {
    pageUp: 33,
    pageDown: 34,
    end: 35,
    home: 36,
    left: 37,
    up: 38,
    right: 39,
    down: 40
}

固然你也能够通报字符串举行按键绑定(比方:pageUp: ‘a’)。只需你设置了关于的按键值,那末iScroll就会相应你的设置。

转动条信息

iScroll存储了许多有效的信息,您能够运用它们来加强您的运用。
你能够会发明有效的:

myScroll.x/y,当前位置
myScroll.directionX/Y,末了的方向 (-1 down/right, 0 still, 1 up/left)
myScroll.currentPage,当前对齐捕捉点
下面是关于处置惩罚时候的代码示例:

myScroll = new IScroll('#wrapper');
myScroll.on('scrollEnd', function () {
    if ( this.x < -1000 ) {
        // do something
    }
});

假如 x 位置是低于-1000 像素滚轮住手时,上述实行某些代码。请注重我用这个产物而不是 myScroll,您能够运用两个固然,但 iScroll 通报自身作为这类情况下,当触发自定义事宜的功用。

烧毁

在不须要运用iScoll的时刻挪用iScroll实例的大众要领destroy()能够开释一些内存。

myScroll.destroy();
myScroll = null;

参考:
https://github.com/cubiq/iscroll
http://iiunknown.gitbooks.io/…

    原文作者:风雨后见彩虹
    原文地址: https://segmentfault.com/a/1190000003113280
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞