0

我知道以前有人问过这个问题,但是这些解决方案对我不起作用。这可能与使用的图像有关。

这是我的html:

<div id="tour">
    <section class="first js-background"> // this section is repeated 5 more times
        <div class="background js-first"></div>//image located in here 300 px height
        <div class="copy">
            <h6>Line one</h6>
            <h1 class="space large">Line two</h1>
            <h6>Line three</h6>
        </div>
    </section>
</div>

javascript 检查是否可见:

 $('.js-background').each(function(x, item) {
      var $current = $(item),
      $window = $(window),
      elemTop = $current.offset().top,
      elemBottom = elemTop + $current.height(),
      docViewTop = $(window).scrollTop(),
      docViewBottom = docViewTop + $(window).height(),

      if ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)
    && (elemBottom <= docViewBottom) &&  (elemTop >= docViewTop) ) {
         //do code here if true
      }
 }

我也试过这个插件

带代码:

if ($current.visible()) {
   //if visible do something
}

对于这两种类型的代码,当我触发函数时,只有第一部分在浏览器窗口中可见。if 语句返回 true 6 次。

图像是背景而不是 img 标签

CSS:

#tour .first .background{
    background: url('/Content/images/1.jpg') center center no-repeat;
    background-size: 100%;
    height: 350px;
}
4

3 回答 3

0

您可以使用 jQuery 的:visible检查。只需选择像这样的元素if($('.first').is(':visible')){ //do something }

于 2013-08-30T17:01:56.230 回答
0

稍微整理了你的代码,没有.在每个变量中class=""分开var,似乎在jsFiddle上对我有用(如果你在 5 秒内向下滚动,它会给你正确的警报)

$('.js-background').each(function(x, item) {
  var $current = $(item);
  var $window = $(window);
  var elemTop = $current.offset().top;
  var elemBottom = elemTop + $current.height();
  var docViewTop = $(window).scrollTop();
  var docViewBottom = docViewTop + $(window).height();

  if ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)
&& (elemBottom <= docViewBottom) && (elemTop >= docViewTop) ) {
     alert(x + ' is visible');
  }
});
于 2013-08-30T17:51:25.407 回答
0

我不明白你的问题,但要检查页面使用中是否存在元素length。例如检查是否div存在id='tour'页面:

 if($('#tour').length>=1) { 
    //some code here
  }
于 2013-08-29T23:30:40.613 回答