iscroll原始碼初涉

2022-09-03 17:03:13 字數 3512 閱讀 7665

專案裡面用的是iscroll-probe這個版本,具體原因是需要使用定位功能,但是今天學習,還是選軟柿子(iscroll-lite)來捏吧。

進門第一段**:

//

請求動畫幀

var raf = window.requestanimationframe ||window.webkitrequestanimationframe ||window.mozrequestanimationframe ||window.orequestanimationframe ||window.msrequestanimationframe ||

function (callback) ;

/*顯示器16.7ms重新整理間隔之前發生了其他繪製請求(settimeout),導致所有幀丟失,settimeout的定時器值推薦最小使用16.7ms的原因(16.7 = 1000 / 60, 即每秒60幀)

requestanimationframe與settimeout的不同在於,前者跟著瀏覽器重繪時間走,不存在後者丟幀的問題

*/

完全不懂……於是馬上找鑫爺的部落格翻看才知這是乙個js的動畫介面----請求動畫幀,requestanimationframe與settimeout的不同在於,前者跟著瀏覽器重繪時間走,不存在後者丟幀的問題。《css3動畫那麼強,requestanimationframe還有毛線用?》。 

大概初窺到iscroll的滑動效果的大門,繼續往下看,結構非常清晰:util + iscroll + iscroll.prototype。

util主要是封裝了一些獲採樣式名稱(字首)的方法,事件繫結方法,動畫緩動方法,樣式操作方法,其中最重要的是 preventdefaultexception , tap , click這三個方法。

//

配合config裡面的preventdefaultexception屬性,匹配到的element使用e.preventdefault()。

//預設preventdefaultexception是

me.preventdefaultexception = function

(el, exceptions)

}return

false;};

me.tap = function

(e, eventname) ;

me.click = function

(e)

};

繼續往下,就是iscroll的初始化操作,new iscroll的時候,會優先處理一些預設設定,其中有如下幾點需要注意:

eventpassthrough引數支援兩種寫法,一是boolean型別true / false , 二是string型別'vertical' / 'horizontal';

eventpassthrough設為true時候,會自動轉為'vertical',並且會設定scrollx為false,即水平滑動的時候,使用的是瀏覽器原生滑動;

freescroll只能與scrollx一起使用

最後就是

//

iscroll初始化滑鼠/手勢事件

this

._init();

//設定可滑動值

this

.refresh();

//定位到最頂最左

this.scrollto(this.options.startx, this

.options.starty);

//代表「啟用」的乙個標誌

this.enable();

此中最重要的是_init方法裡面呼叫的_initevents, 使用的是handleevent。 利用這個特性可以把任意物件註冊為事件處理程式,只要它擁有 handleevent 方法。

所以iscroll裡面有乙個handleevent屬性,利用element.addeventlistener( 'transitionend', iscroll)的方式,來處理相關事件。

iscroll.prototype =

break

; }

}}

好了,iscroll的初始化以及事件處理已經差不多了,接下來就是事件處理程式,估計也是一些位置處理的東西了吧,繼續:

具體的可以檢視我寫的《iscroll-lite原始碼注釋》,其實,看完原始碼,真的沒什麼很複雜的,但是有幾點覺得有待商榷的:

off解綁事件,缺乏一次性解綁的方法,建議把解綁的方法修改如下:

if ( index > -1) 

else

最後送上完整的引數設定:

var options =

freescroll : false

,

//方向鎖定閾值,比如使用者點選螢幕後,x與y之間差距大於5px,判斷使用者的拖動意圖,是x方向拖動還是y方向

directionlockthreshold: 5,

//是否有慣性緩衝動畫

momentum: true

,

//超出邊界時候是否還能拖動

bounce: true

,

//超出邊界還原時間點

bouncetime: 600,

//超出邊界返回的動畫

bounceeasing: '',

//是否阻止預設滾動事件

preventdefault: true

,

//當遇到表單元素則不阻止冒泡,而是彈出系統自帶相應的輸入控制項

preventdefaultexception: ,

//硬體合成 通過gpu做圖形渲染

hwcompositing: true

,

//使用transition

usetransition: true

,

//使用transform

usetransform: true

,

//穿透 是否不觸發原生滑動

eventpassthrough : false

,

//緩動函式

bounceeasing : '',

//resize時候隔60ms就執行refresh方法重新獲取位置資訊

resizepolling : 60,

//是否允許點選事件

click : false

,

//模擬tap事件,並且觸發addeventlistener('tap')所指定的方法

tap : 'tap',

//勻減速變數

deceleration : 0.0006,

//.//是否禁用滑鼠

disablemouse : false

,

//是否禁用win系統的pointer事件

disablepointer : false

,

//是否禁用touch事件

disabletouch : false

};

Linux scheduler 排程原始碼初步閱讀

schedule 流程 可排程實體的vruntime load計算 為什麼要先看fork的源 呢?因為在schedule函式裡面一開始我就有點看不懂 cpu smp processor id 按理來說很好理解呀,不就是獲取當前的cpu的id嗎?但是什麼叫做當前?在多處理器的機器上面,當前的定義是什麼...

初涉彙編《三》

在彙編 二 中我的說的問題,在這就不做回答了,因為乙個暫存器的來儲存資料肯定不夠用,因此,這些暫存器就可以提供空間。好了,這個彙編學習畢竟是我對彙編的個人的學習問題。現在我來說說彙編中後面的幾個標誌暫存器。標誌暫存器總共有9個,分別是cf,pf,af,zf,sf,tf,if,df,of 詳細解答,看...

初涉字尾陣列

以poj 1743為例。模板中的基數排序基於前向星。詳細證明過程詳見 演算法合集之 字尾陣列 處理字串的有力工具 非常不錯的一篇 include include include include include include include include include include inclu...