0

下面的函数将改变<meta ... content="...densityDPI=250dpi" /> 密度 DPI 将在每次循环时减少 20dpi。

有没有办法可以加快速度,所以它通过比较先前值的比率在大约 4 个循环中完成......?x++我认为在可以将 5 更改为更大一点的东西之前应该有一些东西,这样会$(window).width()==480更快。

$(document).ready(function (){
        $('meta[name="viewport"]').remove();
        $('<meta name="viewport" id="the_vp_special" content="width=320,target-densityDPI=250dpi"/>').appendTo('head');
        setTimeout(function (){
            var x = 0;
            var changeDPI = function (curr){
                x++;
                var sub = 5;
                if(x>500)  return false;
                var curr = curr?parseInt(curr):320;
                curr = curr-sub;
                var txt = $('<meta/>',{name:"viewport",id:"the_vp_special",content:"width=320,initial-scale=1,target-densityDPI="+(parseInt(curr))+"dpi"}); 
                $('#the_vp_special').replaceWith(txt)
                if($(window).width()==480) {}
                else setTimeout(function (){ changeDPI(curr); },5);
            }
            changeDPI(250);
        }, 2500);
    });

请询问,如果不清楚,我会尽力解释。

4

1 回答 1

1

好的,让我直截了当地说:您想要的是将客户端的 dpi 设置为一个值x,以便客户端的视口跨越的宽度正好是480px.

现在,您有两个选项,具体取决于您设置的 dpi 和显示的像素之间的关系。

  1. 如果是线性关系(这对我来说最有意义):

    $(function)( {
        var dpi = 250,
            width;
    
        $('meta[name="viewport"]').remove();
        $('<meta name="viewport" id="the_vp_special" content="width=320,target-densityDPI=250dpi"/>').appendTo('head');
    
        setTimeout(function() {
            width = $(window).width();
            dpi   = Math.round((480 * dpi) / width);
    
            $('#the_vp_special').replaceWith(
                $('<meta/>', {
                    name: "viewport",
                    id: "the_vp_special",
                    content: "width=320 ... target-densityDPI="+dpi+"dpi"
                })
            );
        }, 2500);            
    });
    
  2. 在任何其他关系的情况下,您可能希望使用具有 O(log n) 的最差/平均情况性能的二进制搜索。鉴于您的 250 dpi 并缩小到 - 比如说 - 72 dpi,这将产生平均 7 次尝试来找到正确的分辨率。
    (明天我会用一个例子更新我的帖子……等等)。

于 2012-11-02T22:27:43.133 回答