Thay đổi mức thu phóng của trình duyệt


104

Tôi cần tạo 2 nút trên trang web của mình để thay đổi mức thu phóng của trình duyệt (+) (-). Tôi đang yêu cầu thu phóng trình duyệt chứ không phải thu phóng css vì các vấn đề về bố cục và kích thước hình ảnh.

Chà, điều này có khả thi không? Tôi đã nghe các báo cáo mâu thuẫn.


8
Thu phóng trình duyệt là thứ chỉ được kiểm soát bởi người dùng - không bao giờ là trang web. Nếu trang web có thể thay đổi mức thu phóng của trình duyệt, điều đó sẽ phá vỡ tính năng trợ năng cơ bản nhất mà các trình duyệt có. Tôi sẽ coi bất kỳ phương pháp nào cho phép một trang web thay đổi độ phóng đại của trình duyệt là một lỗi nghiêm trọng, bởi vì bất kỳ việc sử dụng tính năng đó đều là lạm dụng.
user57368

37
@unknown (google), vớ vẩn. Bạn chỉ rất sai lầm. Các điều khiển như vậy là vô giá để tạo ra các ứng dụng web phong phú bằng javascript có thể đo tối đa flash và trình duyệt thứ hai có thể giới hạn các điều khiển thu phóng chỉ khả dụng với sự tương tác của người dùng và không cung cấp toàn quyền kiểm soát.
Jourkey

101
Tôi thực sự cảm thấy mệt mỏi với toàn bộ "bạn không bao giờ nên XYZ". Vâng, đó là tất cả tốt và tốt trong một thế giới hoàn hảo, hoặc khi bạn đang viết một trang web hoàn toàn mới. Nhưng nếu trang web đã tồn tại một thập kỷ, khách hàng sẽ không trả tiền cho một thiết kế mới và các ông chủ của bạn mong đợi bạn làm cho trang web hoạt động trên máy tính bảng, loại tâm lý "bạn thực sự không nên" có thể nghiêm trọng trở lại -ghế. Nếu bạn biết cách làm điều gì đó, hãy nói như vậy. Nếu bạn không hiểu, thì đừng bình luận. Việc đến các diễn đàn để nói ra những điều vô nghĩa là vô ích và thực sự khá thô lỗ.
Nathan Crause,

5
bài cũ nhưng có sự khác biệt giữa "bạn không nên" và "trình duyệt không nên cho phép". Chính vì các nhà phát triển web đang đẩy mạnh các giới hạn, nên các nhà phát triển trình duyệt phải đưa ra các giới hạn, vì lợi ích của người dùng. Nếu không, chúng ta sẽ vẫn ở trong một trang web gồm các thanh cuộn đầy màu sắc được tùy chỉnh và tính năng lắc cửa sổ đang tải.
Olivvv

1
Hồi sinh cũ nhưng nóng chết tiệt cảm ơn bạn @NathanCrause! Tôi sắp đến thời điểm cần phát hành chức năng Trợ năng vì một số người dùng cũng không thể nhìn thấy và việc không thể thay đổi mức thu phóng của trình duyệt đang khiến cuộc sống của tôi trở nên khó khăn. CSS Zoom không hoạt động tốt với jquery ui
DdD 23/02/15

Câu trả lời:


40

Tôi sẽ nói rằng không thể thực hiện được trong hầu hết các trình duyệt, ít nhất là không có một số plugin bổ sung. Và trong mọi trường hợp, tôi sẽ cố gắng tránh phụ thuộc vào khả năng thu phóng của trình duyệt vì cách triển khai khác nhau (một số trình duyệt chỉ thu phóng phông chữ, những trình duyệt khác cũng thu phóng hình ảnh, v.v.). Trừ khi bạn không quan tâm nhiều đến trải nghiệm người dùng.

Nếu bạn cần thu phóng đáng tin cậy hơn, thì hãy cân nhắc việc thu phóng phông chữ và hình ảnh của trang bằng JavaScript và CSS hoặc có thể ở phía máy chủ. Các vấn đề về tỷ lệ hình ảnh và bố cục có thể được giải quyết theo cách này. Tất nhiên, điều này đòi hỏi phải làm việc nhiều hơn một chút.


30

Có thể sử dụng trong IE và chrome mặc dù nó không hoạt động trong firefox:

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

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

9
Jourkey đã yêu cầu rõ ràng không thu phóng CSS.
kmkaplan

3
Đây chỉ là thay đổi giá trị thu phóng CSS nội tuyến trên nội dung, điều này hoàn toàn ngược lại với những gì câu hỏi đã đặt ra.
mystrdat

Đừng quên rằng trạng thái thu phóng này có thể cần được lưu và quản lý liên tục trong một biến phiên và phát lại mỗi lần tải trang.
Michael Blankenship

29

Hãy thử nếu điều này làm việc cho bạn. Điều này hoạt động trên FF, IE8 + và chrome. Phần khác áp dụng cho các trình duyệt không phải firefox. Mặc dù điều này mang lại cho bạn hiệu ứng thu phóng, nhưng nó không thực sự sửa đổi giá trị thu phóng ở cấp trình duyệt.

    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
bạn phải có jquery 1.8.3 hoặc jquery Di chuyển plugin (để sử dụng $ .browser)
jave.web

24
Đây là CSS zoom
HelloWorld

Để thống nhất, trong trường hợp MozTransform, thiết lập nguồn gốc:
Joel Teply

Ngày nay bạn chỉ có thể thiết lập transform: scale(..)trong tất cả các trình duyệt. MozTransformkhông tồn tại ngay cả trong các phiên bản Firefox hiện tại.
Hielke Walinga

10

Bạn có thể sử dụng chức năng thu phóng CSS3 , nhưng tôi chưa thử nghiệm nó với jQuery. Sẽ thử ngay bây giờ và cho bạn biết. CẬP NHẬT: đã thử nghiệm, hoạt động nhưng rất vui


vâng, hoàn toàn không. Bất kỳ ý tưởng cho trình duyệt chéo? CẬP NHẬT: không cần, chỉ cần kiểm tra bài đăng ở trên! hoan hô
obzenner

Có vẻ như hoạt động trong Chrome và Safari, nhưng không hoạt động trên Firefox.
Ansjovis86

Bị hỏng trong iPad OS Safari
leroyjenkinss 24

2

Tôi không thể tìm cách thay đổi mức thu phóng thực tế của trình duyệt, nhưng bạn có thể tiến gần hơn với CSS biến đổi: scale (). Đây là giải pháp của tôi dựa trên JavaScript và 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

như câu trả lời được chấp nhận đã đề cập, bạn có thể phóng to từng thuộc tính fontSize css của phần tử trong DOM, mã sau để bạn tham khảo.

 <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

Không thể thực hiện được trong IE, vì nút Thu phóng giao diện người dùng trên thanh trạng thái không thể tập lệnh. YMMV cho các trình duyệt khác.


nó khả thi trong IE window.parent.document.body.style.zoom = 1.5;
Mustafa Ekici

8
Người đăng ban đầu đặc biệt yêu cầu "không thu phóng CSS".
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>

trong Firefox sẽ không thay đổi tỷ lệ thu phóng chỉ thay đổi !!!


3
Một lần nữa, đây là tính năng phóng to CSS , điều không mong muốn đối với câu hỏi.
John Weisz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.