मैं jQuery स्क्रॉल इवेंट की दिशा कैसे निर्धारित कर सकता हूं?


344

मैं इस आशय के लिए कुछ देख रहा हूँ:

$(window).scroll(function(event){
   if (/* magic code*/ ){
       // upscroll code
   } else {
      // downscroll code
   }
});

कोई विचार?


लोचदार स्क्रॉलिंग की समस्या वाले लोगों के लिए, कृपया इस उत्तर का उपयोग करें stackoverflow.com/questions/7154967/jquery-detect-scrolldown
टिमोथी डाल्टन

1
wheelइन दिनों घटना का उपयोग करने के लिए सबसे आसान : stackoverflow.com/a/33334461/3168107
शिक्कडेल

जवाबों:


699

वर्तमान scrollTopबनाम पिछले की जाँच करेंscrollTop

var lastScrollTop = 0;
$(window).scroll(function(event){
   var st = $(this).scrollTop();
   if (st > lastScrollTop){
       // downscroll code
   } else {
      // upscroll code
   }
   lastScrollTop = st;
});

16
इसके लिए कोई संवेदनशीलता सेट करने का कोई तरीका?
कोको कोडर

8
मैंने इस कोडपेन पर एक उदाहरण दिया । हो सकता है कि मैं लोकप्रियता के कारण jQuery प्लगइन के साथ इस उत्तर को अपडेट करूं।
योशिय्याह रूडेल

3
क्या आपने यह कोशिश की है यदि आप इस कोड वाले पिछले पृष्ठ पर वापस आते हैं? यदि आप अपने पृष्ठ को नीचे स्क्रॉल करते हैं, तो मान लें कि 500PX। दूसरे पृष्ठ पर जाएँ और फिर प्रारंभिक पृष्ठ पर वापस जाएँ। कुछ ब्राउज़र स्क्रॉल स्थिति रखते हैं और आपको पृष्ठ के नीचे वापस लाएंगे। क्या आपके पास lastScrollTop0 पर शुरू होगा या यह ठीक से आरंभीकृत होगा ??
TCHdvlp

7
@ TCHdvlp - अच्छी तरह से सबसे खराब स्थिति में पहला स्क्रॉल ईवेंट चर को अपडेट करेगा और दूसरा ईवेंट सटीक होगा (.. यह केवल बैक नेविगेशन के बाद होने वाले उतार-चढ़ाव पर ही बात करेगा)। var lastScrollTop = $(window).scrollTop()ब्राउज़र द्वारा पेज लोड पर स्क्रॉल स्थिति को अपडेट करने के बाद इसे सेट करके तय किया जा सकता है ।
जोसिया रुडेल 17

2
इस पर एक अपडेट: सावधान रहें कि कुछ ब्राउज़र, विशेष रूप से विंडोज 8 पर IE 11, एक स्क्रॉल ईवेंट सबपिक्सल-आधारित (चिकनी स्क्रॉलिंग) को आग लगा सकते हैं। लेकिन क्योंकि यह स्क्रॉलटॉप को पूर्णांक के रूप में रिपोर्ट करता है, इसलिए आपका पिछला स्क्रॉल मान वर्तमान के समान हो सकता है।
रेनैटो

168

आप पिछले स्क्रॉल शीर्ष का ट्रैक रखने के बिना कर सकते हैं, अन्य सभी उदाहरणों की आवश्यकता होती है:

$(window).bind('mousewheel', function(event) {
    if (event.originalEvent.wheelDelta >= 0) {
        console.log('Scroll up');
    }
    else {
        console.log('Scroll down');
    }
});

मैं इस पर एक विशेषज्ञ नहीं हूं, इसलिए इसे आगे अनुसंधान करने के लिए स्वतंत्र महसूस करें, लेकिन ऐसा प्रतीत होता है कि जब आप उपयोग करते हैं $(element).scroll, तो जिस घटना के लिए सुना जाता है वह एक 'स्क्रॉल' घटना है।

लेकिन यदि आप विशेष रूप से mousewheelबाइंड का उपयोग करके किसी ईवेंट के लिए सुनते हैं, तो originalEventआपके कॉलबैक में इवेंट पैरामीटर की विशेषता में अलग-अलग जानकारी होती है। उस जानकारी का एक हिस्सा है wheelDelta। यदि यह सकारात्मक है, तो आप मूसवेल को ऊपर ले गए। यदि यह नकारात्मक है, तो आप नीचे mewewheel चले गए।

