乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      移動web問題小結(jié) | Web前端 騰訊AlloyTeam Blog | 愿景: 成為地球卓越的Web團隊!

       JhouShuai 2016-04-03

      原文地址:http://www./2015/06/yi-dong-web-wen-ti-xiao-jie/#comments

      Meta標簽:

      1
      <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />

      這個想必大家都知道,當頁面在手機上顯示時,增加這個meta可以讓頁面強制讓文檔的寬度與設備的寬度保持1:1,并且文檔最大的寬度比例是1.0,且不允許用戶點擊屏幕放大瀏覽。

      1
      2
      <meta content="telephone=no" name="format-detection" />
      <meta content="email=no" name="format-detection" />

      這兩個屬性分別對ios上自動識別電話和android上自動識別郵箱做了限制。

       

       獲取滾動條的值:

      1
      window.scrollY  window.scrollX

      桌面瀏覽器中想要獲取滾動條的值是通過document.scrollTop和document.scrollLeft得到的,但在iOS中你會發(fā)現(xiàn)這兩個屬性是未定義的,為什么呢?因為在iOS中沒有滾動條的概念,在Android中通過這兩個屬性可以正常獲取到滾動條的值,那么在iOS中我們該如何獲取滾動條的值呢?就是上面兩個屬性,但是事實證明android也支持這屬性,所以索性都用woindow.scroll.

       

      禁止選擇文本:

      1
      -webkit-user-select:none

      禁止用戶選擇文本,ios和android都支持

       

      屏蔽陰影:

      1
      -webkit-appearance:none

      親測,可以同時屏蔽輸入框怪異的內(nèi)陰影,解決iOS下無法修改按鈕樣式,測試還發(fā)現(xiàn)一個小問題就是,加了上面的屬性后,iOS下默認還是帶有圓角的,不過可以使用 border-radius屬性修改。

       

       css之border-box:

      1
      2
      3
      4
      5
      6
      7
      element{
              width: 100%;
              padding-left: 10px;
              box-sizing:border-box;
              -webkit-box-sizing:border-box;
              border: 1px solid blue;
      }

      那我想要一個元素100%顯示,又必須有一個固定的padding-left/padding-right,還有1px的邊框,怎么辦?這樣編寫代碼必然導致出現(xiàn)橫向滾動條,腫么辦?要相信問題就是用來解決的。這時候偉大的css3為我們提供了box-sizing屬性,對于這個屬性的具體解釋不做贅述(想深入了解的同學可以到w3school查看,要知道自己動手會更容易記憶)。讓我們看看如何解決上面的問題:

       

       css3多文本換行:

      1
      2
      3
      4
      5
      6
      7
      p {
          overflow : hidden;
          text-overflow: ellipsis;
          display: -webkit-box;
          -webkit-line-clamp: 2;
          -webkit-box-orient: vertical;
      }

      Webkit支持一個名為-webkit-line-clamp的屬性,參見鏈接,也就是說這個屬性并不是標準的一部分,可能是Webkit內(nèi)部使用的,或者被棄用的屬性。需要注意的是display需要設置成box,-webkit-line-clamp表示需要顯示幾行。

       

       Retina屏幕高清圖片:

      1
      2
      3
      4
      selector {
        background-image: url(no-image-set.png);
        background: image-set(url(foo-lowres.png) 1x,url(foo-highres.png) 2x) center;
      }

      image-set的語法,類似于不同的文本,圖像也會顯示成不同的:

      1.  不支持image-set:在不支持image-set的瀏覽器下,他會支持background-image圖像,也就是說不支持image-set的瀏覽器下,他們解析background-image中的背景圖像;
      2.  支持image-set:如果你的瀏覽器支持image-sete,而且是普通顯屏下,此時瀏覽器會選擇image-set中的@1x背景圖像;
      3.  Retina屏幕下的image-set:如果你的瀏覽器支持image-set,而且是在Retina屏幕下,此時瀏覽器會選擇image-set中的@2x背景圖像。

       

       

       html5重力感應事件:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      if (window.DeviceMotionEvent) {
                       window.addEventListener('devicemotion',deviceMotionHandler, false);  
              }
              var speed = 30;//speed
              var x = y = z = lastX = lastY = lastZ = 0;
              function deviceMotionHandler(eventData) {  
                var acceleration =event.accelerationIncludingGravity;
                      x = acceleration.x;
                      y = acceleration.y;
                      z = acceleration.z;
                      if(Math.abs(x-lastX) > speed || Math.abs(y-lastY) > speed || Math.abs(z-lastZ) > speed) {
                          //簡單的搖一搖觸發(fā)代碼
                          alert(1);
                      }
                      lastX = x;
                      lastY = y;
                      lastZ = z;
              }

      關(guān)于deviceMotionEvent是HTML5新增的事件,用來檢測手機重力感應效果具體可參考http://w3c./deviceorientation/spec-source-orientation.html

       

      移動端touch事件:

      • touchstart //當手指接觸屏幕時觸發(fā)
      • touchmove //當已經(jīng)接觸屏幕的手指開始移動后觸發(fā)
      • touchend //當手指離開屏幕時觸發(fā)
      • touchcancel//當某種touch事件非正常結(jié)束時觸發(fā)

      這4個事件的觸發(fā)順序為:

      touchstart -> touchmove ->  touchend ->touchcancel

      對于某些android系統(tǒng)touch的bug:

      比如手指在屏幕由上向下拖動頁面時,理論上是會觸發(fā) 一個 touchstart ,很多次 touchmove ,和最終的 touchend ,可是在android 4.0上,touchmove只被觸發(fā)一次,觸發(fā)時間和touchstart 差不多,而touchend直接沒有被觸發(fā)。這是一個非常嚴重的bug,在google Issue已有不少人提出 ,這個很蛋疼的bug是在模擬下拉刷新是遇到的尤其當touchmove的dom節(jié)點數(shù)量變多時比出現(xiàn),當時解決辦法就是用settimeout來稀釋touchmove。

       

      單擊延遲:

      click 事件因為要等待雙擊確認,會有 300ms 的延遲,體驗并不是很好。

      開發(fā)者大多數(shù)會使用封裝的 tap 事件來代替click 事件,所謂的 tap 事件由 touchstart 事件 + touchmove 判斷 + touchend 事件封裝組成。

      Creating Fast Buttons for Mobile Web Applications

      Eliminate 300ms delay on click events in mobile Safari

       

      IOS里面fixed的文本框焦點居中

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      <!DOCTYPE html>
          <head>
          input {
             position:fixed;
             top:0;left:0;
          }
          </head>
          <body>
              <div class="header">
                  <form action="">
                      <label>Testfield: <input type="text" /></label>
                  </form>
              </div>
          </body>
      </html>

      在ios里面,當一個文本框的樣式為fixed時候,如果這個文本框獲得焦點,它的位置就會亂掉,由于ios里面做了自適應居中,這個fixed的文本框會跑到頁面中間。類似:

       

      解決辦法有兩個:

      可以在文本框獲得焦點的時候?qū)ixed改為absolute,失去焦點時在改回fixed,但是這樣會讓屏幕有上下滑動的體驗不太好。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      .fixfixed {
      position:absolute;
      }
      $(document)
          .on('focus', 'input', function(e) {
              $this.addClass('fixfixed');
          })
          .on('blur', 'input', function(e) {
              $this.removeClass('fixfixed');
          });

       

      還有一種就是用一個假的fixed的文本框放在頁面頂部,一個absolute的文本框隱藏在頁面頂部,當fixed的文本框獲得焦點時候?qū)⑵潆[藏,然后顯示absolute的文本框,當失去焦點時,在把absolute的文本框隱藏,fixed的文本框顯示。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      .fixfixed {
      position:absolute;
      }
      $(document)
          .on('focus', 'input', function(e) {
              $absolute..show();
              $this.hide();
          })
          .on('blur', 'input', function(e) {
               $fixed..show();
              $this.hide();
          });

       

      最后一種就是頂部的input不參與滾動,只讓其下面滾動。

       

      position:sticky

      position:sticky是一個新的css3屬性,它的表現(xiàn)類似position:relative和position:fixed的合體,在目標區(qū)域在屏幕中可見時,它的行為就像position:relative; 而當頁面滾動超出目標區(qū)域時,它的表現(xiàn)就像position:fixed,它會固定在目標位置。

      1
      2
      3
      4
      5
      .sticky {
      position: -webkit-sticky;
      position:sticky;
      top: 15px;
      }

      瀏覽器兼容性

      由于這是一個全新的屬性,以至于到現(xiàn)在都沒有一個規(guī)范,W3C也剛剛開始討論它,而現(xiàn)在只有webkit nightly版本和chrome 開發(fā)版(Chrome 23.0.1247.0+ Canary)才開始支持它。

      另外需要注意的是,如果同時定義了left和right值,那么left生效,right會無效,同樣,同時定義了top和bottom,top贏~~

      移動端點透事件

      簡單的說,由于在移動端我們經(jīng)常會使用tap(touchstart)事件來替換掉click事件,那么就會有一種場景是:

      1
      2
      3
      <div id="mengceng"></div>
      <a href="www.qq.com">www.qq.com</a>

      div是絕對定位的蒙層z-index高于a,而a標簽是頁面中的一個鏈接,我們給div綁定tap事件:

      1
      2
      3
      $('#mengceng').on('tap',function(){
      $('#mengceng').hide();
      });

      我們點擊蒙層時 div正常消失,但是當我們在a標簽上點擊蒙層時,發(fā)現(xiàn)a鏈接被觸發(fā),這就是所謂的點透事件。

      原因:

      touchstart 早于 touchend 早于 click。亦即click的觸發(fā)是有延遲的,這個時間大概在300ms左右,也就是說我們tap觸發(fā)之后蒙層隱藏,此時click還沒有觸發(fā),300ms之后由于蒙層隱藏,我們的click觸發(fā)到了下面的a鏈接上。

      解決辦法:

      1 盡量都使用touch事件來替換click事件。

      2 阻止a鏈接的click的preventDefault

       

      base64編碼圖片替換url圖片

      u在移動端,網(wǎng)絡請求是很珍貴的資源,尤其在2g或者3g網(wǎng)絡下,所以能不發(fā)請求的資源都盡量不要發(fā),對于一些小圖片icon之類的,可以將圖片用base64編碼,來減少網(wǎng)絡請求。

       

      手機拍照和上傳圖片

      <input type="file">的accept 屬性

      1
      2
      3
      4
      <!-- 選擇照片 -->
      <input type=file accept="image/*">
      <!-- 選擇視頻 -->
      <input type=file accept="video/*">

       

      動畫效果時開啟硬件加速

      我們在制作動畫效果時經(jīng)常會想要改版元素的top或者left來讓元素動起來,在pc端還好但是移動端就會有較大的卡頓感,這么我們需要使用css3的  transform: translate3d;來替換,

      此效果可以讓瀏覽器開啟gpu加速,渲染更流暢,但是筆著實驗時在ios上體驗良好,但在一些低端android機型可能會出現(xiàn)意想不到的效果。

       

      快速回彈滾動

      在iOS上如果你想讓一個元素擁有像 Native 的滾動效果,你可以這樣做:

      1
      2
      3
      4
      .div {
              overflow: auto;
              -webkit-overflow-scrolling: touch;
          }

      經(jīng)筆著測試,此效果在不同的ios系統(tǒng)表現(xiàn)不一致,

      對于局部滾動,ios8以上,不加此效果,滾動的超級慢,ios8一下,不加此效果,滾動還算比較流暢

      對于body滾動,ios8以上,不加此效果同樣擁有彈性滾動效果。

       

      持續(xù)更新中。。

      ios和android局部滾動時隱藏原生滾動條

      android

      1
      2
      3
      ::-webkit-scrollbar{
          opacity: 0;
      }

      ios

      使用一個稍微高一些div包裹住這個有滾動條的div然后設置overflow:hidden擋住之

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      .wrap{
          height: 100px;
          overflow: hidden;
      }
      .box{
          width: 100%;
          height: -webkit-calc(100% + 5px);
          overflow-x: auto;
          overflow-y: hidden;
          -webkit-overflow-scrolling: touch;
      }
      <div class="wrap">
          <div class="box"></div>
      </div>

      設置placeholder時候 focus時候文字沒有隱藏

      1
      2
      3
      input:focus::-webkit-input-placeholder{
          opacity: 0;
      }

      移動端不同的input對應不同的鍵盤展示樣式

      ios —- android

      type email

      type url

      type tel

      type search

       

      background-image和image的加載區(qū)別

      在網(wǎng)頁加載的過程中,以css背景圖存在的圖片background-image會等到結(jié)構(gòu)加載完成(網(wǎng)頁的內(nèi)容全部顯示以后)才開始加載,而html中的標簽img是網(wǎng)頁結(jié)構(gòu)(內(nèi)容)的一部分會在加載結(jié)構(gòu)的過程中加載,換句話講,網(wǎng)頁會先加載標簽img的內(nèi)容,再加載背景圖片background-image,如果你用引入了一個很大的圖片,那么在這個圖片下載完成之前,img后的內(nèi)容都不會顯示。而如果用css來引入同樣的圖片,網(wǎng)頁結(jié)構(gòu)和內(nèi)容加載完成之后,才開始加載背景圖片,不會影響你瀏覽網(wǎng)頁內(nèi)容。

      未完待續(xù)

      參考資料:http://www./index.php/archives/455

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多