JS - 如果窗口高度小于___px,请执行某些操作 - 此代码有什么问题?

时间:2015-07-04 14:15:00

标签: javascript html height

我正在尝试将用户发送到其他网址,如果他们的浏览器高度小于某个值。我希望它一直在检查这个,所以使用了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像素,重定向也不起作用。我有什么明显的遗失吗?

4 个答案:

答案 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是不是很小?这些是毫秒。这是第一件事,第二件事是:

  

我看不出它有什么问题......

所以,如果你看不出任何错误,那我们该怎么做?你的确切问题是什么?它没有重定向?控制台显示什么?有错误吗?