使用局部滾動,而不是整頁滾動html
在元素上加 pointer:cursor
vue
兩種方法,一是使用 fastclick.js(推薦)。二是不綁 click
事件,綁在 tap
事件上(此方法會致使開發時調試困難,模擬設備模式下觸發 tap
有 bug)android
沒有很好的解決方案,應從產品設計層面避免這種狀況(好比說作轉場頁面等)git
在彈窗上須要滾動的地方使用 Swiper,不須要滾動的地方加 ontouchmove="event.preventDefault()"
github
綁在 touchmove
事件上,但手指離開屏幕慣性滑動這段時間仍是沒法觸發,若是確實須要精細控制,可考慮 IScroll.jsweb
這一般能夠提高用戶體驗,但有時咱們須要禁止這種記憶,加上下面兩行ajax
history.scrollRestoration = 'manual'
window.onunload = () => window.scrollTo(0, 0)
複製代碼
沒法實現,沒法實現,沒法實現。這是廠商爲避免偷取流量強制規定的。兩個方法,一是從產品設計層面規避,二是降級爲用戶觸屏播放,沒有第三種可能數組
Array.prototype.sort
方法在某些手機上會不起做用sort 方法傳入的比較函數應該返回一個數值,而不是布爾值。也就是應該使用 -
號,而不是 >
或 <
號瀏覽器
Object.assign
方法在某些手機上會不起做用參考 jQuery 的 $.extend
實現本身的對象合併方法。注意,Babel 僅轉譯語法,而不轉譯 API,因此使用這些 ES6+ 的 API 都存在不兼容的風險,若是引入了 Babel 的 polyfill,那就不用擔憂,不然就須要本身 polyfillbash
加上前綴,加上前綴,加上前綴。加完前綴不敢說 100% 支持吧,90% 仍是有保證的,尤爲是移動端。手動加是不可能手動加的,可以使用 autoprefixer 配合構建工具處理
這裏的1像素並不是1邏輯像素(也就是CSS像素),而是1物理像素,能夠採用縮放的方法實現,首先設置 width: 1px
,而後使用媒體查詢根據不一樣的dpr縮放不一樣的比例,貼一下 less 的實現
.one-x { height: 1px;}
.one-y { width: 1px; }
@dpr: 1.5, 2, 3;
@len: length(@dpr) + 1;
.genScale(@n: 1) when (@n < @len) {
@val: extract(@dpr, @n);
@media (min-device-pixel-ratio: @val) {
.one-x {
transform: scaleY(1/@val);
}
.one-y {
transform: scaleX(1/@val);
}
}
.-fix-less-compiler-bug- {
display: block;
}
.genScale(@n + 1);
}
.genScale();
複製代碼
IOS 直接使用 position: sticky
,安卓機型綁 scroll
事件。(須要提一句的是,IOS 的 scroll
事件觸發不連續,安卓對 sticky
的支持不太好。因此上面的方法是比較科學地)附上機型判斷代碼
const ua = window.navigator.userAgent.toLowerCase()
const isAndroid = /android/.test(ua)
const isIOS = /iphone|ipad|ipod/.test(ua)
複製代碼
data 的 key/value 鍵值對的 value 爲 undefined 時 jQuery 會直接不傳這一條,爲 null 時傳空字符串
就是不更新,就是不更新,就是不更新。這個官網還有寫了。這個和 Vue 監測數據變化的機制有關。Vue 沒法檢測到對象的新增屬性和 vm.arr[index] = newVal
這種方式更新的數組變化。可用如下方法觸發
vm.arr = [ ...vm.arr ]
vm.obj = { ...vm.obj }
複製代碼
加上 -webkit-overflow-scrolling: touch
加上 -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
加上 ::-webkit-scrollbar{ display: none }
---------------------------- 我是結束線 ----------------------------
暫時就這些了,更多的之後更新