【问题标题】:identifying when items are in view and out of view on website识别项目何时在网站上可见和不可见
【发布时间】:2012-11-12 20:43:28
【问题描述】:

我正在构建一些代码来尝试在图像在视图中时发生某些事情,然后在图像不在视图中时重置计数器,如果图像返回视图,则再次发生相同的事情。

我的代码可以识别图像何时进入视野并执行某些操作,但是当我添加代码以在图像不在视野时重置计数器时,整个事情就停止了工作。

html:

<div style="height: 2000px">
<img  height="320px" width= "240px" id="pbr" src="http://i47.tinypic.com/33bztj8.jpg" alt="image 1">
<img height="320px" width= "240px" id="pbrglow" src="http://i48.tinypic.com/2ykduvl.jpg" alt="image 2">
<button id="button">click to reset</button>
</div>

css:

#pbr {
    position: absolute;   
    top: 500px;
    z-index: 0;
}
#pbrglow {
    position: absolute;             
    display: none;
    top: 500px;
    z-index: 1;

}
#button {
    position: absolute;
    top: 850px;
    z-index: 3;
}

javascript:

var y = $("#pbr").offset().top;
var eventsFired = 0;

$(window).scroll(function() {
    var y = $("#pbr").offset().top;
    var scrollY = $(window).scrollTop();
    if (scrollY + 100 > y && eventsFired == 0) {
        eventsFired++;
        alert(eventsFired);
    }
});


$("#button").on("click", function() {
    var scrollYY = $(window).offsetTop();
    if (eventsFired == 1) {
        alert("happened");
        eventsFired = 0;
    }
}

这是带有代码的jsfiddle

一旦我删除了以 $("#button")... 开头的代码,代码就可以工作,但代码中的 this 就不行了。

附:这是我需要在 iOS 上工作的网站。

【问题讨论】:

  • 我知道你说你的目标是iOS,但是你在其他浏览器上试过了吗?它在哪些方面起作用,在哪些方面不起作用?控制台中是否有 JS 错误?
  • 我在 iOS 上运行它的原因是因为它被用作我在手机上向某人展示的演示。我不断收到一条错误消息:ReferenceError: resetfunction is not defined @fiddle.jshell.net/_display/:1。不知道为什么它说我没有定义函数。更新了 jsfiddle - jsfiddle.net/esegev1/ZwJpw/7
  • 在您的示例中,您的 html 在单击按钮时调用了 resetfunction()。但是您永远不会在任何地方定义 resetfunction 。我对 iOS 的评论并不是说您不应该使用 iOS,而是您可以在非 iOS 浏览器上进行测试以帮助诊断问题。
  • 这就是我有点不清楚的地方。在javascript中,我有代码函数resetfunction(),不是定义函数吗?对不起,我还是很新。我改变了 jsfiddle - jsfiddle.net/esegev1/ZwJpw/9
  • 我完全看不到function resetfunction()

标签: javascript ios scroll offset


【解决方案1】:

那是因为您的 #button 点击处理程序抛出错误:

Uncaught TypeError: Object [object Object] has no method 'offsetTop'

如果您打开了控制台,您可以在 jsFiddle 页面上看到它(您可以通过 Settings->Safari->Developer 为移动 Safari 启用控制台)。

那个问题是$(window) 没有offsetTop() 方法。如果你摆脱了那条线(而且你也不需要它,因为你从来没有使用过scrollYY),一切正常。

【讨论】:

  • 谢谢阿米特。我删除了 offsetTop() 行,但它仍然不起作用。我还意识到我没有从 html 按钮调用该函数。但是现在我添加了该代码它仍然无法正常工作。当我单击图像下方的按钮时,它应该会打开一个警报。您介意查看更新的 jsfiddle 并查看是否有任何问题。谢谢。 jsfiddle.net/esegev1/ZwJpw/7
  • 这是我单击按钮时得到的结果 -- [13:23:49.415] ReferenceError: resetfunction is not defined @fiddle.jshell.net/_display/:1。不知道我需要如何“定义”它。
  • 出现错误是因为浏览器找不到resetfunction。也许通常情况下(即不在 jsFiddle 内)它可能会按照您的方式工作,bc resetfunction 将是全局范围的一部分。但是,即使它可以工作,通过全局范围放置和调用函数也不是很好的形式。最好取出onclick="resetfunction();" 位,并通过javascript 订阅按钮单击事件:$('button').click(resetfunction);(只需在代码中的某处添加此行)。另外,您应该将所有代码包装在 $.ready(function() { /* all your code here */ });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 2021-04-11
相关资源
最近更新 更多