京東M站

一.什么是M站?

  • 適用于在手機瀏覽器上瀏覽的互聯(lián)網(wǎng)WEB網(wǎng)站,也叫移動網(wǎng)頁端;
  • 運行原理: 手機上的Safari瀏覽器/UC瀏覽器/百度瀏覽器/QQ瀏覽器通過Webkit內(nèi)核去加載我們寫好的 Html5和css 文件.
  • 什么是WebKit內(nèi)核?
    • WebKit其實就是一個瀏覽器的內(nèi)置引擎,比如火狐的Gecko和IE的Trident;
    • WebKit內(nèi)置兩大引擎:WebCore排版引擎和JSCore引擎;
    • WebKit優(yōu)勢:1.高效穩(wěn)定,2.兼容性好,3.且源碼結(jié)構(gòu)清晰,易于維護;
    • Apple的Safari,Google的Chrome都是基于WebKit,當然Google有更好的V8引擎進行支撐;
    • WebKit內(nèi)核在手機上應用十分廣泛,像Google的Android/Apple的iPhone所使用的Browser內(nèi)核引擎,都是基于WebKit.
  • 哪些公司需要M站?

二.電商類型的M站首頁布局特點

  • 五部分:從上往下依次是 導航搜索頭部,無限輪播banner圖,產(chǎn)品分類索引,產(chǎn)品中心,tabBar選項卡
Snip20170517_4.png
  • 產(chǎn)品中心從上而下又分三部分:秒殺/各種類型/推薦
Snip20170517_5.png

三.京東商城M站課程安排

  • 總體目標:

    • 首頁
    • 商品分類頁
    • 購物車
  • 技術要求:

    • 原生HTML+CSS+JS實現(xiàn)
  • 技術難點: 移動設備的適配

    • 屏幕適配與布局
    • 設備控制與交互
    • 性能優(yōu)化
  • 運行在移動端的M站如何解決屏幕適配?

    • 媒體查詢:使用多套css布局
    • 通過rem代替px進行布局
    • flex彈性布局
    • 百分比布局(流體布局),京東商城M站采用百分比自適應適配
 - 優(yōu)點
1. 流動布局頁面對用戶更友好涣易,因為它能自適應用戶的設置著觉。 
2. 頁面周圍的空白區(qū)域在所有分辨率和瀏覽器下都是相同的箭券,在視覺上更美觀。 
3. 如果設計良好,流動布局可以避免在小分辨率下出現(xiàn)水平滾動條。
 - 缺點
1. 設計者更難控制用戶所見,并可能忽略掉一些錯誤,因為在特定的分辨率下看起來好的辟汰; 
2. 圖片,視頻以及其他設置了寬度的內(nèi)容可能需要多種寬度以適應不同分辨率的用戶阱佛; 
3. 在特別大的分辨率下帖汞,內(nèi)容會被拉成長長的一行,變得難以閱讀凑术; 
4. 會有畫面失真問題
  • 關鍵點: 視口ViewPort

3.1. 基礎概念

3.1.1 像素單位
pixel - px ( picture element )

dpi / ppi - 每英寸像素 ( dot per inch )

dips - 設備獨立像素 ( device-independent pixels )

devicePixelRatio - 物理像素 / 設備獨立像素 
  • 在移動端瀏覽器中以及某些桌面瀏覽器中翩蘸,可通過window.devicePixelRatio
    獲取 設備物理像素和設備獨立像素的比例, devicePixelRatio = 物理像素 / 獨立像素
    比如在4s上,值為2. (注意,devicePixelRatio在不同的瀏覽器中還存在些許的兼容性問題,參考)

四.ViewPort(參考)

