第134天 移動web開發的一些總結(二)

2022-03-08 16:17:57 字數 4816 閱讀 3004

開發乙個頁面,在所有的裝置上都能夠完美展示。

print(印表機)

handheld(手持裝置)

all(通用)

width—— 視口寬高

height—— 視口寬高

device-width—— 裝置的寬高

device- height—— 裝置的寬高

orientation:檢查裝置處於橫向(landscape)還是豎屏(portrait)

設計點一:百分比布局

僅僅使用**查詢來適應不同固定寬度設計,只會從一組css到另一組css的切換。兩種設計之間沒有任何平滑漸變。只使用**查詢,布局有時會變得不可控制。

當然,這只是建議,也有一些頁面採用固定布局的情況下能夠很好的在一些沒有考慮過**查詢情況下的裝置上很好的展示。

img

設計點三:重新布局,顯示與隱藏

當頁面達到手機螢幕寬度的時候,很多時候就要放棄一些傳統的頁面設計思想。力求頁面簡單,做如下處理:

① 同比例縮減元素尺寸

② 調整頁面結構布局

③ 隱藏冗餘的元素

經常需要切換位置元素使用【絕對定位】,減少重繪提高渲染效能。

關於響應式設計的思考:在移動web頁面上渲染,為了避免產生模糊,的寬度應該用物理畫素單位渲染,即是100 * 100的,應該使用100dp * 10dp。

width:(w_value/dpr)px;

height:(w_height/dpr)px;

(2) 一畫素邊框

同樣是retina螢幕下的問題,根本原因:1px使用2dp渲染。

border:0.5px;(錯誤),僅僅ios8可以使用

通用方案:scaley(0.5)

(3) 相對單位rem

為了適應各大螢幕的手機,px略顯固定,不能根據尺寸的大小而改變,使用相對單位更能體驗頁面相容性。

em:是根據父節點的font-size為相對單位

rem:是根據html的font-size為相對單位

em在多層巢狀下,變得非常難以維護,rem更加能作為全域性統一設定的度量

那麼,rem的基值設定為多少比較好?

回歸目的:為了適應各大手機螢幕

rem = screen.width / 20

不使用rem的情況:font-size

一般來講font-size是不應該使用rem的相對單位的。因為字型的大小是趨向於閱讀的實用性,並不適合於排版布局。

同理,趨向於一些固定的元素的特性。我們不使用rem而改為使用px去確保在不同螢幕上表現一致(跟rem的目的相反)。

(4) 多行文字溢位•••

單行文字溢位,對title類的使用非常多,而多行文字類,在詳情介紹則用的比較多。

1

//單行文字溢位…

2.inaline

7//多行文字溢位…

8.intwoline

對click事件say no

彈性滾動

上拉重新整理

tap事件基礎

touch觸控事件

下拉載入

300ms:

移動web頁面上的click事件響應都要慢上300ms

用300ms判斷是單擊還是雙擊

(1) tap基礎事件

300ms延遲怎麼破?tap事件代替click事件。自定義tao事件原理:

在touchstart、touchend的記錄時間、手指位置,在touchend時進行比較,如果手指位置為同一位置(或允許移動乙個非常小的位移值)且時間間隔較短(一般認為是200ms),且過程中未曾觸發過touchmove,即可認為觸發了手持裝置上的「click」,一般稱它為「tap」。

tap「點透」的bug:有兩層,點選第一層的時候,如果點選的區域在第二層的範圍內,那麼第二層也會被觸發。(原因與300ms有關)

tap透傳的解決方案:

①使用快取動畫,過渡300ms的延遲

②中間層dom元素的加入,讓中間層接收這個「穿透」事件,稍後隱藏

③「上下」都使用tap事件,原理上解決tap穿透事件,(但是不可避免原生標籤的click事件,如a,input)。

③ 改用fastclick的庫(聽過最新的zepto已經fixed掉這個bug)

(2) touch基礎事件

觸控才是移動裝置的互動的核心事件,支援多點觸控。

touchstart:手指觸控螢幕觸發(已經有手指放螢幕上不會出發)

touchmove:手指在螢幕上滑動,連續觸發

touchend:手指離開螢幕時觸發

touchcancel:系統取消touch時候觸發(不常用)eg:滑動頁面時來了乙個**或者其他系統事件

除常見的事件屬性外,觸控事件包含專有的觸控屬性:

touches:跟蹤觸控操作的touch物件陣列

