jquery,在滚动时在某个位置找到div类名

时间:2012-10-30 10:50:21

标签: javascript jquery

固定的div(fixed_div)位于顶部,可在其中显示Google地图。然后一个大的div(big_div)留在它下面。大的div里面有许多带有small_div类的小div。每个小div都有一个id small_div_n,其中n = 0,1,2,3 ..连续。大div在固定div下方滚动。

HTML:

<div class="fixed_div" >
</div><!-- end of class fixed_div -->

<div class="big_div">
    <div class="small_div" id="small_div_0">
    </div><!--end of class small_div -->
    <div class="small_div" id="small_div_1">
    </div><!--end of class small_div -->
    <div class="small_div" id="small_div_2">
    </div><!--end of class small_div -->
</div><!--end of class big_div -->

的CSS:

.fixed_div {
  position:fixed;
  height:100px;
}

.big_div {
  padding-top:100px;
}

.small_div {
  min-height:80px;
}

小div具有可变高度属性。

如果我能够知道新的small_div已到达固定div的下半部分,我可以找到相应的小{div} id并且可以了解哪个谷歌地图是通过ajax调用在固定div中显示。

如何感知新的small_div已到达固定div的下半部分?

编辑:大div有min-height属性。

2 个答案:

答案 0 :(得分:0)

<script>
(function() {
    var fixed = $('div.fixed_div');
    $(window).on('scroll',function() {
    var currentFixedDivPosition = fixed.position().top + fixed.height() + $(window).scrollTop();
    var temp, whichOne;
        $('div.small_div').each(function(i,s) {
        var diff = Math.abs($(s).position().top - currentFixedDivPosition);
            if(temp) {
                    if(diff < temp) {
                        temp = diff;
                        whichOne = s;
                    }
            }else {
                temp = diff;
                whichOne = s;
            }           
        });
        console.log(temp, $(whichOne).attr('id') + ' was closest');
    });
})();
</script>

这是一个小提琴:http://jsfiddle.net/s3JKk/,我不确定我是否理解你想要的东西,但我希望这至少会给你一些开始。祝你好运!

答案 1 :(得分:0)

希望以下代码能够达到目的,

  1. 我添加了一个代码,可以将一个小DIV元素动态附加到big_div元素上
  2. 然后我添加了一个事件侦听器,该侦听器可检测到big_div中的任何新条目

// the system will append a new DIV when the button is clicked
document.getElementById("add").addEventListener("click", function(){
  addDiv();
});

// an event listener which listenes to any new added element to big_div
$('#big_div').on('DOMNodeInserted', function(e) {
    // here I am getting the id of the last added element
    var newdivid = document.getElementById("big_div").lastChild.id;
    document.getElementById("div_status").innerHTML = "new small div added, id: " + newdivid;    
});

function addDiv() {
  var smalldiv = document.createElement("div");
  // here I am setting the id of the newly created DIV to any random string
  smalldiv.setAttribute("id", Math.random().toString(36).slice(-5));
  smalldiv.appendChild(document.createTextNode("small div"));
  document.getElementById("big_div").appendChild(smalldiv);
}
.fixed_div {
  position:fixed;
  height:100px;
}

.big_div {
  padding-top:100px;
}

.small_div {
  min-height:10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fixed_div" >
  fixed div
  <p id="div_status">No Status</p>
</div><!-- end of class fixed_div -->

<div class="big_div" id="big_div">
    <div class="small_div" id="small_div_0">
      div 0
    </div><!--end of class small_div -->
</div><!--end of class big_div -->  
<button type="button" id="add">Add Small DIV</button>