আমি কীভাবে একটি 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 23'13

7
@ টিসিএইচডিভিএলপি - সবচেয়ে খারাপ পরিস্থিতির মধ্যে প্রথম স্ক্রোল ইভেন্টটি ভেরিয়েবলটি আপডেট করবে এবং দ্বিতীয় ইভেন্টটি সঠিক হবে (.. এটি পিছনে নেভিগেশনের পরে কেবল একটি আপসক্রোলে গুরুত্বপূর্ণ হবে)। var lastScrollTop = $(window).scrollTop()ব্রাউজারটি পৃষ্ঠা লোডে স্ক্রোল অবস্থান আপডেট করার পরে সেটিংস স্থাপন করে এটি ঠিক করা যেতে পারে ।
জোসিয়া রুডেল

2
এটি সম্পর্কে একটি আপডেট: সাবধানতা অবলম্বন করুন যে কিছু ব্রাউজারগুলি বিশেষত উইন্ডোজ 8-এ আইই 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। যদি এটি ইতিবাচক হয় তবে আপনি মাউসওয়েলটি উপরে সরিয়ে নিয়েছেন। যদি এটি নেতিবাচক হয় তবে আপনি মাউসভিয়েলটি নীচে সরিয়ে নিয়েছেন।

আমার অনুমান যে mousewheelপৃষ্ঠাটি স্ক্রোল না করা সত্ত্বেও, মাউস চাকাটি ঘুরিয়ে এলে ঘটনাগুলি আগুনে ছড়িয়ে পড়বে; এমন একটি ক্ষেত্রে যাতে 'স্ক্রোল' ইভেন্টগুলি সম্ভবত চালিত হয় না। আপনি চাইলে event.preventDefault()পৃষ্ঠাটি স্ক্রোলিং থেকে রোধ করতে আপনি নিজের কলব্যাকের নীচে কল করতে পারেন এবং যাতে কোনও ধরণের জুম কার্যকারিতা যেমন আপনি কোনও পৃষ্ঠার স্ক্রল ব্যতীত অন্য কোনও কিছুর জন্য মাউসওয়েল ইভেন্টটি ব্যবহার করতে পারেন।


13
দুর্দান্ত তবে দুঃখের বিষয় যে একমাত্র ফায়ারফক্স এটি বিকাশকারীকে সমর্থন করে না mo : সি
নুয়াল

8
এটি আমার জন্য দরকারী: পৃষ্ঠা নিজেই স্ক্রোল না করায়ও আমাকে স্ক্রোলিং সনাক্ত করতে হবে, সুতরাং scrollTopআপডেট হয়নি। আসলে $(window).scroll()মোটেও গুলি চালায়নি।
মার্টি লাইন

13
এটি দুর্দান্ত যে আপনার পুরানো রাষ্ট্রের দরকার নেই। তবে এই কৌশলটি মোবাইল বা ট্যাবলেটগুলিতে কাজ করবে না, যেহেতু তাদের মাউসওয়েল নেই!
জোয়েটউইলড

13
আমি কীবোর্ড দিয়ে স্ক্রোল করলে এই পদ্ধতির কাজ হবে না। এটি অবশ্যই জুমের মতো জিনিসের জন্য একটি আকর্ষণীয় পন্থা, তবে আমার মনে হয় না যে এটি স্ক্রোলের দিকনির্দেশের প্রশ্নটিকে সম্বোধন করে।
chmac

6
"(" এইচটিএমএল, দেহ ") b সমস্ত ব্রাউজারের স্ক্রোল ডেটা সনাক্ত করতে আমার পক্ষে কাজ করে
গোরডিফেক্স

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 টি সমাধান হতে পারে ।

সমাধান ঘ

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

