移动端适配&常见问题

2017-10-26  本文已影响0人  悲欢自饮丶

适配

meta标签

什么是适配?为什么要做适配?

三种适配方案

rem

rem适配

(function(){
    var styleNode = document.createElement('style');
    var width = document.documentElement.clientWidth /16;
    styleNode.innerHTML="html{font-size:"+ width +"px !important}"
    document.head.appendChild(styleNode);
})()

设计图的要法

viewport适配

如何实现一物理像素的适配方案

  (function(){
    var dpr = window.devicePixelRatio||1
    var styleNode = document.createElement('style');
    var width = document.documentElement.clientWidth *dpr /16;
    styleNode.innerHTML="html{font-size:"+ width +"px !important}";
    document.head.appendChild(styleNode);

    var scale = 1/dpr;
    var metaNode = document.querySelector("meta[name = 'viewport']");
    metaNode.setAttribute("content","width=device-width,initial-scale=" + scale +",user-scalable=no");
  })()

移动端事件

querySelector的坑

触屏事件

全面禁止移动端默认事件

  document.addEventListener('touchstart',function(ev){
    ev= ev||event
    //return false dom0的禁止默认行为
    ev.preventDefault();//dom2的禁止默认行为
  })

自定义右键菜单

  var wrap = document.querySelector('#wrap');
  wrap.style.display ="none"
  document.oncontextmenu = function(ev){
    ev = ev||event;
    var x = ev.clientX;
    var y = ev.clientY;

    wrap.style.left = x+'px';
    wrap.style.top = y+'px';

    wrap.style.display ="block"
    ev.preventDefault();
  }

  document.onclick = function(ev){
    ev = ev||event;
    wrap.style.display ="none"
  }

移动端的坑(事件点透)

    var aNodes = document.querySelectorAll('a');
        document.addEventListener('touchstart',function(ev)){
            ev=ev||event;
            ev.preventDefault();
        }

        for(var i=0;i<aNodes.length;i++){
            aNodes[i].addEventListener('touchstart',function(ev){
                this.ismoved = false;
            })

            aNodes[i].addEventListener('touchmove',function(ev){
                if(!this.ismoved){
                    this.ismoved = true
                }
            })

            aNodes[i].addEventListener('touchend',function(ev){
                if(this.ismoved){
                    return
                }
                window.location.href = this.href;
            })
        }

移动端的其他事件

    testNode.addEventListener('touchend',function(ev){
            ev= ev||event;
            setTimeout(function(){
                testNode.innerHTML = "changed:"+ev.changedTouches.length+"<br>"+"target:"+ev.targetTouches.length
                +"<br>"+"touches:"+ev.touches.length;
            },200)
        })

移动端模板

  document.addEventListener('touchstart',function(ev){
    ev= ev||event;
    ev.preventDefault()
  })

  (function(){
    var styleNode = document.createElement('style');
    var width = document.documentElement.clientWidth /16;
    styleNode.innerHTML = "html{font-size:"+width+"px !important}"
    document.head.appendChild(styleNode);
  })()

移动端常见问题

上一篇 下一篇

猜你喜欢

热点阅读