在移動設備上進行網(wǎng)頁的重構(gòu)或開發(fā)淮逊,首先得搞明白的就是移動設備上的viewport了催首,只有明白了viewport的概念以及弄清楚了跟viewport有關的meta標簽的使用,才能更好地讓我們的網(wǎng)頁適配或響應各種不同分辨率的移動設備泄鹏。

  • Define ViewPort:
    • 通俗的講郎任,移動設備上的viewport就是設備的屏幕上能用來顯示我們的網(wǎng)頁的那一塊區(qū)域,在具體一點备籽,就是瀏覽器上(也可能是一個app中的webview)用來顯示網(wǎng)頁的那部分區(qū)域舶治,但viewport又不局限于瀏覽器可視區(qū)域的大小,它可能比瀏覽器的可視區(qū)域要大车猬,也可能比瀏覽器的可視區(qū)域要小歼疮。
    • 在默認情況下,一般來講诈唬,移動設備上的viewport都是要大于瀏覽器可視區(qū)域的,這是因為考慮到移動設備的分辨率相對于桌面電腦來說都比較小.
    • 為了能在移動設備上正常顯示那些傳統(tǒng)的為桌面瀏覽器設計的網(wǎng)站缩麸,移動設備上的瀏覽器都會把自己默認的viewport設為980px或1024px(也可能是其它值铸磅,這個是由設備自己決定的),但帶來的后果就是瀏覽器會出現(xiàn)橫向滾動條杭朱,因為瀏覽器可視區(qū)域的寬度是比這個默認的viewport的寬度要小的阅仔。
    • 下圖列出了一些設備上瀏覽器的默認viewport的寬度。


      viewpoint_01.png
  • 在M站中統(tǒng)一對ViewPort進行控制
    • 在head標簽中寫入: meta:vp+tab鍵,即可得到
<meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
// 該meta標簽的作用是讓當前viewport的寬度等于設備的寬度弧械,同時不允許用戶手動縮放八酒,這樣就不會出現(xiàn)橫向滾動條。
* *initial-scale*

初始縮放刃唐。即頁面初始縮放程度羞迷。這是一個浮點值界轩,是頁面大小的一個乘數(shù)。
* maximum-scale
最大縮放衔瓮。即允許的最大縮放程度浊猾。這也是一個浮點值,用以指出頁面大小與屏幕大小相比的最大乘數(shù)
* user-scalable
用戶調(diào)整縮放热鞍。即用戶是否能改變頁面縮放程度葫慎。如果設置為yes則是允許用戶對其進行改變,反之為no薇宠。默認值是yes偷办。如果你將其設置為no,那么minimum-scale 和 maximum-scale都將被忽略澄港,因為根本不可能縮放椒涯。

  • 部分M站(eg.淘寶)會根據(jù)屏幕真實分別率設置initial-scale,比如@2x的0.5,@3x的0.33

  • 由于手機型號眾多,完全適配所有的成本非常大,最終取舍方案為:寬度范圍在300px~640px取舍

五.京東首頁

  • 清除移動端設備默認的點擊高亮效果
    • iOS設備與大部分Android設備(效果有差別)
    • 點擊一個鏈接或者通過Javascript定義的可點擊元素的時候,它就會出現(xiàn)一個半透明的灰色背景
    • 重設這個表現(xiàn)慢睡,你可以設置-webkit-tap-highlight-color:rgba()逐工。
      想要禁用這個高亮
-webkit-tap-highlight-color: transparent;
  • 針對iOS設備的默認扁平化UI
