加快递归功能

时间:2012-11-02 17:19:09

标签: javascript jquery

以下功能会更改<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);
    });

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

1 个答案:

答案 0 :(得分: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. 如果存在任何其他关系,您可能希望使用binary search,其最差/平均案例性能为O(log n)。鉴于你的250 dpi并缩小到 - 比方说 - 72 dpi,这将平均产生7次尝试以找到正确的分辨率。
    (我明天会用一个例子来更新我的帖子......等等。)