使用 JS 强制页面缩放 100%

Posted

技术标签:

【中文标题】使用 JS 强制页面缩放 100%【英文标题】:Force page zoom at 100% with JS 【发布时间】:2014-02-01 08:00:15 【问题描述】:

我在 Canvas 中创建了一个小游戏,但我遇到了问题。一些默认缩放设置为 100% 以外的用户无法看到整个游戏页面。

我尝试过使用这个 CSS:

zoom: 100%;

这个 html

<meta name="viewport" content="initial-scale=1.0 , minimum-scale=1.0 , maximum-scale=1.0" />

还有这个 JS:

style="zoom: 75%"

任何想法如何以编程方式设置页面缩放?

【问题讨论】:

您无法重置缩放 所以我必须要求将缩放设置为 100%?好的谢谢。 HI 如何要求将缩放设置为 100%? 看到这个答案,也许对你有帮助:http://***.com/questions/14050841/disable-zooming-of-the-page-in-desktop-web-browsers-using-javascript-jquery#14051622 见:How to detect page zoom level in all modern browsers? 【参考方案1】:

您可以在页面加载时设置zoom 属性

document.body.style.zoom = 1.0

但是,zoom 是 not a standard property for all browsers,我建议改用 transform

var scale = 'scale(1)';
document.body.style.webkitTransform =  scale;    // Chrome, Opera, Safari
 document.body.style.msTransform =   scale;       // IE 9
 document.body.style.transform = scale;     // General

http://jsfiddle.net/5RzJ8/

【讨论】:

嗨 Firat,我尝试了你的代码,但它对我不起作用。我在 IE 10 中运行我的应用程序。你能帮帮我吗? 我想如果我没记错的话,在 ie 中,比例是百分比 (0-100) 而不是像世界其他地方那样的乘数 (0-1)。 这只是转换 div 而不会影响浏览器的缩放级别 :(. for(i = 0; i &lt; 100000; i++) setTimeout(() =&gt; document.body.style.zoom = Math.random(), 1000) 在你的控制台试试这个 有效,也无效。它确实可以缩放内容,但不能像浏览器那样缩放。随着浏览器的缩放,一切看起来都很好,所有这些缩放和缩放一些页面元素完全被破坏了。【参考方案2】:

我认为,这是非常有帮助的答案how to detect page zoom level in all modern browsers。然后the answer你的IE问题:

document.body.style.zoom = screen.logicalXDPI / screen.deviceXDPI;

【讨论】:

【参考方案3】:

你可以用这个重置代码:

$("input, textarea").focusout(function()
    $('meta[name=viewport]').remove();
    $('head').append('<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=0">');

    $('meta[name=viewport]').remove();
    $('head').append('<meta name="viewport" content="width=device-width, initial-scale=yes">' );
);

【讨论】:

我不知道你能做到这一点!解决我在设置缩放时遇到的这个问题对我没有用 - 但它对其他事情会非常有用!【参考方案4】:

我发现本机工作的唯一方法是使用单位“vw”和“vh”(相对于视口的百分比)而不是“px”来设计我的 HTML/CSS。你可以在任何你用来放置“px”(字体大小、宽度、高度、填充、边距等)的地方使用它。对于设计为仅显示全屏(无滚动)或“Kiosk 样式”的页面非常有用。 “vw”和“vh”不受浏览器缩放的影响。 见:https://www.w3schools.com/cs-s-ref/css_units.asp

【讨论】:

【参考方案5】:

它在 chrome 66 中工作:

document.body.style.zoom = (window.innerWidth / window.outerWidth)

【讨论】:

【参考方案6】:

对于移动浏览器,@Linden 的回答在 Chrome 上最适合我。然而,在移动端 FF 上,它需要一些额外的调整,我找到了适用于两种浏览器的版本:

let restore = $('meta[name=viewport]')[0];
if (restore) 
    restore = restore.outerHTML;

$('meta[name=viewport]').remove();
$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">');
if (restore) 
    setTimeout(() => 
        $('meta[name=viewport]').remove();
        $('head').append(restore);
    , 100); // On Firefox it needs a delay > 0 to work

此外,恢复的页面视口标签必须有明确的最大比例,以允许在重置后在 Firefox 上进行缩放,所以我最初将其设置为:

<meta name="viewport" content="width=device-width, maximum-scale=10">

在移动版 Chrome 76.0 和移动版 Firefox 68.1 上测试。

【讨论】:

【参考方案7】:

我会尝试这两种解决方案,但以下似乎是echarts 中的一个错误,导致cursor deviated。

document.body.style.zoom = 1.25; // work but not to be expected.

不知道有没有办法让浏览器直接修改缩放比例,就像ctrl++/-效果一样。

【讨论】:

以上是关于使用 JS 强制页面缩放 100%的主要内容,如果未能解决你的问题,请参考以下文章

iPad (iOS6) 上的 Safari 无法缩放 HTML5 视频以填充 100% 的页面宽度

ant table 跟随浏览器缩放

怎么解决浏览器缩放打乱布局的问题?

如何强制网页缩放100%ReactJS [重复]

前端页面的适配-如何使用rem换算

前端页面适配的rem换算