在Safari中使用jQuery检测页面缩放更改

C.O*_*.O. 10 javascript jquery

我在包含position:fixed元素的web应用程序中遇到Safari问题.当页面缩小(小于100%)时,事情就会中断,需要通过调用函数来修复.所以我想检测用户的缩放.我刚才发现了这个jQueryPlug:

http://mlntn.com/2008/12/11/javascript-jquery-zoom-event-plugin/

http://mlntn.com/demos/jquery-zoom/

它会检测可能导致页面缩放级别更改的键盘和鼠标事件.很公平.它适用于当前的FF和IE,但不适用于Safari.在当前的WebKit浏览器中,可以做些什么来做同样的事情?

new*_*ron 22

这不是这个问题的直接复制,因为它涉及Mobile Safari,但同样的解决方案将起作用.

放大时,会调整window.innerWidth,但不会调整document.documentElement.clientWidth,因此:

var zoom = document.documentElement.clientWidth / window.innerWidth;
Run Code Online (Sandbox Code Playgroud)

此外,您应该能够使用onresize事件处理程序(或jQuery .resize())来检查:

var zoom = document.documentElement.clientWidth / window.innerWidth;
$(window).resize(function() {
    var zoomNew = document.documentElement.clientWidth / window.innerWidth;
    if (zoom != zoomNew) {
        // zoom has changed
        // adjust your fixed element
        zoom = zoomNew
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚在Chrome上测试了这个理论,我似乎总是得到一个非常接近1的比率,无论我是放大到100%,67%还是175%.另外,jQuery的`$(window).width()`返回与`document.documentElement.clientWidth`相同的值,而`window.innerWidth`通常略大(虽然不足以反映缩放量). (4认同)