我正在尝试将用户发送到其他网址,如果他们的浏览器高度小于某个值。我希望它一直在检查这个,所以使用了setInterval函数。我看不出它有什么问题......
这是我正在使用的代码:
<script type="text/javascript">
//if window height is less than 605px, go to google
setInterval(function changeFont() {
if (window.innerHeight < 605) {
window.location = "http://google.com";
}
}, 1);
</script>
在此之前,我运行的代码非常有效:
<script type="text/javascript">
//if window is wider than 1340px, send to desktop
setInterval(function sendToDesktop() {
if (window.innerWidth >= 1340) {
window.location = "../index.html";
}
}, 1);
</script>
当我将代码用于屏幕高度时,即使屏幕高度低于605像素,重定向也不起作用。我有什么明显的遗失吗?
答案 0 :(得分:4)
问题是时间,你给了1 ..意味着小于毫秒...你给了一个非常小的值。
所以会发生的事情是脚本执行得如此之快以至于不会发生重定向。我测试了这个,提供10000个1,它工作了!因此,您必须更改1或使用下面显示的代码(每次检查窗口高度)
<script>
function setWindowHeight(){
var windowHeight = window.innerHeight;
if (windowHeight < 605) {
window.location = "http://google.com";
}
}
window.addEventListener("resize",setWindowHeight,false);
</script>
答案 1 :(得分:0)
使用计时器在这里真的是一个废话。只需定义一个函数,该函数检查窗口是否足够高并在调整大小时调用它。并且不要忘记在第一次加载时调用它。
function checkHeightredirectToGoogle() {
if (window.innerHeight < 605) {
window.location = "https://google.com";
}
}
window.addEventListener("resize", function(){
checkHeightredirectToGoogle()
});
checkHeightredirectToGoogle(); //first call
此解决方案将更容易编写和维护,并且在客户端的计算机上也更快,更不用说移动设备,其中的改进甚至更高。
答案 2 :(得分:0)
您正在做的是强制浏览器每隔1ms对一个函数进行排队。当浏览器最终进入队列时,它会看到等待运行的几百个函数。它运行的功能 - ALL 最终评估为
window.location = 'http://google.com'
因此,您的浏览器会在几毫秒内完成几百次重定向。虽然它正在疯狂地尝试这样做,但更多的功能正在排队。
查看您的代码,如果用户的屏幕为1440 x 600,则问题会更严重。两个重定向条件都将得到满足。
请在页面加载时检测并重定向,然后转而监听任何后续resize
事件。
window.addEventListener('resize', detectAndRedirect);
function detectAndRedirect() {
if (window.innerHeight < 605) {
window.location = 'whatever url';
}
else if (window.innerWidth >= 1340) {
window.location = 'whatever url';
}
}
如果你真的必须使用计时器来检测分辨率,那么更好的方法是:
var DETECT_PERIOD = 200; // set something sensible.
setTimeout(detectAndRedirect, DETECT_PERIOD);
function detectAndRedirect() {
if (window.innerHeight < 605) {
window.location = 'whatever url';
}
else if (window.innerWidth >= 1340) {
window.location = 'whatever url';
}
else {
setTimeout(detectAndRedirect, DETECT_PERIOD);
}
}
答案 3 :(得分:-1)
在这种情况下,你认为1
是不是很小?这些是毫秒。这是第一件事,第二件事是:
我看不出它有什么问题......
所以,如果你看不出任何错误,那我们该怎么做?你的确切问题是什么?它没有重定向?控制台显示什么?有错误吗?