2016-08-24 57 views
5

我有這樣我的網頁上不同的部分:如何讓當前div部分的名稱顯示在另一個div中?

<div class="red" data-section="Section Red"></div> 
<div class="blue" data-section="Section Blue"></div> 
<div class="yellow" data-section="Section Yellow"></div> 
<div class="green" data-section="Section Green"></div> 

和一個單獨的DIV像這樣:

<div class="current_div"></div> 

該div始終是在頁面的頂部。如何讓這個當用戶滾動到blue(或任何其他的)DIV,該current_div會變成這樣:

<div class="current_div">Section Blue</div> 

這裏是我的標記小提琴:https://jsfiddle.net/wb7L954v/1/

必須有一個簡單的方法來獲得data-section部分,並簡單地把它放在該div內?

+0

這看起來像你還沒有研究過它。在問之前,你應該搜索。不過,我會給你一個[提示](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop) –

+0

我確實在搜索,但我不知道它會是什麼調用。我花了12小時搜索(不是開玩笑)。我發現最接近的是Bootstrap樣式菜單,它突出顯示了當前部分,但不幸的是,這並沒有幫助我理解div中的「數據部分」部分。在寫這裏之前,我已經用盡了幾乎所有選項,相信我:) – user1996496

+0

感謝[this](http://stackoverflow.com/questions/6597904/scrollable-div-which-elements-can-be-seen)http: //jsfiddle.net/U4qyp/32/ –

回答

5

步驟:

  • 獲得與data-section屬性
  • 所有元素上scroll事件做
    • 迭代所有元素(從最後一個)
    • 如果當前scrollTop大於該元素的offsetTop,這是我們正在尋找的元素
    • 寫在相應頭,該元素的data-section屬性的值

參見:https://jsfiddle.net/Leydfd5b/

+0

謝謝你太多了!我花了12個小時試圖讓這個工作,甚至無法找到從哪裏開始。真的,非常感謝您抽出時間:) – user1996496

+0

如果答案對您有幫助,您可能希望將答案標記爲已接受,以便可以讓出現類似問題的用戶更輕鬆地找到答案。 – Christoph

1

您需要的最高點偏移比較主要的div每個彩色部分。

$(window).scroll(function() { 
    var $div = $(".current_div").offset().top; 
    if($div >= $(".red").offset().top) 
    $(".current_div").text("Section Red"); 
    if($div >= $(".blue").offset().top) 
    $(".current_div").text("Section Blue"); 
    if($div >= $(".yellow").offset().top) 
    $(".current_div").text("Section Yellow"); 
    if($div >= $(".green").offset().top) 
    $(".current_div").text("Section Green"); 
}); 

實施例:https://jsfiddle.net/DinoMyte/wb7L954v/2/

2

這是爲每一個滾動方向工作的例子。

HTML:

<div class="current_div">current div</div> 

<div class="red" data-section="Section Red">red</div> 
<div class="blue" data-section="Section Blue">blue</div> 
<div class="yellow" data-section="Section Yellow">yellow</div> 
<div class="green" data-section="Section Green">green</div> 

CSS(測試):

*{margin: 0;} 
.current_div{position: fixed;background: #ccc;top: 0;width: 100%;} 
.red, .blue, .yellow, .green{height: 500px;} 
.red{background: red;} 
.blue{background: blue;} 
.yellow{background: yellow;} 
.green{background: green;} 

的jQuery:

$.fn.isOnScreen = function() { 
    var win = $(window); 
    var viewport = { 
     top: win.scrollTop(), 
     left: win.scrollLeft() 
    }; 
    viewport.right = viewport.left + win.width(); 
    viewport.bottom = viewport.top + win.height(); 
    var bounds = this.offset(); 
    bounds.right = bounds.left + this.outerWidth(); 
    bounds.bottom = bounds.top + this.outerHeight(); 
    return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom)); 
}; 

var currentDiv = $('.current_div'); 

$(window).scroll(function() { 
    if ($('.red').isOnScreen() == true) { 
     currentDiv.text($('.red').data('section')); 
    } 
    else if($('.blue').isOnScreen() == true){ 
     currentDiv.text($('.blue').data('section')); 
    } 
    else if($('.yellow').isOnScreen() == true){ 
     currentDiv.text($('.yellow').data('section')); 
    } 
    else if($('.green').isOnScreen() == true){ 
     currentDiv.text($('.green').data('section')); 
    } 
}); 

工作例如:https://jsfiddle.net/1aakar8s/1/

如果需要上下滾動小號o你可以使用這個jQuery代碼:

$.fn.isOnScreen = function() { 
    var win = $(window); 
    var viewport = { 
     top: win.scrollTop(), 
     bottom: this.top + win.height() 
    }; 
    var bounds = this.offset(); 
    bounds.bottom = bounds.top + this.outerHeight(); 
    return (!(viewport.bottom < bounds.top || viewport.top > bounds.bottom)); 
}; 
+0

這很有道理。我會研究這個。謝謝 :) – user1996496

相關問題