/* 去除iOS默認的一些非扁平化控件效果(風格不符合不如不要) */
    -webkit-appearance: none;
  • on與addEvenListener的區(qū)別
        /* OnClick方法會被覆蓋,也就是多次執(zhí)行只會執(zhí)行一次,
         * addEventListener不會被覆蓋,會全部觸發(fā),執(zhí)行的是冒泡規(guī)則
          * element.addEventListener(event, function, useCapture)
          * event   必須。字符串漂辐,指定事件名泪喊。
(注意: 不要使用 "on" 前綴。 
例如髓涯,使用 "click" ,而不是使用 "onclick"袒啼。 )
          * function    必須。指定要事件觸發(fā)時執(zhí)行的函數(shù)纬纪。 
(當事件對象會作為第一個參數(shù)傳入函數(shù)蚓再。 事件對象的類型取決于特定的事件。
例如包各, "click" 事件屬于 MouseEvent(鼠標事件) 對象摘仅。)
          * useCapture  可選。布爾值问畅,指定事件是否在捕獲或冒泡階段執(zhí)行娃属。
(可能值: true - 事件句柄在捕獲階段執(zhí)行;false- false- 默認。
事件句柄在冒泡階段執(zhí)行)
          * */
  • 移動web開發(fā)常用事件

    • Touch事件

      • touchstart 當手指觸碰屏幕的時候觸發(fā)护姆,不管當前有多少只手指矾端。
      • touchmove 當手指在屏幕中滑動時候連續(xù)觸發(fā)。移動端在用這個事件的時候通常會調(diào)用 e.preventDefault()來阻止默認觸發(fā)的頁面滾動事件卵皂。
      • touchend 當手指離開屏幕的時候觸發(fā)秩铆。
      • touchcancel 系統(tǒng)停止跟蹤觸摸時候會觸發(fā)。
    • 觸摸點:我們可以通過事件的event獲取需要的相關觸摸點信息

      • targetTouches 目標元素的所有當前觸摸點
      • changedTouches 頁面上最新更改的所有觸摸點
      • touches 頁面上的所有觸摸點 touches[0]
    • 在每個觸摸點中我們可以獲取以下屬性
      - clientX:觸摸目標在視口中的X坐標灯变。
      - clientY:觸摸目標在視口中的Y坐標殴玛。
      - pageX:觸摸目標在頁面中的x坐標捅膘。
      - pageY:觸摸目標在頁面中的y坐標。
      - screenX:觸摸目標在屏幕中的x坐標族阅。
      - screenY:觸摸目標在屏幕中的y坐標篓跛。
      - target:觸摸的DOM節(jié)點坐標。

  • Gesture 事件(不常用)
    - gesturestart 當一個手指觸摸屏幕之后坦刀,第二個手指再觸摸屏幕時觸發(fā)愧沟。
    - gesturechange 當上面的事件觸發(fā)后立即觸發(fā)。
    - gestureend 第二根手指離開屏幕時觸發(fā)鲤遥,之后將不會再次觸發(fā)gesturechange沐寺。
    - 在event當中會返回另外兩個參數(shù): scale 根據(jù)兩個手指的滑動距離計算的縮放比例 初始1,rotation根據(jù)兩個手指的滑動距離計算的旋轉(zhuǎn)角度 初始 0盖奈。

  • 過渡和動畫結(jié)束事件
    - transitionEnd 過渡結(jié)束后觸發(fā)混坞。
    - animationEnd 動畫結(jié)束后觸發(fā)
  • 首頁的三個JS效果
    • 1.頭部透明度:
alpha取值范圍:[0,0.8];
UI作用范圍: body.scrollTop在[0, bannerH]之間
  • 2.焦點圖: 業(yè)務邏輯主要分兩部分
    • 自動無限輪播:
1.定時器每秒過渡滾動一次
2.過渡結(jié)束后:
      index范圍判斷,若滾動到邊界則進行index轉(zhuǎn)移以及非過渡位移
      切換白點
  • 手勢滑動
1.手勢開始時停止計時器
2.滑動手勢期間:
        - 清除默認事件event.preventDefault
        - 非過渡滾動:切換x值=當前x值+movedX
3.手勢結(jié)束
        - 根據(jù)movedX,確定index--/++or不動,并過渡翻頁
        - 重啟定時器
        - 數(shù)據(jù)重置(optional)
  • 3.秒殺倒計時
假設 每天3場搶購 0點場 8點場 16點場
當前處于 1.x點場 2.離下一場還剩多少時間 3.每秒展示一次

六、分類板塊

  • 讓按鈕占據(jù)足夠大的空間钢坦,方便用戶點擊

      padding: 12px 10px;
      /* 背景圖相對于內(nèi)容框來定位 */
      -webkit-background-clip: content-box;
      background-clip: content-box;
      /* 背景圖定位從內(nèi)容開始計算 */
      -webkit-background-origin: content-box;
      background-origin: content-box;
    
  • 分類左邊內(nèi)容

