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

わかりましたので、これを簡単に説明しましょう。必要なのはx、クライアントのビューポートが正確に の幅になるように、クライアントの dpi を値に設定することです480px

設定した dpi と表示されるピクセルの関係に応じて、2 つのオプションがあります。

  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 に答える