1 Star 0 Fork 9

winglau14/JRoll2

forked from BarZu/JRoll2 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
index.html 21.20 KB
一键复制 编辑 原始数据 按行查看 历史
BarZu 提交于 2016-07-30 11:48 . 更新文档,发布jroll-infinite v2.1.0
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="JRoll, 醉箩卜">
<meta name="description" content="JRoll 2 是在JRoll第一版基础上重写JRoll滑动算法,基于时间运动,解决帧频降低时滑动缓慢的问题,更改横竖方向判断方法,使捕获横竖方向更准确灵敏。">
<title>JRoll2 醉萝卜Ⅱ</title>
<link href="http://www.chjtx.com/JRoll1/favicon.ico" type="image/x-icon" rel="icon">
<link rel="stylesheet" href="./vendor/prism.css">
<style>
body {
font-family: "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", sans-serif;
line-height: 1.5;
}
h1 {
text-align: center;
}
p {
text-indent: 2em;
color: #222;
}
menu {
position: fixed;
top: 160px;
left: 20px;
line-height: 1.8;
overflow: auto;
bottom: 0;
width: 138px;
}
menu a {
color: #000;
text-decoration: none;
}
menu a.active {
color: #da020c;
}
dd {
margin: 0 2em;
}
article {
margin-left: 220px;
}
pre[class*="language-"] {
padding: 0 1em;
border-radius: 0;
}
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid #ddd;
padding: 10px;
}
tr:nth-child(2n) {
background: #f1f1f1;
}
.green {
background: green;
color: #fff;
font-size: 12px;
padding: 2px 4px;
margin-left: 10px;
}
.red {
color: red;
}
li div {
text-indent: 2em;
}
#logo {
background: url(http://www.chjtx.com/JRoll1/images/logo.png) center no-repeat;
background-size: 120px 120px;
width: 200px;
height: 160px;
position: fixed;
left: 0;
top: 0;
border-bottom: 1px dashed #ddd;
}
</style>
</head>
<body>
<div id="logo"></div>
<menu>
<li><a href="#summary">概述</a></li>
<li><a href="#use">使用</a>
<div><a href="#options">可选参数</a></div>
<div><a href="#property">属性</a></div>
<div><a href="#method">方法</a></div>
<div><a href="#events">事件</a></div>
</li>
<li><a href="#demos">示例</a></li>
<li><a href="#download">下载</a></li>
<li><a href="#plugins">插件</a></li>
<li><a target="_blank" href="https://git.oschina.net/chenjianlong/JRoll2">git源码</a></li>
<li><a target="_blank" href="http://www.chjtx.com/JRoll1/">JRoll 1</a></li>
</menu>
<article class="language-js">
<h1>JRoll 2 使用文档</h1>
<h2 id="summary">概述</h2>
<h3>说明</h3>
<p>JRoll,一款能滚起上万条数据,具有滑动加速、回弹、缩放、滚动条、滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件。</p>
<p>JRoll 2 是在JRoll第一版基础上重写JRoll滑动算法,基于时间运动,解决帧频降低时滑动缓慢的问题,更改垂直水平方向判断方法,使捕获垂直水平方向更准确灵敏。</p>
<p>JRoll 2 增减了一些api不完全兼容JRoll 1。</p>
<h3>兼容性</h3>
<p>本插件专为移动应用度身设计,目前已测试通过的手机系统有:android4.1/4.2/4.3/4.4/5.0/6.0和ios6/7/8/9,欢迎网友对其它机型进行测试反馈。</p>
<p>为使本插件最轻量化,JRoll 2 不兼容PC浏览器,因此强烈建议使用谷歌浏览器模拟器进行开发。</p>
<h3>引入</h3>
<dl>
<dt>普通方式引入</dt>
<dd>
<pre>
<code>
&lt;script src='jroll.js'&gt;&lt;/script&gt;
</code></pre>
</dd>
<dt>CommonJS规范引入</dt>
<dd>
<pre>
<code>
var JRoll = require('jroll.js');
</code></pre>
</dd>
<dt>AMD规范引入(requireJS)</dt>
<dd>
<pre>
<code>
require(['jroll'], function(JRoll) {
...
});
</code></pre>
</dd>
<dt>CMD规范引入(seaJS)</dt>
<dd>
<pre>
<code>
seajs.use('jroll', function(JRoll) {
...
});
</code></pre>
</dd>
</dl>
<h3>简单例子</h3>
<dt>
<dt>html代码</dt>
<dd>
<pre>
<code class="language-html">
&lt;div id="wrapper"&gt;
&lt;ul id="scroller"&gt;
&lt;li&gt;有一美人兮,见之不忘。&lt;/li&gt;
&lt;li&gt;一日不见兮,思之如狂。&lt;/li&gt;
&lt;li&gt;凤飞翱翔兮,四海求凰。&lt;/li&gt;
&lt;li&gt;无奈佳人兮,不在东墙。&lt;/li&gt;
&lt;li&gt;将琴代语兮,聊写衷肠。&lt;/li&gt;
&lt;li&gt;何日见许兮,慰我彷徨。&lt;/li&gt;
&lt;li&gt;愿言配德兮,携手相将。&lt;/li&gt;
&lt;li&gt;不得於飞兮,使我沦亡。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</code></pre>
</dd>
<dt>css代码</dt>
<dd>
<pre>
<code class="language-css">
ul {margin: 0; padding: 0;}
li {line-height: 24px; margin-left: 24px;}
#wrapper {width: 200px; height: 100px; border: 1px solid;}
</code></pre>
</dd>
<dt>js代码</dt>
<dd>
<pre>
<code>
new JRoll("#wrapper");
</code></pre>
</dd>
</dt>
<dl>
<dt>※ 要使JRoll滚起来需要注意以下几点</dt>
<dd>
<li>wrapper的高度需要小于scroller高度</li>
<li>JRoll虽然可以滚起上万条数据,但仅限于普通标签节点和文本节点,如果图片过多或过大,都会占用过多内存而导致卡顿。</li>
<li>wrapper的padding不为0,scroller的margin不为0,否则都有可能导致计算错误,scroller内容显示不全</li>
</dd>
</dl>
<br/>
<h2 id="use">使用</h2>
<h3>如何使用</h3>
<dl>
<dd>
<pre>
<code>
var jroll = new JRoll(selector [, options]);
</code></pre></dd>
</dl>
<p>selector是容器,可以是id选择器字符串<em>#wrapper</em>,也可以是dom对象<em>document.getElementById('wrapper')</em>,第二个参数是可选对象,该参数内容决定了创建一个怎样的JRoll对象</p>
<dl>
<dt>例:创建一个带垂直滚动条的对象</dt>
<dd>
<pre>
<code>
var jroll = new JRoll("#wrapper", {scrollBarY:true});
</code></pre></dd>
</dl>
<p>保存了JRoll对象后,可动态对部分可选参数进行修改</p>
<dl>
<dt>例:禁止回弹</dt>
<dd>
<pre>
<code>
jroll.options.bounce = false;
</code></pre></dd>
</dl>
<h3 id="options">可选参数</h3>
<table>
<tr>
<th width="120">可选值</th>
<th width="120">默认值</th>
<th>说明</th>
</tr>
<tr>
<td>id</td>
<td>[随机生成]</td>
<td>id,jroll对象的唯一标记,建议手动提供id,方便在全局JRoll.jrollMap访问指定jroll对象,不提供时系统自动创建。</td>
</tr>
<tr>
<td>scrollX</td>
<td>false</td>
<td>使能水平滑动<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>scrollY</td>
<td>true</td>
<td>使能垂直滑动<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>scrollFree</td>
<td>false</td>
<td>使能自由滑动,默认情况下,x方向在滑动时,y方向不能滑动,相反亦然,如果应用于对图片进行放大滑动,可将此参数设为true<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>minX</td>
<td>0</td>
<td>向左滑动的边界值<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>maxX</td>
<td>[负scroller的宽]</td>
<td>向右滑动的边界值<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>minY</td>
<td>0</td>
<td>向下滑动的边界值<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>maxY</td>
<td>[负scroller的高]</td>
<td>向上滑动的边界值<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>zoom</td>
<td>false</td>
<td>使能缩放<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>zoomMin</td>
<td>1.0</td>
<td>最小缩放倍数<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>zoomMax</td>
<td>4.0</td>
<td>最大缩放倍数<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>bounce</td>
<td>true</td>
<td>允许回弹<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>scrollBarX</td>
<td>false</td>
<td>开启水平滚动条</td>
</tr>
<tr>
<td>scrollBarY</td>
<td>false</td>
<td>开启垂直滚动条</td>
</tr>
<tr>
<td>scrollBarFade</td>
<td>false</td>
<td>滚动条使用渐隐模式</td>
</tr>
<tr>
<td>preventDefault</td>
<td>true</td>
<td>禁止touchmove默认事件</td>
</tr>
<tr>
<td>momentum</td>
<td>true</td>
<td>开启滑动加速,惯性过渡<span class="green">可动态修改</span></td>
</tr>
<tr>
<td>autoStyle</td>
<td>true</td>
<td>自动为wrapper和scroller添加样式</td>
</tr>
<tr>
<td><del class="red">adjustTop</del></td>
<td><del class="red">190</del></td>
<td>从JRoll v2.2.0版本开始,JRoll删除了adjustTop选项,自动调整安卓机输入框位置的功能抽离到jroll-fixedinput.js里。<del class="red">安卓手机弹出软键盘时自动调整输入框位置,作者不建议使用该项,如遇软键盘遮挡输入框的情况,建议重新设计表单页面。参考:<a target="_blank" href="http://my.oschina.net/cjlice/blog/625526">WebAPP输入框被软键盘遮挡肿么办?</a></del></td>
</tr>
<tr>
<td>scroller</td>
<td>[wrapper的第一个子元素]</td>
<td>指定scroller,不可动态更改,可以是id选择器字符串<em>#scroller</em>,也可以是dom对象<em>document.getElementById('scroller')</em></td>
</tr>
</table>
<h3 id="property">属性</h3>
<dl>
<dt><strong>id</strong></dt>
<dd>
JRoll对象的唯一标识符。
<pre><code>
var jroll = new JRoll("#wrapper");
console.log(jroll.id);
</code></pre>
</dd>
<dt><strong>jrollMap</strong></dt>
<dd>
对象,JRoll对象集合,保存了当前页面的所有JRoll对象。
<pre><code>
console.log(JRoll.jrollMap);
</code></pre>
</dd>
</dl>
<h3 id="method">方法</h3>
<dl>
<dt><strong>refresh</strong><span class="green">支持链式调用</span></dt>
<dd>
当scroller或wrapper的高度发生变化时,需要用此方法对JRoll对象进行刷新
<pre><code>
var jroll = new JRoll("#wrapper");
//do something,例:动态修改scroller的内容,使scroller的高度发生变化
jroll.refresh();
</code></pre>
</dd>
<dt><strong>scrollTo</strong><span class="green">支持链式调用</span></dt>
<dd>
该方法用于移动scroller,共五个参数,第一个参数是x偏移量(必填),第二个是y偏移量(必填),第三个是滑动时间(可选,单位ms),第四个是是否允许超出边界(可选,true/false),第五个回调方法(可选)。如果想获取当前x,y偏移量,可直接输出jroll.x和jroll.y
<pre><code>
var jroll = new JRoll("#wrapper");
//200ms内滑动到0px, -100px位置
jroll.scrollTo(0, -100, 200);
//允许超出边界
jroll.scrollTo(100, 100, 0, true);
//回调
jroll.scrollTo(0, 100, 400, false, function() {
//滑动结束后执行
});
</code></pre>
</dd>
<dt><strong>enable</strong><span class="green">支持链式调用</span></dt>
<dd>
使能滑动,使用disable禁止滑动后可用该方法重新开启
<pre><code>
jroll.enable();
</code></pre>
</dd>
<dt><strong>disable</strong><span class="green">支持链式调用</span></dt>
<dd>
使不能滑动
<pre><code>
jroll.disable();
</code></pre>
</dd>
<dt><strong>destroy</strong></dt>
<dd>
销毁jroll对象
<pre><code>
jroll.destroy();
</code></pre>
</dd>
<dt><strong>scale</strong><span class="green">支持链式调用</span></dt>
<dd>
缩放,只接受一个整型/浮点型参数
<pre><code>
//放大1.5倍
jroll.scale(1.5);
</code></pre>
</dd>
<dt><strong>call</strong></dt>
<dd>
在滑动时中转移对象,返回转移给的对象。适合于嵌套滑动时内层滑动到末尾开始滑动外层的场景。
<pre><code>
/* 例:
* jroll1在外层,包裹jroll2
* jroll2在滑动到达指定条件时将滚动权交给jroll1
*/
var pos;
var jroll1 = new JRoll("#wrapper", {bounce:true});
var jroll2 = new JRoll("#inner", {bounce:true});
jroll2.on("scrollStart", function() {
pos = this.y;
});
jroll2.on("scroll", function(e) {
if ((this.y-pos > 0 && pos === 0) || (this.y-pos < 0 && pos === this.maxScrollY)) {
jroll2.call(jroll1, e); //返回jroll1
}
});
</code></pre>
</dd>
</dl>
<h3 id="events">事件</h3>
<p>JRoll一共提供8个事件,每个事件都可多次添加行为</p>
<dl>
<dt><strong>scrollStart</strong></dt>
<dd>
滑动开始时执行
<pre><code>
jroll.on("scrollStart", function() {
console.log(this.x); //输出当前x偏移量,this指向jroll对象
});
</code></pre>
</dd>
<dt><strong>scroll</strong></dt>
<dd>
滑动过程中执行
<pre><code>
jroll.on("scroll", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>scrollEnd</strong></dt>
<dd>
滑动结束时执行
<pre><code>
jroll.on("scrollEnd", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>touchEnd</strong></dt>
<dd>
用户释放手指时执行,早于scrollEnd晚于scroll事件
<pre><code>
jroll.on("touchEnd", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>zoomStart</strong></dt>
<dd>
开始缩放时执行
<pre><code>
jroll.on("zoomStart", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>zoom</strong></dt>
<dd>
缩放过程中执行
<pre><code>
jroll.on("zoom", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>zoomEnd</strong></dt>
<dd>
缩放结束后执行
<pre><code>
jroll.on("zoomEnd", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
<dt><strong>refresh</strong></dt>
<dd>
使用jroll.refresh()刷新后执行
<pre><code>
jroll.on("refresh", function() {
//该干嘛干嘛去...
});
</code></pre>
</dd>
</dl>
<br/>
<h2 id="demos">示例</h2>
<p><img width="160" height="160" src="./demos/images/qrcode.png"></p>
<p>http://www.chjtx.com/JRoll/demos/</p>
<br/>
<h2 id="download">下载</h2>
<em>建议:下载文件后将文件名版本号去掉,这样在JRoll有更新时只需要更新jroll.js文件,不需要更新引用jroll的文件。</em>
<ul>
<li><a target="_blank" href="./build/jroll.2.2.1.js">jroll.2.2.1.js</a>(27k)</li>
<li><a target="_blank" href="./build/jroll.2.2.1.min.js">jroll.2.2.1.min.js</a>(13k)</li>
</ul>
<ul>
<li><del target="_blank" href="./build/jroll.2.2.0.js">jroll.2.2.0.js</del>(27k)</li>
<li><del target="_blank" href="./build/jroll.2.2.0.min.js">jroll.2.2.0.min.js</del>(13k)</li>
</ul>
<ul>
<li><del target="_blank" href="./build/jroll.2.1.0.js">jroll.2.1.0.js</del>(28k)</li>
<li><del target="_blank" href="./build/jroll.2.1.0.min.js">jroll.2.1.0.min.js</del>(13k)</li>
</ul>
<ul>
<li><del target="_blank" href="./build/jroll.2.0.0.js">jroll.2.0.0.beta</del>(25k)</li>
<li><del target="_blank" href="./build/jroll.2.0.0.min.js">jroll.2.0.0.min.beta</del>(12k)</li>
</ul>
<h3>版本日志</h3>
<dl>
<dt>v2.2.1(2016-07-29)</dt>
<dd>
<li>优化滑动。</li>
<li>utils工具添加IOS判断。</li>
</dd>
</dl>
<dl>
<dt>v2.2.0(2016-07-24)</dt>
<dd>
<li>防止按停滑动时误触a链接。</li>
<li>废除adjustTop选项。</li>
<li>抽离focusin/out到jroll-fixedinput组件。</li>
<li>滑动时例input/textarea失焦。</li>
<li>调整滑动数值。</li>
</dd>
</dl>
<dl>
<dt>v2.1.0(2016-07-01)</dt>
<dd>
<li>正式版!!!</li>
<li>修复若干bug。</li>
<li>调整滑动数值。</li>
<li>使用requestAnimationFrame执行回弹,解决IOS在大量dom时使用transition回弹卡顿问题。</li>
<li>textarea不出现滚动条时允许滚动JRoll实例。</li>
<li>scrollTo方法添加第五个参数->回调方法。</li>
<li>滚动条长度限制最小为8px。</li>
<li>删除了g可选项,分阶段使用不同的系数值。</li>
</dd>
</dl>
<dl>
<dt>v2.0.0(2016-06-19)</dt>
<dd>
<li>上线!!!</li>
<li>重写滑动算法,基于时间运动,解决帧频降低时滑动缓慢的问题。</li>
<li>更改垂直水平方向判断方法,使捕获垂直水平向更准确灵敏。</li>
<li>添加minX、maxX、minY、maxY选项。</li>
<li>添加touchEnd事件。</li>
<li>修改滚动条样式。</li>
<li>删除scroll选项。</li>
</dd>
</dl>
<br/>
<h2 id="plugins">插件</h2>
<h3>jroll-pulldown.js 下拉组件</h3>
<p>下载:<a href="./plugins/jroll-pulldown/build/jroll-pulldown.1.0.0.js" target="_blank">jroll-pulldown.js</a>(9k) <a href="./plugins/jroll-pulldown/build/jroll-pulldown.1.0.0.min.js" target="_blank">jroll-pulldown.min.js</a>(6k)</p>
<p>说明:<a href="https://git.oschina.net/chenjianlong/JRoll2/tree/master/plugins/jroll-pulldown" target="_blank">jroll-pulldown 使用文档</a></p>
<h3>jroll-infinite.js 无限加载组件</h3>
<p>下载:<a href="./plugins/jroll-infinite/build/jroll-infinite.2.1.0.js" target="_blank">jroll-infinite.js</a>(7k) <a href="./plugins/jroll-infinite/build/jroll-infinite.2.1.0.min.js" target="_blank">jroll-infinite.min.js</a>(4k)</p>
<p>详情:<a href="https://git.oschina.net/chenjianlong/JRoll2/tree/master/plugins/jroll-infinite" target="_blank">jroll-infinite 使用文档</a></p>
<h3>jroll-fixedinput.js 固定输入框</h3>
<p>下载:<a href="./plugins/jroll-fixedinput/build/jroll-fixedinput.1.0.1.js" target="_blank">jroll-fixedinput.js</a>(2k) <a href="./plugins/jroll-fixedinput/build/jroll-fixedinput.1.0.1.min.js" target="_blank">jroll-fixedinput.min.js</a>(1k)</p>
<p>详情:<a href="https://git.oschina.net/chenjianlong/JRoll2/tree/master/plugins/jroll-fixedinput" target="_blank">jroll-fixedinput 使用文档</a></p>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</article>
<script src="./vendor/prism.js"></script>
<script>
setTimeout(function() {
var alist = document.querySelectorAll("menu a");
var hrefs = [];
var offsets = [];
Array.prototype.forEach.call(alist, function(a) {
var h = a.hash;
if (h.indexOf("#") !== -1) {
hrefs.push(h.replace("#", ""));
}
});
hrefs.forEach(function(o) {
var d = document.getElementById(o);
if (d) {
offsets.push(d.offsetTop);
}
});
function setMenuTag() {
var t = window.scrollY + 90;
for (var i = offsets.length - 1; i >= 0; i--) {
if (t > offsets[i]) {
Array.prototype.forEach.call(alist, function(a) {
a.classList.remove("active");
});
alist[i].classList.add("active");
break;
}
}
};
setMenuTag();
window.onscroll = setMenuTag;
}, 300);
</script>
</body>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/winglau/JRoll2.git
git@gitee.com:winglau/JRoll2.git
winglau
JRoll2
JRoll2
master

搜索帮助