targettouches:特定事件目標的touch物件陣列

changetouches:上次觸控改變的touch物件陣列

乙個小bug:android只會觸發一次touchstart,一次touchmove,touchend不觸發。(4.0,4.1有,4.2修復沒有了,4.4開始又出現了)

解決方案:在touchmove中加入:event.preventdefault(),可fixedbug。

但注意:event.preventdefault()會導致預設行為不發生,如scroll,導致頁面不滾動!如果頁面帶有滾動條,就需要考慮更換解決方案。

(3) 彈性滾動,下拉重新整理

①彈性滾動:當客戶端的頁面滾動到頂部或底部的時候,滾動條會收縮並讓我們多滑動一定距離。通過緩衝**的效果,帶給使用者良好的體驗。

移動web頁面也是擁有這樣的能力的,但滾動有幾種情況需要考慮:

body層滾動:(系統特殊化處理)

自帶彈性滾動,overflow:hidden失效,gif和定時器暫停。

區域性滾動:沒有彈性滾動,沒有滾動慣性,不流暢。

區域性滾動開啟彈性滾動:

body

但注意:android不支援原生的彈性滾動!但可以借助三方庫iscroll來實現

②下拉重新整理:頂端下拉一小點距離,頁面彈性滾動向下。

④ 上拉載入:使用scroll事件,而不是touch事件(android有bug)

(4) canvas & gpu render【gpu 渲染】

優化技巧:canvas代替img標籤

drawimage(image,x,y);canvas上繪製

drawimage(image,x,y,width,height);canvas上繪製縮放

image object:

(5) css3 animation

當乙個css3動畫結束時,我們可以監聽相關事件animationend,比如對於webkit來說,是webkitanimationend。

(1) 移動優先:

① 移動端的使用者和流量越來越多

② 各種螢幕讓我們更聚焦業務的本領

③ 移動裝置有更先進的人機互動體驗

(2) 多終端檢測

(3) 介面:結構:通用介面,

介面模型:前端消費者;後端生產者;測試監督者

1)css3動畫,代替dom animation,效率更高,因為css3直接使用瀏覽器的gpu(圖形處理器)渲染

2) 當你給乙個元素設定它的百分比寬度的時候,他需要乙個比照,也就是父元素,但是當它沒有父的時候,需要給他乙個絕對定位absolute值,但是在移動開發中,給整個整塊的頁面使用position: absolute;很占用記憶體,特別是當內容比較多的時候,會非常明顯。會有幾個後果:在ios下,會導致瀏覽器直接崩潰掉;在android下,會導致非常非常的卡。所以建議直接用js計算。

3)將顯示到一排上,不使用浮動,使用-webkit-transform:translate3d(0,0,0); position: absolute;

4)new date() * 1;// * 1 ,進行數值運算,轉換為數字形式的時間戳

5)

self.startx = evt.touches[0].pagex; //

記錄開始的位移,touches包含著所有手指觸控在螢幕上的點的集合

-webkit-backface-visibility:hidden;/*

防止閃白

*/

8)2048製作過程中遇到的bug:(見9(2)touch基礎事件bug)

//

手機上手指識別無用,chrome19827號錯誤:touchevent不被觸發。防止沒有正確使用preventdefault()

document.addeventlistener('touchmove', function

(event) );

移動web開發中遇到的一些問題收納

window.scrolly window.scrollx桌面瀏覽器中想要獲取滾動條的值是通過document.scrolltop和document.scrollleft得到的,但在ios中你會發現這兩個屬性是未定義的,為什麼呢?因為在ios中沒有滾動條的概念,在android中通過這兩個屬性可以正...

一些Web開發工具

php 之前用過eclipse很久,當時也是唯一的選擇,不過現在看來是非常不好的選擇。netbeans和phpstorm都是很優秀的選擇。乙個細節 單元測試唯一可用的就是phpunit,但是適合的場景是 工具類 即不怎麼依賴其他外部資源 適配過的框架 如yaf,yii,官方有定製版的phpunit ...

web開發快取的一些了解

最近面試中又問道web開發後台快取的一些東西,以前這片幾乎是盲區所有有必要整理一些。快取 基本思路 將短時間內重複頻繁訪問的內容 或通過計算得出的內容 儲存在乙個更容易訪問的位置,方便下次訪問請求到來時直接取出 結果 總之是減少計算次數 或訪問次數。快取 基本原則 需要有大量的 頻繁的對同型別資源的...