ブラウザのズームレベルを変更する


104

ブラウザのズームレベル(+)(-)を変更する2つのボタンをサイトに作成する必要があります。画像のサイズとレイアウトの問題のため、CSSズームではなくブラウザズームをリクエストしています。

まあ、これは可能ですか?相反する報告を聞いたことがあります。


8
ブラウザのズームは、ユーザーのみが制御できるものであり、Webサイトは制御できません。Webサイトがブラウザーのズームレベルを変更できる場合、それはブラウザーが持つ最も基本的なユーザー補助機能を壊します。Webサイトがブラウザのズームを変更できるようにする方法は、深刻なバグであると考えます。これは、その機能を使用すると悪用されるためです。
user57368 2009年

37
@unknown(google)、ナンセンス。あなたは非常に間違っています。このようなコントロールは、フラッシュまで測定できるJavaScriptでリッチなWebアプリケーションを作成するために非常に貴重です。次に、ブラウザーはズームコントロールをユーザーの操作でのみ使用できるように制限し、完全な制御を与えることができません。
ジャーキー2009年

101
「XYZは絶対にやめておくべき」ということで、本当にうんざりしています。ええ、それは完璧な世界で、またはあなたが真新しいサイトを書いているときに、すべてうまくいきます。しかし、サイトが10年前のものである場合、クライアントは新しいデザインにお金を払う必要はなく、上司はサイトをタブレットで動作させることを期待します。 -シート。あなたが何かをする方法を知っているなら、そう言ってください。そうしない場合は、コメントしないでください。面白くないナンセンスを吹き飛ばしているフォーラムに参加することは役に立たず、実際には失礼です。
Nathan Crause

5
古い投稿ですが、「絶対にしてはいけない」と「ブラウザで許可してはならない」の違いがあります。これは、ユーザーの利益のために、Web開発者が制限を押し進めているため、ブラウザー開発者が制限を設けなければならないためです。それ以外の場合は、カスタマイズされたカラフルなスクロールバーとシェイク・ザ・ウィンドウのオンロードのWebにとどまります。
Olivvv 14

1
古い復活ですが、いまいましい@NathanCrauseに感謝します!アクセシビリティ機能を解放する必要があるところまで来ています。一部のユーザーはこれを見ることができず、ブラウザーのズームを変更できないと、私の人生が困難になります。CSSズームがjquery uiでうまく機能しない
DdD

回答:


40

ほとんどのブラウザでは、少なくともいくつかの追加のプラグインなしでは不可能だと私は言うでしょう。いずれにせよ、実装が異なるため、ブラウザのズームに依存しないようにします(一部のブラウザはフォントのみをズームし、他のブラウザも画像をズームするなど)。ユーザーエクスペリエンスについてあまり気にしない限り。

より信頼性の高いズームが必要な場合は、JavaScriptとCSSを使用して、またはサーバー側でページのフォントと画像をズームすることを検討してください。画像とレイアウトのスケーリングの問題はこの方法で対処できます。もちろん、これにはもう少し作業が必要です。


30

IEとChromeでは可能ですが、Firefoxでは機能しません。

<script>
   function toggleZoomScreen() {
       document.body.style.zoom = "80%";
   } 
</script>

<img src="example.jpg" alt="example" onclick="toggleZoomScreen()">

9
ジャーキーは CSSズームを明示的に求めました。
kmkaplan

3
これは、CSSズーム値を本文にインラインで変更するだけで、質問の質問とは正反対です。
mystrdat

このズーム状態を永続的に保存してセッション変数で管理し、各ページの読み込みを再生する必要がある可能性が高いことを忘れないでください。
Michael Blankenship 2015年

29

