วิธีการตรวจจับตำแหน่งการเลื่อนของหน้าโดยใช้ jQuery


183

ฉันมีปัญหากับการทำงานของ jQuery ในเว็บไซต์ของฉัน มันทำอะไรคือมันใช้window.scroll() ฟังก์ชั่นในการจดจำเมื่อหน้าต่างเปลี่ยนตำแหน่งการเลื่อนและเมื่อการเปลี่ยนแปลงเรียกใช้ฟังก์ชั่นบางอย่างเพื่อโหลดข้อมูลจากเซิร์ฟเวอร์

ปัญหาคือ.scroll()ฟังก์ชั่นถูกเรียกใช้ทันทีที่มีการเปลี่ยนแปลงเล็กน้อยในตำแหน่งเลื่อนและโหลดข้อมูลที่ด้านล่าง อย่างไรก็ตามสิ่งที่ฉันต้องการบรรลุคือการโหลดข้อมูลใหม่เมื่อเลื่อนตำแหน่ง / หน้าถึงด้านล่างเช่นที่เกิดขึ้นสำหรับฟีด Facebook

แต่ฉันไม่แน่ใจวิธีตรวจจับตำแหน่งการเลื่อนโดยใช้ jQuery?

function getData() {
  $.getJSON('Get/GetData?no=1', function (responseText) {
    //Load some data from the server
  })
};

$(window).scroll(function () {
    getData();
});

สิ่งนี้ตอบคำถามของคุณหรือไม่ วิธีตรวจจับทิศทางการเลื่อน
Aryan Beezadhur

คำตอบ:


322

คุณสามารถแยกตำแหน่งการเลื่อนโดยใช้.scrollTop()วิธีการของ jQuery

$(window).scroll(function (event) {
    var scroll = $(window).scrollTop();
    // Do something
});

9
การแนบเหตุการณ์ไปยังการเลื่อนหน้าต่างเป็นความคิดที่ไม่ดี: ดูstackoverflow.com/questions/5036850/…
hendr1x

13
การฟังการเลื่อนหน้าต่างไม่ได้แย่ในตัวมันเอง เมื่อผู้คนพยายามทำสิ่งต่าง ๆ ในแต่ละเหตุการณ์ที่มีปัญหาเกิดขึ้น หากคุณทำอะไรบางอย่างเช่นตั้งค่าตัวแปรให้อยู่ในตำแหน่งเลื่อนปัจจุบันหรือเป็นจริง / เท็จจากนั้นใช้ประโยชน์จากสิ่งที่อยู่ภายนอกเหตุการณ์โดยทั่วไปคุณควรเป็นสีทอง
Jesse Dupuy

7
คุณควรพิจารณาทำการ debouncing เมื่อทำงานกับเหตุการณ์ประเภทนี้ ดูdavidwalsh.name/javascript-debounce-function
caroso1222

ตามที่คุณมีอยู่แล้วeventในฐานะอาร์กิวเมนต์คุณสามารถได้รับข้อมูลเดียวกันจากevent.originalEvent.pageY;
Antoniossss

119

คุณกำลังมองหาwindow.scrollTop()ฟังก์ชั่น

$(window).scroll(function() {
    var height = $(window).scrollTop();

    if(height  > some_number) {
        // do something
    }
});

36

ตรวจสอบที่นี่ DEMO http://jsfiddle.net/yeyene/Uhm2J/

function getData() {
    $.getJSON('Get/GetData?no=1', function (responseText) {
        //Load some data from the server
    })
};

$(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() == $(document).height()) {
       alert("bottom!");
       // getData();
   }
});

6
$(window).scroll( function() { 
 var scrolled_val = $(document).scrollTop().valueOf();
 alert(scrolled_val+ ' = scroll value');
});

นี่เป็นอีกวิธีหนึ่งในการรับค่าของการเลื่อน


4

ตอนนี้ใช้งานได้สำหรับฉัน ...

$(document).ready(function(){

    $(window).resize(function(e){
        console.log(e);                   
    });

    $(window).scroll(function (event) {
        var sc = $(window).scrollTop();
        console.log(sc);
    });

})

มันทำงานได้ดี ... และจากนั้นคุณสามารถใช้ JQuery / TweenMax เพื่อติดตามองค์ประกอบและควบคุมพวกมัน


5
โปรดหลีกเลี่ยงคำพูดเหลวไหลและคำที่ไม่ดีอย่างแน่นอน อ่านศูนย์ช่วยเหลือ
Kyll

2

เก็บค่าของการเลื่อนเป็นการเปลี่ยนแปลงใน HiddenField เมื่อรอบ PostBack ดึงค่าและเพิ่มการเลื่อน

//jQuery

jQuery(document).ready(function () {

    $(window).scrollTop($("#<%=hidScroll.ClientID %>").val());

    $(window).scroll(function (event) {
        $("#<%=hidScroll.ClientID %>").val($(window).scrollTop());
    });
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function () {

    $(window).scrollTop($("#<%=hidScroll.ClientID %>").val());

    $(window).scroll(function (event) {
        $("#<%=hidScroll.ClientID %>").val($(window).scrollTop());
    });
});

//Page Asp.Net
<asp:HiddenField ID="hidScroll" runat="server" Value="0" />

0

คุณสามารถเพิ่มหน้าทั้งหมดด้วยรหัสนี้:

รหัส JS:

 /* Top btn */
    $(window).scroll(function() {
        if ($(this).scrollTop()) {
            $('#toTop').fadeIn();
        } else {
            $('#toTop').fadeOut();
        }
    });
    var top_btn_html="<topbtn id='toTop' onclick='gotoTop()'>&#8593;</topbtn>";
    $('document').ready(function(){
        $("body").append(top_btn_html);
    });
    function gotoTop(){
        $("html, body").animate({scrollTop: 0}, 500);    
    }
    /* Top btn */

รหัส CSS

/*Scrool top btn*/
#toTop{
    position: fixed;
    z-index: 10000;
    opacity: 0.5;
    right: 5px;
    bottom: 10px;
    background-color: #ccc;
    border: 1px solid black;
    width: 40px;
    height: 40px;
    border-radius: 20px;
    color: black;
    font-size: 22px;
    font-weight: bolder;
    text-align: center;
    vertical-align: middle;
}

0
$('.div').scroll(function (event) {
 event.preventDefault()
 var scroll = $(this).scrollTop();
 if(scroll == 0){
   alert(123)
 }
});

รหัสนี้สำหรับ chat_boxes สำหรับการโหลดข้อความก่อนหน้า


0

รับตำแหน่งเลื่อน:

var scrolled_val = window.scrollY;

ตรวจสอบตำแหน่งการเลื่อน:

$(window).scroll
(
     function (event) 
     {
          var scrolled_val = window.scrollY;
          alert(scrolled_val);
     }
 );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.