手机端怎么通过js设置viewport

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手机端怎么通过js设置viewport相关的知识,希望对你有一定的参考价值。

首先你要设置meta viewport属性。
<meta name="viewport" content="width=device-width, target-densityDpi=device-dpi, user-scalable=yes">

然后再JS代码中设置如下代码
var viewport = document.querySelector("meta[name=viewport]");
var winWidths=$(window).width();
var densityDpi=640/winWidths;
densityDpi= densityDpi>1?300*640*densityDpi/640:densityDpi;
if(isWeixin())
viewport.setAttribute(\'content\', \'width=640, target-densityDpi=\'+densityDpi);
else
viewport.setAttribute(\'content\', \'width=640, user-scalable=no\');
window.setTimeout(function()
viewport.setAttribute(\'content\', \'width=640, user-scalable=yes\');
,1000);

function isWeixin()
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger")
return true;
else
return false;

参考技术A 1、跨浏览器的写法如下:
利用 @media (width) 和@media (height) 的值来指定对应的viewpoint,示例代码如下:
var w=Math.max(document.documentElement.clientWidth, window.innerWidth ||0);
var h=Math.max(document.documentElement.clientHeight, window.innerHeight ||0);
2、一般方法是利用window.innerWidth和window.innerHeight来指定:
获取窗口的高度与宽度(不包含工具条与滚动条):

var w=window.innerWidth;
var
h=window.innerHeight;
完整代码:
function myFunction()

var w=window.innerWidth;
var h=window.innerHeight;
x=document.getElementById("demo");
x.innerhtml="Width: " + w + " Heigth: " + h;

移动端各种分辨率手机屏幕----适配方法集锦

1.使用viewport,html文件中在<body></body>内添加meta,简单粗暴:

<meta name="viewport"  content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

技术图片

2.加判断复杂点的viewport,可以封装成一个js,每次新建html时调用.js即可:

var phoneWidth = parseInt(window.screen.width);
var phoneScale = phoneWidth/750;
var ua = navigator.userAgent;
if (/Android (d+.d+)/.test(ua)){
    var version = parseFloat(RegExp.$1);
    if(version>2.3){
        document.write(‘<meta name="viewport" content="width=750, minimum-scale = 
       ‘+phoneScale+‘, maximum-scale = ‘+phoneScale+‘, target-densitydpi=device-dpi">‘)
    }else{
        document.write(‘<meta name="viewport" content="width=750, target-densitydpi=device-
        dpi">‘)
    }
} else {
    document.write(‘<meta name="viewport" content="width=750, user-scalable=no, target-
    densitydpi=device-dpi">‘)
}

3.使用rem,一般情况下设置为1rem=100px,在写css的width、height、margin、padding时比较好换算,例如设计稿上职位52px,则换算后为0.52rem,js代码可以封装成js文件,每次调用即可:

(function(doc, win) {
    var docEl = doc.documentElement,  
        resizeEvt = ‘orientationchange‘ in window ? ‘orientationchange‘ : ‘resize‘,
        recalc = function() {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            if(clientWidth>=640){  //页面视口最大设为640,当大于640px时,文件的font-size=100px
                docEl.style.fontSize = ‘100px‘;
            }else{  
                docEl.style.fontSize = 100 * (clientWidth / 640) + ‘px‘;  //页面视口小于640时,
                文件的font-size的值随着视口的变化而改变  若想1rem=50px,可以把100换成50,以此类推
            } 
        };
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener(‘DOMContentLoaded‘, recalc, false);
})(document, window);

技术图片

js使用后,<html></html>变化如下:

技术图片

参考:

1.使用Flexible实现手淘H5页面的终端适配(https://github.com/amfe/artic...
2.H5 页面适配所有 iPhone 和安卓机型的六个技巧(http://blog.csdn.net/maodoudo...
3.rem、em、px之间的差异(http://www.runoob.com/w3cnote...
4.某博客详解的分享链接(http://div.io/topic/1567




以上是关于手机端怎么通过js设置viewport的主要内容,如果未能解决你的问题,请参考以下文章

移动端各种分辨率手机屏幕----适配方法集锦

移动端各种分辨率手机屏幕----适配方法集锦

JS实现安卓手机端触摸屏幕左右滑动显示的效果

怎么用js判断是pc端还是手机端

用JS写一个计算器(兼容手机端)

手机端页面meta标签