Tarayıcı yakınlaştırma düzeyini değiştirme


105

Sitemde tarayıcının yakınlaştırma düzeyini (+) (-) değiştirecek 2 düğme oluşturmam gerekiyor. Görüntü boyutu ve düzen sorunları nedeniyle tarayıcı yakınlaştırma talep ediyorum ve css yakınlaştırma istemiyorum.

Peki, bu mümkün mü? Çakışan raporlar duydum.


8
Tarayıcı yakınlaştırma, yalnızca kullanıcı tarafından kontrol edilmesi gereken bir şeydir - asla web sitesi tarafından kontrol edilmemelidir. Web sitesi tarayıcının yakınlaştırma düzeyini değiştirebilirse, bu, tarayıcıların sahip olduğu en temel erişilebilirlik özelliğini bozar. Bir web sitesinin tarayıcı yakınlaştırmasını değiştirmesine izin vermenin herhangi bir yöntemini ciddi bir hata olarak değerlendiririm çünkü bu özelliğin herhangi bir kullanımı kötüye kullanım olur.
user57368

37
@unknown (google), saçma. Çok yanılıyorsun Bu tür kontroller, javascript'te flash'a kadar ölçüm yapabilen zengin web uygulamaları oluşturmak için paha biçilmezdir ve ikinci olarak tarayıcılar, yakınlaştırma kontrollerini yalnızca kullanıcı etkileşimi ile kullanılabilecek şekilde sınırlayabilir ve tam kontrol vermez.
Jourkey

107
"Asla XYZ olmamalısın" dan gerçekten sıkıldım. Evet, mükemmel bir dünyada ya da yepyeni bir site yazarken her şey yolunda ve iyidir. Ancak site on yıl eskiyse, müşteri yeni bir tasarım için ödeme yapmazsa ve patronlarınız sizden bir siteyi bir tablette çalıştırmanızı beklerse, bu tür bir "gerçekten yapmamalısınız" mantığı ciddi bir geri dönüş alabilir -oturma yeri. Bir şeyin nasıl yapılacağını biliyorsanız, söyleyin. Eğer yapmazsan, yorum yapma. Forumlara gelip bilgiççe saçmalıklardan bahsetmek yararsızdır ve aslında oldukça kabadır.
Nathan Crause

5
eski gönderi ancak "asla yapmamalısın" ve "tarayıcının izin vermemesi" arasında bir fark var. Bunun nedeni tam olarak web geliştiricinin sınırları zorlaması, tarayıcı geliştiricilerinin kullanıcıların iyiliği için sınırlar koyması gerektiğidir. Aksi takdirde, yine de özelleştirilmiş renkli kaydırma çubukları ve pencereyi sallama ağında olurduk.
Olivvv

1
Eski canlanma ama sıcak lanet olsun teşekkür ederim @NathanCrause! Bazı kullanıcılar da göremediği için Erişilebilirlik işlevini serbest bırakmam gereken noktaya geliyorum ve tarayıcı yakınlaştırmasını değiştirememek hayatımı zorlaştırıyor. CSS Zoom jquery kullanıcı
arayüzüyle

Yanıtlar:


42

Çoğu tarayıcıda mümkün olmadığını söyleyebilirim, en azından bazı ek eklentiler olmadan. Ve her durumda, uygulamalar değişiklik gösterdiğinden tarayıcının yakınlaştırmasına güvenmekten kaçınmaya çalışırdım (bazı tarayıcılar yalnızca yazı tiplerini yakınlaştırır, bazıları da resimleri yakınlaştırır, vb.). Kullanıcı deneyimini fazla önemsemediğiniz sürece.

Daha güvenilir bir yakınlaştırmaya ihtiyacınız varsa, sayfa yazı tiplerini ve resimleri JavaScript ve CSS ile veya muhtemelen sunucu tarafında yakınlaştırmayı düşünün. Görüntü ve düzen ölçekleme sorunları bu şekilde çözülebilir. Tabii bu biraz daha fazla çalışma gerektiriyor.


37

Firefox'ta çalışmasa da IE ve Chrome'da mümkündür:

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

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

9
Jourkey, CSS olmayan yakınlaştırmayı açıkça istedi .
kmkaplan

3
Bu sadece gövde üzerinde satır içi CSS yakınlaştırma değerini değiştirmektir, bu da sorunun sorulduğunun tam tersini yapar.
mystrdat

Bu yakınlaştırma durumunun, bir oturum değişkeninde kalıcı olarak kaydedilmesi ve yönetilmesi ve her sayfa yüklemesinde yeniden oynatılması gerektiğini unutmayın.
Michael Blankenship

30

Bunun sizin için işe yarayıp yaramadığını deneyin. Bu, FF, IE8 + ve chrome'da çalışır. Diğer bölüm, Firefox olmayan tarayıcılar için geçerlidir. Bu size bir yakınlaştırma efekti sağlasa da aslında yakınlaştırma değerini tarayıcı düzeyinde değiştirmez.

    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 veya jquery migrate eklentisine sahip olmalısınız ($
.browser

24
Bu CSS yakınlaştırma
SmallChess

Tutarlılık için, MozTransform durumunda başlangıç ​​noktasını belirleyin:
Joel Teply

Bugünlerde sadece transform: scale(..)tüm tarayıcılarda ayarlayabilmelisiniz . MozTransformFirefox'un mevcut sürümlerinde bile mevcut değil.
Hielke Walinga

11

CSS3 yakınlaştırma işlevini kullanabilirsiniz , ancak henüz jQuery ile test etmedim. Şimdi deneyecek ve size haber vereceğim. GÜNCELLEME: test edildi, çalışıyor ama eğlenceli


evet, kesinlikle değil. Çapraz tarayıcı için bir fikriniz var mı? GÜNCELLEME: gerek yok, sadece yukarıdaki gönderiyi kontrol edin! tezahürat
obzenner

Chrome ve Safari'de çalışıyor gibi görünüyor, ancak Firefox'ta çalışmıyor.
Ansjovis86


2

Gerçek tarayıcı yakınlaştırma düzeyini değiştirmenin bir yolunu bulamadım, ancak CSS dönüşümü: scale () ile oldukça yaklaşabilirsiniz. İşte benim JavaScript ve jQuery tabanlı çözümüm:

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

Belirtilen kabul edilen cevap olarak, DOM'daki öğenin fontSize css özniteliğini, referansınız için aşağıdaki kodu tek tek büyütebilirsiniz.

 <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

Durum çubuğundaki UI Yakınlaştırma düğmesi komut dosyası oluşturulamadığı için IE'de mümkün değildir. Diğer tarayıcılar için YMMV.


IE window.parent.document.body.style.zoom = 1.5'te mümkündür;
Mustafa Ekici

8
Orijinal poster özellikle "CSS yakınlaştırma değil" ister.
i_am_jorf

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'ta yakınlaştırmayı değiştirmez, yalnızca ölçeği değiştir !!!


3
Bir kez daha, bu soru tarafından istenmeyen bir durum olan CSS yakınlaştırmadır .
John Weisz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.