以下功能会更改<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);
});
请问,如果不清楚,我会尽力解释一下。
答案 0 :(得分:1)
好的,让我直截了当地说:你想要的是将客户端的dpi设置为值x
,以便客户端的视口宽度超出480px
。
现在,您有两个选项,具体取决于您设置的dpi与显示的像素之间的关系。
如果是线性关系(这对我来说最有意义):
$(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);
});
如果存在任何其他关系,您可能希望使用binary search,其最差/平均案例性能为O(log n)。鉴于你的250 dpi并缩小到 - 比方说 - 72 dpi,这将平均产生7次尝试以找到正确的分辨率。
(我明天会用一个例子来更新我的帖子......等等。)