【问题标题】:Reload the page just once if a div is above certain position如果 div 高于某个位置,则仅重新加载页面一次
【发布时间】:2015-06-15 21:52:32
【问题描述】:

如果给定 div 的位置高于position:absolute; top:15%,我只想重新加载一次页面。

我认为这可以通过 jQuery 的 .css 方法来完成,例如:

if ('#mydive').css('top') > '15%' {
    //reload the page
}

有人能推荐一个简单的解决方案吗,最好是 jQuery 或纯 JavaScript?

【问题讨论】:

  • 您的 div 的顶部位置大于 15% 什么?另一个容器或整个文档?
  • 我的意思是:位置:绝对;最高:15%; – 即浏览器窗口当前大小的 15%。

标签: javascript jquery if-statement reload css-position


【解决方案1】:

如果您的意思是文档的顶部,您可能可以尝试:

var percent = .15; // 15%
if ($('#yourdiv').offset().top > ($(document).height() * percent)) {
    window.location.reload();
}

// if by pixels
var pixels = 10; // 10px
if ($('#yourdiv').offset().top > pixels) {
    window.location.reload();
}

【讨论】:

  • 这看起来正是我想要的。但是我该如何进行实际的重新加载?你能写完整的吗?
  • @Dimitri Vorontzov,我添加了window.location.reload,以便在页面点击该标记后重新加载
  • 由于某种原因,它不断地重新加载和重新加载,即使实际位置低于 15%。您能否编写一个单独的 sn-p 来做同样的事情,但基于 div 的像素位置?例如,div的顶部是否高于10px?我将不胜感激。
  • @Dimitri Vorontzov,查看我更新的代码。我将position().top 更改为offset().top,因此它相对于父级的顶部而不是它的偏移父级(一些包含div 的容器)进行检查。我还按像素添加了另一个样本。
  • 谢谢 tradybix!但是为什么页面一直在重新加载?
【解决方案2】:

你可以使用Computed Style检查一个div的当前位置

如果你有一个喜欢的动画或拖放,你可以使用 onmousemove 事件来跟踪 div 的位置。但请注意,mousemove 将针对它移动的每个像素触发,并且我会使用大量处理时间,因此请谨慎使用它:)

【讨论】:

  • 有点离谱,伊布。没有鼠标移动,没有拖放。只是最简单的事情:如果 mydiv top 大于 15%,则重新加载。但我会很感激正确的语法。 :-)
【解决方案3】:

好吧,因为你没有提供代码,所以很难说你应该如何确定 div 的位置,但基本上你应该编写一个函数来获取窗口高度和 div 相对于顶部的偏移量窗口来确定它是否高于 15%。然后,您需要每次使用 window.onscroll 事件侦听器调用此函数。当函数返回true时,触发触发window.location.reload(true)重新加载页面。我想这在 jQuery 中也可以很容易地完成。

【讨论】:

    【解决方案4】:

    以上答案为您指明了正确的方向,但为了“仅重新加载页面一次”,您需要额外的成分。您需要一种方法来存储指示页面是否已重新加载的标志。
    假设您关注tradyblix's 代码。
    您应该在重新加载页面之前检查该标志:

    if (hasReloaded() && $('#yourdiv').offset().top > ($(document).height() * percent)) {
         reload();
    }
    

    其中hasReloaded 是一个确定页面是否已重新加载的函数,它可以是向服务器发送 ajax 请求、检查 cookie 甚至是 localStorage 对象的函数:

    function hasReloaded(){
        return !!localStorage['reloaded'];
    }
    

    为了设置该标志,您的 reload 函数需要访问 localStorage(或 cookie 或 ajax 服务器响应):

    function reload(){
        localStorage['reloaded'] = true;
        window.location.reload();
    }
    

    这只是您应该如何编写此功能的草图。

    【讨论】:

    • 这听起来不错,gion_13,但我可以请你为我写下那个 sn-p 吗?
    • 这对于实现localStorage html5 功能(Ie7+,chrome,firefox 3.5+)的浏览器应该可以正常工作
    猜你喜欢
    • 2014-12-05
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多