সমাধান 2

    $('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 ইভেন্ট
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না
  • সমাধান 3
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট

ফায়ারফক্স 37 (7 বিজয়)

  • সমাধান ঘ
    • আপ: 1 টি স্ক্রোল প্রতি 20 টি ইভেন্ট
    • ডাউন: প্রতি 1 টি স্ক্রোলে 20 টি ইভেন্ট
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট
  • সমাধান 3
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না

আইই 11 (উইন 8)

  • সমাধান ঘ
    • আপ: প্রতি 1 স্ক্রোলে 10 টি ইভেন্ট (পার্শ্ব প্রতিক্রিয়া: শেষদিকে ডাউন স্ক্রোলটি ঘটেছে)
    • ডাউন: 1 স্ক্রোল প্রতি 10 ইভেন্ট events
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না
  • সমাধান 3
    • আপ: কাজ করছে না
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট

আইই 10 (উইন 7)

  • সমাধান ঘ
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না
  • সমাধান 3
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট

আইই 9 (উইন 7)

  • সমাধান ঘ
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না
  • সমাধান 3
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট

আইই 8 (উইন 7)

  • সমাধান ঘ
    • আপ: প্রতি 1 স্ক্রোলে 2 টি ইভেন্ট (পার্শ্ব প্রতিক্রিয়া: শেষদিকে ডাউন স্ক্রোলটি ঘটেছে)
    • ডাউন: 1 স্ক্রোল প্রতি 2 ~ 4 ইভেন্ট
  • সলিউশন 2
    • আপ: কাজ করছে না
    • ডাউন: কাজ করছে না
  • সমাধান 3
    • আপ: 1 স্ক্রোল প্রতি 1 ইভেন্ট
    • ডাউন: 1 স্ক্রোল প্রতি 1 ইভেন্ট

সংযুক্ত সমাধান

আইই 11 এবং আই 8 এর পার্শ্ব প্রতিক্রিয়াটি আমি if elseবিবৃতি থেকে এসেছি checked সুতরাং, আমি if else ifনিম্নলিখিত হিসাবে বিবৃতি দিয়ে এটি প্রতিস্থাপন ।

মাল্টি ব্রাউজার পরীক্ষা থেকে, আমি সাধারণ ব্রাউজারগুলির জন্য সলিউশন 3 এবং ফায়ারফক্স এবং আইই 11 এর জন্য সমাধান 1 ব্যবহার করার সিদ্ধান্ত নিয়েছি ।

আইই 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 দ্বারা আচ্ছাদিত So সুতরাং বিভিন্ন ব্রাউজারগুলি কভার করার জন্য সমাধান 1 এবং 3 উভয়ই একসাথে ব্যবহার করা ভাল।
রাসায়নিক প্রোগ্রামার

নকশাটি একটি নির্দিষ্ট লেআউট ডিজাইন হলে কাজ করবে না। আপনি যদি কোনও স্ট্যাটিক নো-স্ক্রোল ওয়েবসাইটে স্ক্রোলের দিকটি সনাক্ত করতে চান তবে ফায়ারফক্স এবং আইই 11 কাজ করবে না
শ্যানন হচকিনস

আমি দেখতে পেয়েছি যে আমি যখন এটি ব্যবহার করি এটি ক্রোমে "অন্যান্য ব্রাউজারগুলি" ব্যবহার করে, আপনি যখন মাউস হুইল এবং স্ক্রোল বার উভয় দ্বারা স্ক্রোলিং সনাক্ত করতে চান তখন এটি খুব বেশি ব্যবহার হয় না। .scrol ক্রোমে উভয় ধরণের স্ক্রোলিং সনাক্ত করবে।
স্যাম

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
    }
});

উপরের কোডটি এটিয়েনমার্টিন jQuery এর উপর নির্ভর করে যদি এটিই আপনার ত্রুটির কারণ হয়ে দাঁড়ায়। এটি দেখার জন্য দয়া করে সংযুক্ত ফিডলটি দেখুন।
স্যুপোরসিয়াস

8

স্ক্রোল ইভেন্ট

স্ক্রল ঘটনা মুক্তিযোদ্ধা মধ্যে অদ্ভুত আচরণ করবে (এটা স্নিগ্ধতা স্ক্রলিং কারণে বার অনেক বহিস্কার করা হয়) কিন্তু এটি কাজ করে।

নোট: স্ক্রল ঘটনা আসলে বহিস্কার করা হয় যখন স্ক্রল বার টেনে, কার্সার কীর বা mousewheel ব্যবহার করে।

//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);
});

চাকা ইভেন্ট

আপনি এমডিএন একবার দেখে নিতে পারেন, এটি হুইল ইভেন্ট সম্পর্কিত দুর্দান্ত তথ্য প্রকাশ করে