<ul id="category_list">
            <li class="current"><a href="javascript:;">家用電器</a></li>
            <li><a href="javascript:;">電腦辦公</a></li>
            <li><a href="javascript:;">手機數(shù)碼</a></li>
            <li><a href="javascript:;">母嬰童裝</a></li>
            <li><a href="javascript:;">圖書</a></li>
            <li><a href="javascript:;">家居家紡</a></li>
            <li><a href="javascript:;">廚房用品</a></li>
            <li><a href="javascript:;">家居建材</a></li>
            <li><a href="javascript:;">食品生鮮</a></li>
            <li><a href="javascript:;">酒水飲料</a></li>
            <li><a href="javascript:;">運動戶外</a></li>
            <li><a href="javascript:;">鞋靴箱包</a></li>
            <li><a href="javascript:;">奢品禮品</a></li>
            <li><a href="javascript:;">鐘表珠寶</a></li>
            <li><a href="javascript:;">玩具樂器</a></li>
            <li><a href="javascript:;">內(nèi)衣配飾</a></li>
            <li><a href="javascript:;">汽車用品</a></li>
            <li><a href="javascript:;">音像制品</a></li>
            <li><a href="javascript:;">醫(yī)藥保健</a></li>
            <li><a href="javascript:;">計生情趣</a></li>
            <li><a href="javascript:;">全球購</a></li>
            <li><a href="javascript:;">京東金融</a></li>
            <li><a href="javascript:;">生活旅行</a></li>
            <li><a href="javascript:;">寵物農(nóng)資</a></li>
        </ul>
  • 分類交互效果
    • 1.左邊的手勢滑動與手勢點擊
手勢滑動: 理解 ul的top值合理區(qū)間與合理運動區(qū)間
注意點1: touchmove期間,只能在合理區(qū)間與buffer區(qū)間ul移動
注意點2: touchend期間,buffer區(qū)間內(nèi)則過渡回到正常邊界,在合理區(qū)間內(nèi)則保持不動

手勢點擊:先封裝tap
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末究孕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爹凹,更是在濱河造成了極大的恐慌厨诸,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禾酱,死亡現(xiàn)場離奇詭異微酬,居然都是意外死亡,警方通過查閱死者的電腦和手機颤陶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門颗管,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滓走,你說我怎么就攤上這事垦江。” “怎么了搅方?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵疫粥,是天一觀的道長。 經(jīng)常有香客問我腰懂,道長,這世上最難降的妖魔是什么项秉? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任绣溜,我火速辦了婚禮,結(jié)果婚禮上娄蔼,老公的妹妹穿的比我還像新娘怖喻。我一直安慰自己底哗,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布锚沸。 她就那樣靜靜地躺著跋选,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哗蜈。 梳的紋絲不亂的頭發(fā)上前标,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音距潘,去河邊找鬼炼列。 笑死,一個胖子當著我的面吹牛音比,可吹牛的內(nèi)容都是我干的俭尖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼洞翩,長吁一口氣:“原來是場噩夢啊……” “哼稽犁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骚亿,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤已亥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后循未,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陷猫,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年的妖,在試婚紗的時候發(fā)現(xiàn)自己被綠了绣檬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫂粟,死狀恐怖娇未,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情星虹,我是刑警寧澤零抬,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站宽涌,受9級特大地震影響平夜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卸亮,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一忽妒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦段直、人聲如沸吃溅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽决侈。三九已至,卻和暖如春喧务,著一層夾襖步出監(jiān)牢的瞬間赖歌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工蹂楣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俏站,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓痊土,卻偏偏與公主長得像肄扎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赁酝,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原文地址 在移動設備上進行網(wǎng)頁的重構(gòu)或開發(fā)犯祠,首先得搞明白的就是移動設備上的viewport了,只有明白了viewp...
    matthewm閱讀 1,555評論 0 4
  • 連載小說 (一) 落馬鎮(zhèn)的酒出名酌呆,烈的很衡载,連鎮(zhèn)東頭的李寡婦最多也只能喝上兩大碗。每次李寡婦喝完酒隙袁,李寡婦都會故意不...
    我有6個男神閱讀 184評論 0 0
  • 兩情若是長久時痰娱,又豈在朝朝暮暮 。我們的感情是屬于那種長久的不行的菩收,畢竟現(xiàn)在我想不到任何不好的理由梨睁,所以以后的日子...
    繁意閱讀 279評論 0 0
  • 最近在使用微信的時候不小心刪除了和朋友的對話框坡贺,之前的聊天記錄就沒有了,就在懊惱之際箱舞,突然筆者腦洞大開遍坟,為什么QQ...
    芥子未末閱讀 631評論 0 2
  • ——故事發(fā)生在美人和KO確定關系之后 ”KO,我們一會下班去吃上次說的那家中餐好不好晴股≡赴椋” ”嗯” ”看看,這有家室...
    插秧少年v閱讀 199評論 0 0