專案裡面用的是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這三個方法。
//繼續往下,就是iscroll的初始化操作,new iscroll的時候,會優先處理一些預設設定,其中有如下幾點需要注意:配合config裡面的preventdefaultexception屬性,匹配到的element使用e.preventdefault()。
//預設preventdefaultexception是
me.preventdefaultexception = function
(el, exceptions)
}return
false;};
me.tap = function
(e, eventname) ;
me.click = function
(e)
};
eventpassthrough引數支援兩種寫法,一是boolean型別true / false , 二是string型別'vertical' / 'horizontal';
eventpassthrough設為true時候,會自動轉為'vertical',並且會設定scrollx為false,即水平滑動的時候,使用的是瀏覽器原生滑動;
freescroll只能與scrollx一起使用
最後就是
//此中最重要的是_init方法裡面呼叫的_initevents, 使用的是handleevent。 利用這個特性可以把任意物件註冊為事件處理程式,只要它擁有 handleevent 方法。iscroll初始化滑鼠/手勢事件
this
._init();
//設定可滑動值
this
.refresh();
//定位到最頂最左
this.scrollto(this.options.startx, this
.options.starty);
//代表「啟用」的乙個標誌
this.enable();
所以iscroll裡面有乙個handleevent屬性,利用element.addeventlistener( 'transitionend', iscroll)的方式,來處理相關事件。
iscroll.prototype =好了,iscroll的初始化以及事件處理已經差不多了,接下來就是事件處理程式,估計也是一些位置處理的東西了吧,繼續:break
; }
}}
具體的可以檢視我寫的《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...