首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaScript模拟浏览器缩放

使用JavaScript模拟浏览器缩放
EN

Stack Overflow用户
提问于 2012-05-06 01:00:30
回答 6查看 62.4K关注 0票数 24

如何使用JavaScript缩小整个文档?

我的目标是模仿内置的浏览器缩放,并将整个文档缩放到90%。

我试过使用

代码语言:javascript
复制
document.body.zoom

这只适用于explorer,页面会变得乱七八糟(很多元素都在移动)。

有没有办法做到这一点?

EN

回答 6

Stack Overflow用户

发布于 2012-05-06 01:04:48

There you go:

使用:

代码语言:javascript
复制
document.body.style.zoom=1.0;this.blur();

1.0意味着100%

150%等于1.5 1000%等于10.0

this.blur()意味着光标失去了每个选择项的焦点,也许你选择了一个输入域。

或者:

您可以使用css3 element zoom (Source)

使用浏览器进行Firefox does not allow缩放,因为您无法通过javascript或其他工具访问用户属性。

所以你可以使用一些CSS样式来缩放(CSS3: zoom,如上所述)或者增加文本大小!例如,您可以通过包含不同的CSS文件来执行此操作。但是在这里你有“跳跃”的问题,因为样式的css元素(浮动等)必须“交互”不同的属性。

我在上面发布的缩放效果在Chrome和IE8+中运行良好(不支持上面提到的FF)

--其他信息:

Here是关于如何使用zoom选项精确缩放的示例。示例应用程序可以在here中找到

缩放选项通常会像浏览器一样处理缩放!

但这仍然是所有的东西,Firefox或Safari & Opera可能不支持这些东西?在chrome和IE中它可以工作!

另一个解决方案是:将你的主要尺寸放在"em“中,然后通过设置大小,比如100%,110% (遍及css)来解决问题。因此,您可以有不同的CSS文件,并且“只”需要替换%属性!

然而,我不认为有其他的解决方案!

票数 31
EN

Stack Overflow用户

发布于 2015-04-11 23:36:55

下面是我使用CSS transform的解决方案: scale()和JavaScript / jQuery:

代码语言:javascript
复制
jQuery(document).ready(function($) {
    // Set initial zoom level
    var zoom_level = 100;

    // Click events
    $('#zoom_in').click(function() {
        zoom_page(10, $(this))
    });
    $('#zoom_out').click(function() {
        zoom_page(-10, $(this))
    });
    $('#zoom_reset').click(function() {
        zoom_page(0, $(this))
    });

    // Zoom function
    function zoom_page(step, trigger) {
        // Zoom just to steps in or out
        if (zoom_level >= 120 && step > 0 || zoom_level <= 80 && step < 0) return;

        // Set / reset zoom
        if (step == 0) zoom_level = 100;
        else zoom_level = zoom_level + step;

        // Set page zoom via CSS
        $('body').css({
            transform: 'scale(' + (zoom_level / 100) + ')', // set zoom
            transformOrigin: '50% 0' // set transform scale base
        });

        // Adjust page to zoom width
        if (zoom_level > 100) $('body').css({
            width: (zoom_level * 1.2) + '%'
        });
        else $('body').css({
            width: '100%'
        });

        // Activate / deaktivate trigger (use CSS to make them look different)
        if (zoom_level >= 120 || zoom_level <= 80) trigger.addClass('disabled');
        else trigger.parents('ul').find('.disabled').removeClass('disabled');
        if (zoom_level != 100) $('#zoom_reset').removeClass('disabled');
        else $('#zoom_reset').addClass('disabled');
    }
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<!-- Trigger -->
<ul id="zoom_triggers">
    <li><a id="zoom_in">zoom in</a></li>
    <li><a id="zoom_out">zoom out</a></li>
    <li><a id="zoom_reset">reset zoom</a></li>
</ul>

票数 4
EN

Stack Overflow用户

发布于 2019-12-20 00:24:49

尝试使用transform: scale()Mozilla Docs

代码语言:javascript
复制
.className {
    transform: scale(0.9)
}

您可以使用Javascript更改缩放量。

代码语言:javascript
复制
let scaleAmount = 1 - 0.1
document.body.style.transform = `scale(${scaleAmount})`

scale()会减小或增加元素的宽度和高度。如果您希望宽度保持原始大小,而所有内部元素都按比例缩放,则算法如下所示:

代码语言:javascript
复制
let scaleAmount = 1 - 0.1
document.body.style.transform = `scale(${scaleAmount})`
document.body.style.width = `${100 * (1 / scaleAmount)}%`
document.body.style['transform-origin'] = `0 0`

如果您使用像React这样的UI框架,则可以将状态中存在的scaleAmount传递给内联CSS。

代码语言:javascript
复制
<header className="App-header" style ={{
    transform: `scale(${scaleState})`,
    transformOrigin: '0 0',
    width: `${100 * (1 / scaleState)}%`
}}>

Example in React

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10464038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档