首頁  >  文章  >  web前端  >  iScroll是什麼? iScroll用法實例詳解

iScroll是什麼? iScroll用法實例詳解

伊谢尔伦
伊谢尔伦原創
2017-07-19 15:38:374168瀏覽

iScroll的產生:

iScroll的產生完全是因為行動版webkit瀏覽器,例如在iPhone,Android 的行動裝置上。
iScroll的使用方法:

iScroll的原理是外層有一個溢出隱藏(overflow:hidden;)的DOM,然後這個區域內的第一個DOM結構會被實例化,其包裹的內容可以縱向或橫向的滾動,所以在使用iScroll的時候,滾動元素要盡量的簡單,減少DOM個數,減少嵌套,因為DOM結構越是複雜iScroll運行起來就越是吃力,有可能會造成某些節點顯示不正常的情況。 所以,推薦使用的DOM結構如下:


<p id="wrapper">//overflow:hidden;
 <ul>
 //只有第一个DOM结构(ul)被实例化,这个DOM可以纵向或者横向的滚动,
 //多出的内容会被wrapper的样式hidden。
  <li>1</li>
  <li>2</li>
  <li>3</li>
 </ul>
</p>

注意:再次重申,只有wrapper裡的第一個子元素(ul)才可以被實例化滾動,並且要結合外層的DOM(wrapper)才能實現滾動。
如果 wrapper中有多個ul怎麼辦?很簡單,記住那句話,只有wrapper裡的第一個子元素(ul)才可以被實例化滾動:


<p id="wrapper">//overflow:hidden;
 <p id="first">
  //只有第一个DOM结构(ul)被实例化,这个DOM可以纵向或者横向的滚动,
  //多出的内容会被wrapper的样式hidden
  <ul>
   <li>1</li>
   <li>2</li>
   <li>3</li>
  </ul>
  <ul>
   <li>4</li>
   <li>5</li>
   <li>6</li>
  </ul>
 </p>
</p>

看到了吧,只有first會被實例化。 注意:這裡第一個DOM結構的ID(first)可以不寫,我只是為了方便大家識別才寫了個ID,但是最外層的ID(wrapper)一定要寫,因為在JS實例化的時候需要填入這個ID:


var myScroll = new iScroll("wrapper");

iScroll應該如何實例化

既然說了實例化,我們應該在什麼時候實例化?據說實例化的方法有很多,但是我沒用過,我只說一種:
(1)在HTML(uw3c.html)頁面底部(body之後html之前)加載iscroll.js與當前頁面的uw3c .js,這樣能確保HTML的DOM結構能載入出來。
(2)在JS插入頁面DOM結構和數據之前實例化iScroll,也就是在JS的最開始實例化,因為之後可能會使用JS來插入DOM或者數據,這樣以來能確保在插入數據之前iScroll已經實例化了。

HTML://HTML結構


<html >
 <body>
  ...code...
 </body>
  //插入iscroll.js文件
 <script type="text/javascript" src="js/iscroll.js" > </script >
 //插入本页面JS文件
 <script type="text/javascript" src="js/uw3c.js" > </script >
</html>

 JS://JS檔案內容


var myscroll;
 function iscroll(data){
  //实例化iScroll
  myscroll=new iScroll("wrapper");
  pageData(data);
 }
 function pageData(obj){
  $("body").html(obj);
  myscroll.refresh();//当DOM结构发生变化的时候,需要刷新iScroll
 }
 iscroll("<p>pagedata</p>");

iScroll中的參數:

在實例化iScroll的時候,可以傳入兩個參數,第一個參數是實例化的外層的DOM的ID,第二個參數是iScroll執行方法的物件:


var myscroll=new iScroll("wrapper",{hScrollbar:false});
或者
var opts = {
    vScroll:false,//禁止垂直滚动
    snap:true,//执行传送带效果
    hScrollbar:false//隐藏水平方向上的滚动条
   };
var myscroll = new iScroll("wrapper",opts);

第二個參數內容如下,這個參數會控制iScroll的效果:


hScroll  false 禁止横向滚动 true横向滚动 默认为true
vScroll  false 禁止垂直滚动 true垂直滚动 默认为true
hScrollbar  false隐藏水平方向上的滚动条
vScrollbar  false 隐藏垂直方向上的滚动条
fadeScrollbar false 指定在无渐隐效果时隐藏滚动条
hideScrollbar 在没有用户交互时隐藏滚动条 默认为true
bounce   启用或禁用边界的反弹,默认为true
momentum  启用或禁用惯性,默认为true,此参数在你想要保存资源的时候非常有用
lockDirection false取消拖动方向的锁定,true拖动只能在一个方向上(up/down 或者left/right)

iScroll中的方法:

當然在第二個參數中,也有一些方法可以執行:
(1)scrollTo(x, y, time, relative)方法:傳入4個參數:X軸滾動距離,Y軸滾動距離,效果時間,是否相對目前位置。所以例如:


//在200毫秒的时间内,Y轴向上滚动100像素;
uw3c.scrollTo(0, -100, 200)
//在200毫秒的时间内,相对于当前位置,X轴向左滚动100像素;
uw3c.scrollTo(-100, 0, 200, true)

(2)refresh()方法:在DOM結構改變之後,需要刷新iScroll,否則滾動插件會實例化的不準確:


uw3c.refresh();//刷新iScroll

(3)onPosChange,有沒有一個方法能回傳位置的變化?你可以查詢自己所用的iScroll中有沒有onPosChange方法:


#
onPosChange:function(x,y){
 if(y < -200){
  //如果Y周向上滚动200像素,$("#uw3c")就显示,否则就隐藏。
  $("#uw3c").show();
 }else{
  $("#uw3c").hide();
 }
}

(4)onScrollEnd:滾動結束時執行的事件,如果想在滾動結束時出發摸個事件,這個方法就拍上用處了:


//滚动结束后,执行的方法,滚动后会出现提示框alert("phpcn")
onScrollEnd:function(){
 alert("phpcn");
}

(5)onRefresh:在DOM結構改變之後,需要刷新iScroll,否則滾動插件會實例化的不準確,onRefresh是刷新完iScroll會執行的方法。
(6)onBeforeScrollStart:開始滾動前的時間回調,預設是阻止瀏覽器預設行為 。
(7)onScrollStart:開始滾動的回呼。
(8)onBeforeScrollMove:內容移動前的回呼。
(9)onScrollMove:內容移動的回呼。
(10)onBeforeScrollEnd:在滾動結束前的回呼。
(11)onTouchEnd:手離開畫面後的回調。
(12)onDestroy:銷毀實例的回呼。

以上是iScroll是什麼? iScroll用法實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn