2011-01-10 81 views
3

我需要在用户更改浏览器中的字体大小时获得通知。用户在浏览器中更改字体大小的事件?

我需要它重新定位一些必须在一维中相对于文本中的锚点的元素。

到目前为止,我还没有找到任何东西,我有点担心,这是不可能的。在这种情况下,应该可以使用隐藏的div和一些文本来模拟它,并且脚本轮询它的宽度变化。但我希望有人有一个更优雅的解决方案。

编辑:

我实现轮询东西一样以下。它没有在所有浏览器上正确测试,但它不依赖于浏览器的特定功能。 。使用它像$( '身体')绑定( 'fontResize',函数(){...})

$(function(){ 
    $('body').append($('<div id="theFontResizeCaptureDiv">A<br>B<br>C</div>')); 
    $('#theFontResizeCaptureDiv').css({visibility: 'hidden', position: 'absolute'}); 

    window.setInterval(function(){ 
    var div = $('#theFontResizeCaptureDiv'); 
    var stored = parseInt(div.attr('c_height')); 
    if(isNaN(stored)){ // first run 
     div.attr('c_height', div.innerHeight()); 
    }else if(stored != div.innerHeight()){ // changed 
     div.attr('c_height', div.innerHeight()); 
     $('body').trigger('fontResize'); 
    } 
    }, 200); 
}); 
+0

[检测浏览器字体大小]的可能重复(http://stackoverflow.com/questions/739940/detect-browser-font-size)? – 2011-03-08 19:17:33

回答

0

您可以使用想法从这个文件https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js

我incorported它jQuery Terminal as jQuery plugin和使用DIV与&nbsp;和css:

.font { 
    position: absolute; 
    font-size: inherit; 
    top: 0; 
    left: 0; 
    width: 1em; 
    height: 1em; 
} 

如果父元素具有位置:relative或absolute,则会更改字体大小,.font元素将更改大小并触发resizer回调。

你可以使用这个插件是这样的:

var font = $('<div class="font">&nbsp;</div>').appendTo(self); 

font.resizer(function() { 
    // font changed size 
}); 

其中self是你的父元素,如果你需要检测身体上的这个事件,你可以使用'body'代替。