これでうまくいくか試してみてください。これはFF、IE8 +、クロムで動作します。else部分は、Firefox以外のブラウザに適用されます。これによりズーム効果が得られますが、実際にはブラウザレベルでズーム値が変更されるわけではありません。

    var currFFZoom = 1;
    var currIEZoom = 100;

    $('#plusBtn').on('click',function(){
        if ($.browser.mozilla){
            var step = 0.02;
            currFFZoom += step; 
            $('body').css('MozTransform','scale(' + currFFZoom + ')');
        } else {
            var step = 2;
            currIEZoom += step;
            $('body').css('zoom', ' ' + currIEZoom + '%');
        }
    });

    $('#minusBtn').on('click',function(){
        if ($.browser.mozilla){
            var step = 0.02;
            currFFZoom -= step;                 
            $('body').css('MozTransform','scale(' + currFFZoom + ')');

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

1
jquery 1.8.3またはjquery migrateプラグイン($ .browserを使用するため)が必要
jave.web

24
これはCSSズームです
HelloWorld '15

一貫性を保つため、MozTransformの場合には、起源を設定します
ジョエルTeply

現在transform: scale(..)、すべてのブラウザで設定できるはずです。MozTransform現在のバージョンのFirefoxにも存在しません。
Hielke Walinga

10

CSS3のズーム機能を使用できますが、jQueryではまだテストしていません。今すぐ試して、お知らせします。更新:それをテストしました、動作しますが、それは楽しいです


ええ、全く違います。クロスブラウザのアイデアはありますか?更新:必要ありません。上の投稿を確認してください!歓声
obzenner 2013

ChromeとSafariでは機能するようですが、Firefoxでは機能しません。
Ansjovis86 2017年

iPad OS Safariで破損
leroyjenkinss24

2

実際のブラウザーのズームレベルを変更する方法は見つかりませんでしたが、CSS変換を使用してかなり近づくことができます: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>

2

受け入れられた回答として述べたように、DOM内の要素のfontSize css属性を1つずつ大きくできます。次のコードを参考にしてください。

 <script>
    var factor = 1.2;
    var all = document.getElementsByTagName("*");
    for (var i=0, max=all.length; i < max; i++) {
        var style = window.getComputedStyle(all[i]);
        var fontSize = style.getPropertyValue('font-size');

        if(fontSize){
            all[i].style.fontSize=(parseFloat(fontSize)*factor)+"px";
        }
        if(all[i].nodeName === "IMG"){
            var width=style.getPropertyValue('width');
            var height=style.getPropertyValue('height');
            all[i].style.height = (parseFloat(height)*factor)+"px";
            all[i].style.width = (parseFloat(width)*factor)+"px";
        }
    }
</script>

1

ステータスバーのUIズームボタンはスクリプト化できないため、IEでは使用できません。他のブラウザー用のYMMV。


IEで可能ですwindow.parent.document.body.style.zoom = 1.5;
Mustafa Ekici 2013年

8
オリジナルのポスターは特に「CSSズームではない」ことを求めています。
i_am_jorf 2013年

0

<html>
  <head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script>
        var currFFZoom = 1;
        var currIEZoom = 100;

        function plus(){
            //alert('sad');
                var step = 0.02;
                currFFZoom += step;
                $('body').css('MozTransform','scale(' + currFFZoom + ')');
                var stepie = 2;
                currIEZoom += stepie;
                $('body').css('zoom', ' ' + currIEZoom + '%');

        };
        function minus(){
            //alert('sad');
                var step = 0.02;
                currFFZoom -= step;
                $('body').css('MozTransform','scale(' + currFFZoom + ')');
                var stepie = 2;
                currIEZoom -= stepie;
                $('body').css('zoom', ' ' + currIEZoom + '%');
        };
    </script>
    </head>
<body>
<!--zoom controls-->
                        <a id="minusBtn" onclick="minus()">------</a>
                        <a id="plusBtn" onclick="plus()">++++++</a>
  </body>
</html>

Firefoxでは、ズームのみが変更され、スケールのみが変更されます!!!


3
繰り返しますが、これはCSSズームです。これは、質問には望ましくありません。
John Weisz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.