मेरा अनुमान है कि mousewheelजब माउस स्क्रॉल करेगा तो भी घटनाएँ आग लगेंगी, भले ही पेज स्क्रॉल न हो; ऐसा मामला जिसमें 'स्क्रॉल' की घटनाओं को संभवत: निकाल नहीं दिया गया है। यदि आप चाहें, तो आप event.preventDefault()पृष्ठ को स्क्रॉल करने से रोकने के लिए अपने कॉलबैक के नीचे कॉल कर सकते हैं , और ताकि आप किसी पृष्ठ स्क्रॉल के अलावा किसी अन्य प्रकार की ज़ूम कार्यक्षमता की तरह कुछ और के लिए मूसवेल इवेंट का उपयोग कर सकें।


13
अच्छा लेकिन दुख की बात है कि केवल और केवल फ़ायरफ़ॉक्स ही इसका समर्थन नहीं कर रहा है। डेवलपर .mozilla.org/en-US/docs/DOM/DOM_event_reference/… (FF v15 में परीक्षण)। : C
nuala

8
यह मेरे लिए उपयोगी था: मुझे स्क्रॉलिंग का पता लगाने की आवश्यकता थी, भले ही पृष्ठ वास्तव में स्क्रॉल scrollTopन किया हो , इसलिए अपडेट नहीं किया। वास्तव में, $(window).scroll()आग बिल्कुल नहीं थी।
मार्टी लाईन

13
यह अच्छा है कि आपको पुराने राज्य की आवश्यकता नहीं है। हालाँकि यह तकनीक मोबाइल या टैबलेट पर काम नहीं करेगी, क्योंकि उनके पास एक मूसल नहीं है!
joeytwiddle

13
यदि मैं कीबोर्ड से स्क्रॉल करता हूं तो यह दृष्टिकोण काम नहीं करेगा। जूम जैसी चीजों के लिए यह निश्चित रूप से एक दिलचस्प दृष्टिकोण है, लेकिन मुझे नहीं लगता कि यह स्क्रॉल दिशा प्रश्न को संबोधित करता है।
चाक

