最近在做一個移動端的網站,其中一個難點就是導航,因為導航里面項目比較多,需要通過滑動來查看被遮住的項目,這個功能實際上就是以前pc端經常做的拖拽,因此安裝老思路就上代碼,在pc端的模擬器里面也是很順溜的,但是一旦放到手機上一試,我哩個去,卡的不行,想了好久,發現是因為按照平時的思路,在寫拖拽的時候是通過定位來實現的,但是定位這種東西在性能很雞肋的手機端實在是太啃爹了。沒辦法,只好改用css3的transform來實現,這時問題來了,通常情況下,用js來獲取元素樣式值的時候,如果是用jquery,直接通過
css(‘property')直接獲取就可以了,但是如果獲取transform的屬性值,js給返回的值卻碉堡了,比如
document.defaultView.getComputedStyle(document.getElementById('nav'), null).transform
這時候返回matrix(1, 0, 0, 1, 100, 0),這么一個東西,怎么獲取里面的沒一個值呢?比如說我要獲取translateX值。
在網上找了很多好久,唯一的一個答案就是通過正則提取,姑且不論這種方法是否可靠,單是正則就讓我夠難受的,我最討厭的就是寫正則和讀正則了,最后變通一下,通過字符串處理函數把 matrix(1, 0, 0, 1, 100, 0)處理成數組,然后一一取值,效果相當的OK,例子如下:
var translates=document.defaultView.getComputedStyle(document.getElementById('nav'),null).transform;
第一步:通過translates.substring(7)提取1, 0, 0, 1, 100, 0,得到的是1, 0, 0, 1, 100, 0),
第二部:將第一步提取的字符串轉換成數組, translates.substring(7).split(','),得到的結果是["1", " 0", " 0", " 1", " 100"," 0)"],
第三步:提取你想要的值 ,parseFloat(translates.substring(7).split(',')[4]),這里得到的就是translateX的值,至於為什么要在這里使用parseFloat,是因為數組["1", " 0", " 0", " 1", " 100", " 0)"最后一個元素是一個數字和一個‘)’組成的,通過parseFloat就可以把‘)’去掉。