Имитировать масштабирование браузера с помощью JavaScript

Как можно уменьшить весь документ с помощью JavaScript?

Моя цель - имитировать встроенное масштабирование браузера и масштабировать весь документ до 90%.

Я пробовал использовать

document.body.zoom

Это работает только с explorer, и страница становится беспорядочной (много элементов перемещается).

Есть ли способ сделать это?

Ответы

Ответ 1

Там вы:

Использование:

document.body.style.zoom=1.0;this.blur();

1.0 означает 100%

150% - 1,5 1000% будет 10,0

this.blur() означает, что курсор, возможно, вы выбрали поле ввода, теряет фокус каждого элемента выбора.

или:

Вы можете использовать элемент css3 zoom (Источник)

Firefox не позволяет масштабировать браузер, потому что вы не можете получить доступ к свойствам пользователя через javascript или sth.

Итак, вы можете просто использовать некоторые стили CSS, которые позволяют масштабировать (CSS3: увеличение, как упоминалось выше) или увеличить размер текста! Например, вы можете использовать другой CSS файл. Но здесь у вас есть "неуклюжая" проблема, потому что стилизованные элементы css (плавающие и т.д.) Должны "взаимодействовать" по-разному по сути своих атрибутов.

Значок, который я опубликовал выше, хорошо работает в Chrome и IE8 + (FF не поддерживается, как указано)

- Дополнительная информация:

Здесь приведен пример того, как точно масштабировать параметр масштабирования. Пример приложения можно найти здесь

Функция масштабирования обычно обрабатывает масштаб, как делает ваш браузер!

Но это все еще все, что не поддерживается Firefox, а может быть, Safari и Opera? В Chrome и IE он работает!

Другим решением будет следующее: поместите ваши основные размеры в "em", а затем обходите, установив размеры как 100%, 110% (по всему css). Таким образом, вы можете иметь разные CSS файлы, а "просто" нужно заменить атрибуты%!

Но я не думаю, что могут быть другие решения!:(

Ответ 2

Вот мое решение с использованием CSS transform: scale() и JavaScript/jQuery:

<!-- 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>

<script>
    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');
        }
    });
</script>

Ответ 3

Я сделал это с jquery, работает с Firefox, Safari, Chrome и IE9 +:

window.onload = function() {
var currFFZoom = 1;
var currIEZoom = 100;

$('#In').on('click',function(){
    if (navigator.userAgent.indexOf('Firefox') != -1 && parseFloat(navigator.userAgent.substring(navigator.userAgent.indexOf('Firefox') + 8)) >= 3.6){//Firefox
        var step = 0.02;
        currFFZoom += step; 
        $('body').css('MozTransform','scale(' + currFFZoom + ')');
    } else {
        var step = 2;
        currIEZoom += step;
        $('body').css('zoom', ' ' + currIEZoom + '%');
    }
});

$('#Out').on('click',function(){
    if (navigator.userAgent.indexOf('Firefox') != -1 && parseFloat(navigator.userAgent.substring(navigator.userAgent.indexOf('Firefox') + 8)) >= 3.6){//Firefox
        var step = 0.02;
        currFFZoom -= step;                 
        $('body').css('MozTransform','scale(' + currFFZoom + ')');

    } else {
        var step = 2;
        currIEZoom -= step;
        $('body').css('zoom', ' ' + currIEZoom + '%');
    }
});};


<input type="button" id="Out" alt="Zoom Out"/>
<input type="button" id="In" alt="Zoom In"/>