6
$ ("html, बॉडी")। बाइंड ({'mousewheel DOMMouseScroll onmousewheel Touchmove स्क्रॉल': फंक्शन (ई) {// ...}); मेरे लिए सभी ब्राउज़र स्क्रॉल डेटा का पता लगाने में काम करता है
गोरेडेक्स

31

पिछले स्क्रॉल स्थान को संग्रहीत करें, फिर देखें कि क्या नया उससे अधिक या उससे कम है।

यहाँ किसी भी वैश्विक चर से बचने का एक तरीका है ( यहाँ उपलब्ध फिडेल ):

(function () {
    var previousScroll = 0;

    $(window).scroll(function(){
       var currentScroll = $(this).scrollTop();
       if (currentScroll > previousScroll){
           alert('down');
       } else {
          alert('up');
       }
       previousScroll = currentScroll;
    });
}()); //run this anonymous function immediately

29

मौजूदा समाधान

इस पोस्टिंग और अन्य उत्तर से 3 समाधान हो सकते हैं ।

समाधान 1

    var lastScrollTop = 0;
    $(window).on('scroll', function() {
        st = $(this).scrollTop();
        if(st < lastScrollTop) {
            console.log('up 1');
        }
        else {
            console.log('down 1');
        }
        lastScrollTop = st;
    });

समाधान २

    $('body').on('DOMMouseScroll', function(e){
        if(e.originalEvent.detail < 0) {
            console.log('up 2');
        }
        else {
            console.log('down 2');
        }
    });

समाधान 3

    $('body').on('mousewheel', function(e){
        if(e.originalEvent.wheelDelta > 0) {
            console.log('up 3');
        }
        else {
            console.log('down 3');
        }
    });

मल्टी ब्राउज़र टेस्ट

मैं इसे सफारी पर परीक्षण नहीं कर सका

क्रोम 42 (विन 7)

  • समाधान 1
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है
  • समाधान 3
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल

फ़ायरफ़ॉक्स 37 (विन 7)

  • समाधान 1
    • ऊपर: 1 स्क्रॉल प्रति 20 ईवेंट
    • नीचे: 1 स्क्रॉल प्रति 20 ईवेंट
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: 1 घटना प्रति 1 स्क्रॉल
  • समाधान 3
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है

IE 11 (विन 8)

  • समाधान 1
    • ऊपर: 10 घटनाएं प्रति 1 स्क्रॉल (साइड इफेक्ट: नीचे स्क्रॉल पिछले पर हुई)
    • नीचे: 10 घटनाएं प्रति 1 स्क्रॉल
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है
  • समाधान 3
    • अप: काम नहीं कर रहा है
    • नीचे: 1 घटना प्रति 1 स्क्रॉल

IE 10 (विन 7)

  • समाधान 1
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है
  • समाधान 3
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल

IE 9 (विन 7)

  • समाधान 1
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है
  • समाधान 3
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल

IE 8 (विन 7)

  • समाधान 1
    • ऊपर: 2 घटनाएं प्रति 1 स्क्रॉल (साइड इफेक्ट: नीचे स्क्रॉल पिछले पर हुई)
    • नीचे: 1 स्क्रॉल प्रति 2 ~ 4 इवेंट
  • समाधान २
    • अप: काम नहीं कर रहा है
    • नीचे: काम नहीं कर रहा है
  • समाधान 3
    • ऊपर: 1 घटना प्रति 1 स्क्रॉल
    • नीचे: 1 घटना प्रति 1 स्क्रॉल

संयुक्त समाधान

मैंने IE 11 से उस साइड इफेक्ट की जाँच की और IE 8 if elseस्टेटमेंट से आया है । इसलिए, मैंने इसे if else ifनिम्नलिखित के रूप में बयान के साथ बदल दिया ।

मल्टी ब्राउज़र टेस्ट से, मैंने सामान्य ब्राउज़र के लिए समाधान 3 और फ़ायरफ़ॉक्स और IE 11 के लिए समाधान 1 का उपयोग करने का निर्णय लिया ।

मैंने IE 11 का पता लगाने के लिए इस उत्तर को संदर्भित किया ।

    // Detect IE version
    var iev=0;
    var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
    var trident = !!navigator.userAgent.match(/Trident\/7.0/);
    var rv=navigator.userAgent.indexOf("rv:11.0");

    if (ieold) iev=new Number(RegExp.$1);
    if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
    if (trident&&rv!=-1) iev=11;

    // Firefox or IE 11
    if(typeof InstallTrigger !== 'undefined' || iev == 11) {
        var lastScrollTop = 0;
        $(window).on('scroll', function() {
            st = $(this).scrollTop();
            if(st < lastScrollTop) {
                console.log('Up');
            }
            else if(st > lastScrollTop) {
                console.log('Down');
            }
            lastScrollTop = st;
        });
    }
    // Other browsers
    else {
        $('body').on('mousewheel', function(e){
            if(e.originalEvent.wheelDelta > 0) {
                console.log('Up');
            }
            else if(e.originalEvent.wheelDelta < 0) {
                console.log('Down');
            }
        });
    }

यदि कोई इसका परिणाम जोड़ सकता है Safari browser, तो यह समाधान के पूरक के लिए सहायक होगा।
रासायनिक प्रोग्रामर

ऊप्स! मैंने पाया कि मोबाइल क्रोम और एंड्रॉइड डिफ़ॉल्ट ब्राउज़र केवल समाधान 1 द्वारा कवर किए जाते हैं, इसलिए विभिन्न ब्राउज़रों को कवर करने के लिए समाधान 1 और 3 दोनों का उपयोग करना बेहतर होगा।
रासायनिक प्रोग्रामर

काम नहीं करेगा यदि डिज़ाइन एक निश्चित लेआउट डिज़ाइन है। यदि आप स्थैतिक नो-स्क्रॉल वेबसाइट पर स्क्रॉल दिशा का पता लगाना चाहते हैं, तो फ़ायरफ़ॉक्स और IE11 काम नहीं करेगा
शैनन होकिन्स

मुझे लगता है कि जब मैं इसका उपयोग करता हूं तो यह क्रोम में "अन्य ब्राउज़रों" का उपयोग करता है, यह वास्तव में बहुत उपयोग नहीं होता है जब आप माउस व्हील और स्क्रॉल बार दोनों द्वारा स्क्रॉल का पता लगाना चाहते हैं। .scroll क्रोम में दोनों तरह की स्क्रॉलिंग का पता लगाएगा।
सैम

12

मैं समझता हूं कि पहले से ही एक स्वीकृत उत्तर है, लेकिन मैं पोस्ट करना चाहता हूं कि मैं किसी भी मामले में मदद कर सकता हूं। मुझे जैसी दिशा मिलती हैcliphex मूसिल इवेंट के साथ लेकिन फ़ायरफ़ॉक्स के लिए समर्थन के साथ। यदि आप स्क्रॉलिंग लॉकिंग जैसे कुछ कर रहे हैं और वर्तमान स्क्रॉल टॉप प्राप्त नहीं कर सकते हैं तो यह इस तरह से करना उपयोगी है।

यहां एक लाइव संस्करण देखें ।

$(window).on('mousewheel DOMMouseScroll', function (e) {

    var direction = (function () {

        var delta = (e.type === 'DOMMouseScroll' ?
                     e.originalEvent.detail * -40 :
                     e.originalEvent.wheelDelta);

        return delta > 0 ? 0 : 1;
    }());

    if(direction === 1) {
       // scroll down
    }
    if(direction === 0) {
       // scroll up
    }
});

@EtienneMartin उपरोक्त कोड jQuery पर निर्भर करता है अगर वह आपकी त्रुटि का कारण था। कृपया इसे काम करने के लिए संलग्न फ़िडेल देखें।
सुपाच्य

8

स्क्रॉल घटना

पुस्तक घटना एफएफ में अजीब तरह से बर्ताव करता है (यह चिकनाई स्क्रॉल की वजह से कई बार एक बहुत सक्रिय किया जाता है), लेकिन यह काम करता है।

नोट: पुस्तक घटना वास्तव में निकाल दिया जाता है जब स्क्रॉल पट्टी खींच, कर्सर कुंजियों या माउसव्हील का उपयोग कर।

//creates an element to print the scroll position
$("<p id='test'>").appendTo("body").css({
    padding: "5px 7px",
    background: "#e9e9e9",
    position: "fixed",
    bottom: "15px",
    left: "35px"
});

//binds the "scroll" event
$(window).scroll(function (e) {
    var target = e.currentTarget,
        self = $(target),
        scrollTop = window.pageYOffset || target.scrollTop,
        lastScrollTop = self.data("lastScrollTop") || 0,
        scrollHeight = target.scrollHeight || document.body.scrollHeight,
        scrollText = "";

    if (scrollTop > lastScrollTop) {
        scrollText = "<b>scroll down</b>";
    } else {
        scrollText = "<b>scroll up</b>";
    }

    $("#test").html(scrollText +
      "<br>innerHeight: " + self.innerHeight() +
      "<br>scrollHeight: " + scrollHeight +
      "<br>scrollTop: " + scrollTop +
      "<br>lastScrollTop: " + lastScrollTop);

    if (scrollHeight - scrollTop === self.innerHeight()) {
      console.log("► End of scroll");
    }

    //saves the current scrollTop
    self.data("lastScrollTop", scrollTop);
});

पहिया घटना

आप MDN को भी देख सकते हैं, यह व्हील इवेंट के बारे में एक बेहतरीन जानकारी को उजागर करता है

नोट: पहिया घटना केवल मूसवेल का उपयोग करते समय निकाल दिया जाता है ; कर्सर कीज़ और स्क्रॉल बार को खींचने से ईवेंट आग नहीं लगती।

मैंने दस्तावेज़ और उदाहरण पढ़ा: ब्राउज़र में इस घटना को सुनकर
और एफएफ, आईई, क्रोम, सफारी के साथ कुछ परीक्षणों के बाद, मैं इस स्निपेट के साथ समाप्त हुआ:

//creates an element to print the scroll position
$("<p id='test'>").appendTo("body").css({
    padding: "5px 7px",
    background: "#e9e9e9",
    position: "fixed",
    bottom: "15px",
    left: "15px"
});

//attach the "wheel" event if it is supported, otherwise "mousewheel" event is used
$("html").on(("onwheel" in document.createElement("div") ? "wheel" : "mousewheel"), function (e) {
    var evt = e.originalEvent || e;

    //this is what really matters
    var deltaY = evt.deltaY || (-1 / 40 * evt.wheelDelta), //wheel || mousewheel
        scrollTop = $(this).scrollTop() || $("body").scrollTop(), //fix safari
        scrollText = "";

    if (deltaY > 0) {
        scrollText = "<b>scroll down</b>";
    } else {
        scrollText = "<b>scroll up</b>";
    }

    //console.log("Event: ", evt);
    $("#test").html(scrollText +
      "<br>clientHeight: " + this.clientHeight +
      "<br>scrollHeight: " + this.scrollHeight +
      "<br>scrollTop: " + scrollTop +
      "<br>deltaY: " + deltaY);
});

2
मेरे पास एक निश्चित पैनल दृश्य है जो वास्तविक स्क्रॉल पट्टी को अक्षम करता है, इसलिए मुझे माउस व्हील से दिशा का पता लगाने की आवश्यकता थी। आपके mousewheel सॉल्यूशन ने ब्राउज़र को पूरी तरह से पार कर लिया, इसके लिए थैंक्यू!
शैनन होकिन्स

8

यदि आप केवल यह जानना चाहते हैं कि क्या आप पॉइंटर डिवाइस (माउस या ट्रैक पैड) का उपयोग करके ऊपर या नीचे स्क्रॉल करते हैं, तो आप ईवेंट की डेल्टा संपत्ति का उपयोग कर सकते हैं wheel

$('.container').on('wheel', function(event) {
  if (event.originalEvent.deltaY > 0) {
    $('.result').append('Scrolled down!<br>');
  } else {
    $('.result').append('Scrolled up!<br>');
  }
});
.container {
  height: 200px;
  width: 400px;
  margin: 20px;
  border: 1px solid black;
  overflow-y: auto;
}
.content {
  height: 300px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container">
  <div class="content">
    Scroll me!
  </div>
</div>

<div class="result">
  <p>Action:</p>
</div>


यह लिंक कहता है कि deltaY developer.mozilla.org
चार्ली मार्टिन


3

मैंने यहाँ अच्छे जवाबों के कई संस्करण देखे हैं, लेकिन ऐसा लगता है कि कुछ लोगों को क्रॉस ब्राउज़र की समस्या हो रही है इसलिए यह मेरा फिक्स है।

मैंने एफएफ, आईई और क्रोम में दिशा का पता लगाने के लिए इसका सफलतापूर्वक उपयोग किया है ... मैंने सफारी में इसका परीक्षण नहीं किया है क्योंकि मैं आमतौर पर विंडोज़ का उपयोग करता हूं।

$("html, body").bind({'mousewheel DOMMouseScroll onmousewheel touchmove scroll': 
    function(e) {
        if (e.target.id == 'el') return;
        e.preventDefault();
        e.stopPropagation();

        //Determine Direction
        if (e.originalEvent.wheelDelta && e.originalEvent.wheelDelta >= 0) {
            //Up
            alert("up");

        } else if (e.originalEvent.detail && e.originalEvent.detail <= 0) {
            //Up
            alert("up");

        } else {
            //Down
            alert("down");
        }
    }
});

ध्यान रखें कि मैं किसी भी स्क्रॉलिंग को रोकने के लिए भी इसका उपयोग करता हूं ताकि यदि आप चाहते हैं कि स्क्रॉलिंग अभी भी हो तो आपको हटाना चाहिए e.preventDefault(); e.stopPropagation();


1
हमेशा Android GS5
SISYN

यह महान काम किया! मैं IE पर शीर्ष मतदान जवाब के साथ एक मुद्दा था। यह मुद्दा नहीं है! मुझ से +1।
Radmation

3

पृष्ठ के ऊपर और नीचे किसी भी स्नैप / गति / उछाल को अनदेखा करने के लिए, यहाँ जोशियाह के स्वीकृत उत्तर का संशोधित संस्करण है :

var prevScrollTop = 0;
$(window).scroll(function(event){

    var scrollTop = $(this).scrollTop();

    if ( scrollTop < 0 ) {
        scrollTop = 0;
    }
    if ( scrollTop > $('body').height() - $(window).height() ) {
        scrollTop = $('body').height() - $(window).height();
    }

    if (scrollTop >= prevScrollTop && scrollTop) {
        // scrolling down
    } else {
        // scrolling up
    }

    prevScrollTop = scrollTop;
});

3

आप दिशा निर्देश निर्धारित कर सकते हैं।

$(window).on('mousewheel DOMMouseScroll', function (e) {
    var delta = e.originalEvent.wheelDelta ? 
                   e.originalEvent.wheelDelta : -e.originalEvent.detail;

    if (delta >= 0) {
        console.log('scroll up');
    } else {
        console.log('scroll down');
    }
});

3

स्क्रॉल दिशा खोजने के लिए इसका उपयोग करें। यह केवल वर्टिकल स्क्रॉल की दिशा का पता लगाने के लिए है। सभी क्रॉस ब्राउज़र का समर्थन करता है।

    var scrollableElement = document.getElementById('scrollableElement');

    scrollableElement.addEventListener('wheel', findScrollDirectionOtherBrowsers);

    function findScrollDirectionOtherBrowsers(event){
        var delta;

        if (event.wheelDelta){
            delta = event.wheelDelta;
        }else{
            delta = -1 * event.deltaY;
        }

        if (delta < 0){
            console.log("DOWN");
        }else if (delta > 0){
            console.log("UP");
        }

    }

उदाहरण


3

यह कोड IE, फ़ायरफ़ॉक्स, ओपेरा और क्रोम के साथ ठीक काम करता है:

$(window).bind('wheel mousewheel', function(event) {
      if (event.originalEvent.deltaY >= 0) {
          console.log('Scroll down');
      }
      else {
          console.log('Scroll up');
      }
  });

'व्हील मूसवेल ' और प्रॉपर्टी डेल्टा का उपयोग बाइंड () फ़ंक्शन में किया जाना चाहिए ।

याद रखें: आप उपयोगकर्ता सुरक्षा कारणों से अपने सिस्टम और ब्राउज़रों को अपडेट करना चाहिए। 2018 में, "मेरे पास IE 7" का बहाना एक बकवास है। हमें उपयोगकर्ताओं को शिक्षित करना चाहिए।

आपका दिन शुभ हो :)


1
मैंने आपके कोड की कोशिश की और यह दूसरा तरीका है। पहले एक को नीचे स्क्रॉल करने पर ट्रिगर किया जाता है और दूसरे को स्क्रॉल करते समय।
एलेक्सियोवे

हाय :) धन्यवाद एलेक्सियोवे। मैंने अपना कोड संपादित किया (समय के बारे में भी!) ^ ^। बेशक "कंसोल.लॉग ('.......')" यह सिर्फ एक उदाहरण है कि हम क्या कर सकते हैं।
सिरिल मोरेल्स

2

इसे सरल रखें:

jQuery इवेंट श्रोता तरीका:

$(window).on('wheel', function(){
  whichDirection(event);
});

वेनिला जावास्क्रिप्ट इवेंट श्रोता तरीका:

if(window.addEventListener){
  addEventListener('wheel', whichDirection, false);
} else if (window.attachEvent) {
  attachEvent('wheel', whichDirection, false);
}

समारोह वही रहता है:

function whichDirection(event){
  console.log(event + ' WheelEvent has all kinds of good stuff to work with');
  var scrollDirection = event.deltaY;
  if(scrollDirection === 1){
    console.log('meet me at the club, going down', scrollDirection);
  } else if(scrollDirection === -1) {
    console.log('Going up, on a tuesday', scrollDirection);
  }
}

मैं इस पर एक और अधिक गहराई से पोस्ट लिखा यहाँ


क्या jquery-व्हील को jquery संस्करण का उपयोग करना आवश्यक है?
हेस्टिग ज़ुसमेनस्टेलन

1
इस @HastigZusammenstellen के लिए jquery- व्हील की आवश्यकता नहीं है
CR Rollyson

2

आप एक ही समय में आंदोलन को ट्रैक और डाउन करने के लिए स्क्रॉल और मूसविल विकल्प दोनों का उपयोग कर सकते हैं।

 $('body').bind('scroll mousewheel', function(event) {

if (event.originalEvent.wheelDelta >= 0) {
      console.log('moving down');   
    }
    else {
      console.log('moving up'); 
    }
});

आप 'विंडो' के साथ 'बॉडी' को भी बदल सकते हैं।


Chrome में ठीक काम करने लगता है, लेकिन FF (55.0.2, Ubuntu) में नहीं
Hastig Zusammenstellen

1

.data ()तत्व स्क्रॉल किए गए तत्व में वृद्धि को स्टॉक करें , फिर आप स्क्रॉल के शीर्ष पर पहुंचने की संख्या का परीक्षण करने में सक्षम होंगे।


1

स्क्रॉल पर दी eventगई वस्तु का उपयोग कोई क्यों नहीं करता jQuery?

$window.on('scroll', function (event) {
    console.group('Scroll');
    console.info('Scroll event:', event);
    console.info('Position:', this.pageYOffset);
    console.info('Direction:', event.originalEvent.dir); // Here is the direction
    console.groupEnd();
});

मैं उपयोग कर रहा हूं chromiumऔर यदि dirसंपत्ति है तो मैंने अन्य ब्राउज़रों पर जांच नहीं की है।


1

चूंकि v3 ("द्वारा अलिखित ") पर bindपदावनत किया गया हैon और wheelअब समर्थित है , भूल जाइए wheelDelta:

$(window).on('wheel', function(e) {
  if (e.originalEvent.deltaY > 0) {
    console.log('down');
  } else {
    console.log('up');
  }
  if (e.originalEvent.deltaX > 0) {
    console.log('right');
  } else {
    console.log('left');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 style="white-space:nowrap;overflow:scroll">
🚂🚃🚃🚂🚃🚃🚃🚂🚃🚃🚂🚃🚃🚃🚂🚃<br/>
🚎🚌🚌🚌🚎🚌🚌🚎🚌🚌🚌🚎🚌🚌🚎🚌<br/>
🚂🚃🚃🚂🚃🚃🚃🚂🚃🚃🚂🚃🚃🚃🚂🚃<br/>
🚎🚌🚌🚌🚎🚌🚌🚎🚌🚌🚌🚎🚌🚌🚎🚌<br/>
🚂🚃🚃🚂🚃🚃🚃🚂🚃🚃🚂🚃🚃🚃🚂🚃<br/>
🚎🚌🚌🚌🚎🚌🚌🚎🚌🚌🚌🚎🚌🚌🚎🚌<br/>
</h1>

wheelइवेंट की ब्राउज़र संगतता MDN (2019-03-18) पर :

पहिया घटना की संगतता


ऊपर कोड दो कंसोल लॉग्स का उत्पादन करता है, निम्नलिखित का उपयोग पूरी तरह से अलग / डाउन / लेफ्ट / राइट करने के लिए करें: if(e.originalEvent.deltaY > 0) { console.log('down'); } else if(e.originalEvent.deltaY < 0) { console.log('up'); } else if(e.originalEvent.deltaX > 0) { console.log('right'); } else if(e.originalEvent.deltaX < 0) { console.log('left'); }
डॉन विल्सन

इसके touchmoveबजाय मोबाइल उपयोग की घटना के लिए।
CPHPython

1

आप इसका भी उपयोग कर सकते हैं

$(document).ready(function(){

  var currentscroll_position = $(window).scrollTop();
$(window).on('scroll', function(){
Get_page_scroll_direction();
});

function Get_page_scroll_direction(){
  var running_scroll_position = $(window).scrollTop();
  if(running_scroll_position > currentscroll_position) {
      
      $('.direction_value').text('Scrolling Down Scripts');

  } else {
       
       $('.direction_value').text('Scrolling Up Scripts');

  }
  currentscroll_position = running_scroll_position;
}

});
.direction_value{
  position: fixed;
  height: 30px;
  background-color: #333;
  color: #fff;
  text-align: center;
  z-index: 99;
  left: 0;
  top: 0;
  width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="direction_value">
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ducimus expedita facilis architecto fugiat veniam natus suscipit amet beatae atque, enim recusandae quos, magnam, perferendis accusamus cumque nemo modi unde!</p>


0

में .data()तत्व आप लांच घटनाओं के लिए एक JSON और परीक्षण मान संग्रहीत कर सकते की

{ top : 1,
   first_top_event: function(){ ...},
   second_top_event: function(){ ...},
   third_top_event: function(){ ...},
   scroll_down_event1: function(){ ...},
   scroll_down_event2: function(){ ...}
}

0

जब उपयोगकर्ता पृष्ठ के शीर्ष से दूर स्क्रॉल करता है और जब वे शीर्ष पर वापस आते हैं, तो यह सरल और आसान खोज है।

$(window).scroll(function() {
    if($(window).scrollTop() > 0) {
        // User has scrolled
    } else {
        // User at top of page
    }
});

0

जब उपयोगकर्ता अंत स्क्रॉल करता है तो दिशा का पता लगाने के लिए यह एक इष्टतम समाधान है।

var currentScrollTop = 0 ;

$(window).bind('scroll', function () {     

    scrollTop = $(this).scrollTop();

    clearTimeout($.data(this, 'scrollTimer'));
    $.data(this, 'scrollTimer', setTimeout(function() {

        if(scrollTop > currentScrollTop){
            // downscroll code
            $('.mfb-component--bl').addClass('mfbHide');
        }else{
            // upscroll code
            $('.mfb-component--bl').removeClass('mfbHide');
        }
        currentScrollTop = scrollTop;

    }, 250));

});

0

आपको यह कोशिश करनी चाहिए

var scrl
$(window).scroll(function(){
        if($(window).scrollTop() < scrl){
            //some code while previous scroll
        }else{
            if($(window).scrollTop() > 200){
                //scroll while downward
            }else{//scroll while downward after some specific height
            }
        }
        scrl = $(window).scrollTop();
    });

0

मुझे लोचदार स्क्रॉलिंग (स्क्रॉल शेख़ी, रबर-बैंडिंग) के साथ समस्याएं थीं । पृष्ठ शीर्ष के करीब होने पर डाउन-स्क्रॉल ईवेंट को अनदेखा करना मेरे लिए काम करता है।

var position = $(window).scrollTop();
$(window).scroll(function () {
    var scroll = $(window).scrollTop();
    var downScroll = scroll > position;
    var closeToTop = -120 < scroll && scroll < 120;
    if (downScroll && !closeToTop) {
        // scrolled down and not to close to top (to avoid Ipad elastic scroll-problems)
        $('.top-container').slideUp('fast');
        $('.main-header').addClass('padding-top');
    } else {
        // scrolled up
        $('.top-container').slideDown('fast');
        $('.main-header').removeClass('padding-top');
    }
    position = scroll;
});

0

यह सभी पीसी या फोन ब्राउज़रों में काम करता है, शीर्ष उत्तरों पर विस्तार करता है। कोई अधिक जटिल ईवेंट ऑब्जेक्ट विंडो बना सकता है ["स्क्रॉल_एवीटी"] फिर इसे हैंडलक्रोल () फ़ंक्शन में कॉल करें। यह एक 2 समवर्ती स्थितियों के लिए ट्रिगर करता है, अगर कुछ देरी बीत गई है या कुछ अवांछित ट्रिगर को खत्म करने के लिए कुछ डेल्टा पारित किया गया है।

window["scroll_evt"]={"delta":0,"delay":0,"direction":0,"time":Date.now(),"pos":$(window).scrollTop(),"min_delta":120,"min_delay":10};
$(window).scroll(function() {

    var currentScroll = $(this).scrollTop();
    var currentTime = Date.now();
    var boolRun=(window["scroll_evt"]["min_delay"]>0)?(Math.abs(currentTime - window["scroll_evt"]["time"])>window["scroll_evt"]["min_delay"]):false;
    boolRun = boolRun && ((window["scroll_evt"]["min_delta"]>0)?(Math.abs(currentScroll - window["scroll_evt"]["pos"])>window["scroll_evt"]["min_delta"]):false);
    if(boolRun){
        window["scroll_evt"]["delta"] = currentScroll - window["scroll_evt"]["pos"];
        window["scroll_evt"]["direction"] = window["scroll_evt"]["delta"]>0?'down':'up';
        window["scroll_evt"]["delay"] =currentTime - window["scroll_evt"]["time"];//in milisecs!!!
        window["scroll_evt"]["pos"] = currentScroll;
        window["scroll_evt"]["time"] = currentTime;
        handleScroll();
    }
});


function handleScroll(){
    event.stopPropagation();
    //alert(window["scroll_evt"]["direction"]);
    console.log(window["scroll_evt"]);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.