簡體   English   中英

javascript的觸發點取決於視口大小

[英]Trigger points for javascript depending on viewport size

因此,我正在編碼一個網站,當您向下滾動頁面時,該網站會觸發某些事件。 我希望事件在相關元素到達視口下約四分之一的位置時觸發。

但是,此觸發點對於不同大小的視口顯然是不同的。 我已經解決了如何計算該觸發點的方法,但是我還沒有找到一種方法來獲取div相對於視口/頁面頂部的位置。

我正在嘗試使用.offset(),可以將其與getPageScroll()組合以找到正確的點,但是我不知道到底該如何處理它返回的數組。 我也嘗試過將其彈出到變量中,並使用下面的語法(在jquery.com文檔中使用),但這顯然是錯誤的,並在控制台中返回Undefined。

我對Javascript和jQuery以及任何一般的程序設計都是陌生的,所以請原諒任何愚蠢之處。 如果我全都倒過來,那也是完全有效的答案! 如果是這種情況,請直接指出正確的方向。

到目前為止,我已經像這樣編碼了。 目前,實際效果只是占位符-我只是想使基本框架正常工作:

// getPageScroll() by quirksmode.com - adapted to only return yScroll
function getPageScroll() {
    var yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
      yScroll = document.documentElement.scrollTop;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
    }
    return yScroll
}

// Adapted from getPageSize() by quirksmode.com
function getPageHeight() {
    var windowHeight
    if (self.innerHeight) { // all except Explorer
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowHeight = document.body.clientHeight;
    }
    return windowHeight
}



var containers = $('div.container');
var element_1 = $('#part_one');
var element_2 = $('#part_two_1');
var element_3 = $('#part_two_2');
var element_4 = $('#part_two_3');
var element_5 = $('#part_two_4');
var element_6 = $('#part_three');
var element_7 = $('#part_four');
var element_8 = $('#part_five');

var docHeight = $(document).height();

$(window).scroll(function() {

    var offset = offset();
    var docHeight = $(document).height();

    var pageBottom = getPageScroll() + getPageHeight(); 

    var quarterPoint = getPageScroll()+((pageBottom-getPageScroll())/4)
    var halfwayPoint = getPageScroll()+((pageBottom-getPageScroll())/2)
    var threeQuarterPoint = pageBottom-((pageBottom-getPageScroll())/4)
    var triggerPoint = quarterPoint-(getPageHeight/10)

    if (triggerPoint < element_1.offset.top){

        containers.stop().animate({backgroundColor: "white", color: "#aaa"}, 50);
        element_1.stop().animate({backgroundColor: "#ffa531", color: "white"}, 300, function(){
            $(this).children().stop().animate({opacity: "1"}, 300);
        });


    };

    if (triggerPoint > element_2.offset.top){

        containers.stop().animate({backgroundColor: "white", color: "#aaa"}, 50);
        element_2.stop().animate({backgroundColor: "#d900ca", color: "white"}, 300, function(){
            $(this).children('img').stop().animate({opacity: "1"}, 300);
        });


    };

    if (triggerPoint > element_3.offset(top)){

        containers.stop().animate({backgroundColor: "white", color: "#aaa"}, 50);
        element_3.stop().animate({backgroundColor: "#d900ca", color: "white"}, 300);


    };

依此類推,直到8到12個觸發點之間。

任何幫助將不勝感激!

我在這里看到的幾件事:

var offset = offset(); // i don't believe this is a global function.

if (triggerPoint < element_1.offset.top) { // offset needs to be offset(), its a function not a property

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM