如何用JavaScript缩小整个文档?
我的目标是模仿内置的浏览器缩放并将整个文档缩放到90%.
我试过用
document.body.zoom
Run Code Online (Sandbox Code Playgroud)
这只适用explorer于页面变得混乱(很多元素都在移动).
有没有办法做到这一点?
小智 21
使用:
document.body.style.zoom=1.0;this.blur();
Run Code Online (Sandbox Code Playgroud)
1.0表示100%
150%将是1.5 1000%将是10.0
this.blur()表示光标,也许您选择了一个输入字段,丢失了每个选择项的焦点.
要么:
Firefox不允许使用浏览器进行缩放,因为您无法通过javascript或某人访问用户属性.
所以你可以使用一些允许缩放的CSS样式(CSS3:zoom,如上所述)或增加文本大小!例如,您可以使用包含不同的CSS文件.但是在这里你有"跳跃"的问题,因为风格化的css元素(浮动等)必须在其属性的事实上"交互"不同.
我上面发布的缩放在Chrome和IE8 +中运行良好(如上所述,不支持FF)
- 附加信息:
以下是如何使用缩放选项精确缩放的示例.可在此处找到示例应用程序
缩放选项通常会像浏览器一样处理缩放!
但这仍然是所有的东西,Firefox不支持,或者Safari和Opera?在Chrome和IE中它可以工作!
另一个解决方案是:将您的主要尺寸放在"em"中,然后通过设置100%,110%(整个css)等尺寸来解决.所以你可能有不同的CSS文件,"只是"需要替换%属性!
但我不认为可能有其他解决方案!:(
这是我使用 CSS 变换:scale() 和 JavaScript / jQuery 的解决方案:
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');
}
});Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
尝试使用transform: scale(). Mozilla 文档
.className {
transform: scale(0.9)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 Javascript 更改缩放量。
let scaleAmount = 1 - 0.1
document.body.style.transform = `scale(${scaleAmount})`
Run Code Online (Sandbox Code Playgroud)
scale()减少或增加元素的宽度和高度。如果您希望宽度保持原始大小,而所有内部元素都缩放,则算法如下所示:
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`
Run Code Online (Sandbox Code Playgroud)
如果您使用像 React 这样的 UI 框架,您可以将状态中存在的 scaleAmount 传递给内联 CSS。
<header className="App-header" style ={{
transform: `scale(${scaleState})`,
transformOrigin: '0 0',
width: `${100 * (1 / scaleState)}%`
}}>
Run Code Online (Sandbox Code Playgroud)