দ্রষ্টব্য: হুইল ইভেন্টটি কেবল মাউস- হুইল ব্যবহার করার সময় নিক্ষেপ করা হবে ; কার্সার কী এবং স্ক্রোল বারটি টেনে তোলা ঘটনাকে দমন করে না।

আমি দস্তাবেজ এবং উদাহরণটি পড়ছি: ব্রাউজার জুড়ে এই ইভেন্টটি শুনছি
এবং এফএফ, আইই, ক্রোম, সাফারি দিয়ে কিছু পরীক্ষার পরে, আমি এই স্নিপেটটি দিয়ে শেষ করেছি:

//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
আমার একটি স্থির প্যানেল ভিউ রয়েছে যা আসল স্ক্রোল বারটি অক্ষম করে, তাই আমাকে মাউস চাকা থেকে দিকটি সনাক্ত করতে হবে। আপনার মাউসহিল দ্রবণটি পুরোপুরি ক্রস ব্রাউজারের জন্য কাজ করেছে তাই থ্যাঙ্কু!
শ্যানন হচকিনস

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>



3
var tempScrollTop, currentScrollTop = 0; 

$(window).scroll(function(){ 

   currentScrollTop = $("#div").scrollTop(); 

   if (tempScrollTop > currentScrollTop ) {
       // upscroll code
   }
  else if (tempScrollTop < currentScrollTop ){
      // downscroll code
  }

  tempScrollTop = currentScrollTop; 
} 

বা ব্যবহার mousewheel এক্সটেনশন দেখুন এখানে


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
সর্বদা অ্যান্ড্রয়েড জিএস 5 এ নেমে আসে
SISYN

এটি দুর্দান্ত কাজ করেছে! আইই-তে শীর্ষে ভোট দেওয়া উত্তর নিয়ে আমার একটি সমস্যা ছিল। এই যে সমস্যা নেই! আমার কাছ থেকে +1
র‌্যাডমেশন

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

এই কোডটি আইই, ফায়ারফক্স, অপেরা এবং Chrome এর সাথে দুর্দান্ত কাজ করে:

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

'চাকা মাউসওয়েল' এবং সম্পত্তি ডেল্টা অবশ্যই বাঁধাই () ফাংশনে ব্যবহার করা উচিত ।

মনে রাখবেন: সুরক্ষার কারণে আপনার ব্যবহারকারীকে অবশ্যই তাদের সিস্টেম এবং ব্রাউজারগুলি আপডেট করতে হবে। 2018 সালে, "আমার কাছে আইই 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);
  }
}

আমি এটা উপর আরো একটি indepth পোষ্ট লিখেছেন এখানে


Jquery- চাকা jquery সংস্করণ ব্যবহার করা প্রয়োজন?
হাসটিগ জুসামেনস্টেলেন

1
jquery- হুইলটির জন্য এটি প্রয়োজন নেই @ হ্যাস্টিগজুসামেনস্টেলেন
সিআর রলিসন

2

আপনি একবারে চলাচল এবং ডাউন ট্র্যাক করতে স্ক্রোল এবং মাউসওয়েল উভয় বিকল্প ব্যবহার করতে পারেন।

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

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

আপনি (উইন্ডো) পাশাপাশি 'বডি' প্রতিস্থাপন করতে পারেন।


Chrome এ সূক্ষ্মভাবে কাজ করছে বলে মনে হচ্ছে তবে এফএফ-তে নয় (55.0.2, উবুন্টু)
হাসটিগ জুসামেনস্টেলেন

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এমডিএন-তে ইভেন্টের ব্রাউজারের সামঞ্জস্যতা (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পরিবর্তে মোবাইল ব্যবহার ইভেন্টের জন্য ।
সিপিএইচপিথন

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

এটি শীর্ষস্থানীয় উত্তরগুলিতে প্রসারিত করে সমস্ত পিসি বা ফোন ব্রাউজারগুলিতে কাজ করে। যে কেউ একটি আরও জটিল ইভেন্ট অবজেক্ট উইন্ডো তৈরি করতে পারে ["scrol_evt"] তারপরে একে হ্যান্ডেলস্ক্রোল () ফাংশনে কল করুন। এটি অবিচ্ছিন্ন ট্রিগারগুলি অপসারণের জন্য নির্দিষ্ট বিলম্ব অতিক্রান্ত হলে বা নির্দিষ্ট ব-দ্বীপ পাস হলে এটি 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"]);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.