scroll
JQuery এ মাউস হুইল ইভেন্টগুলি ( ইভেন্টগুলির বিষয়ে কথা বলার নয় ) পাওয়ার কোনও উপায় আছে কি ?
$(el).on('input', ...
scroll
JQuery এ মাউস হুইল ইভেন্টগুলি ( ইভেন্টগুলির বিষয়ে কথা বলার নয় ) পাওয়ার কোনও উপায় আছে কি ?
$(el).on('input', ...
উত্তর:
একটি প্লাগইন রয়েছে যা একটি অঞ্চলের উপরে / ডাউন মাউস চাকা এবং বেগ সনাক্ত করে।
$(document).ready(function(){
$('#foo').bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta /120 > 0) {
console.log('scrolling up !');
}
else{
console.log('scrolling down !');
}
});
});
DOMMouseScroll
ইভেন্ট, মুক্তিযোদ্ধা ব্যবহার করা হয় তাই আপনি উভয় শুনতে আছে .bind('DOMMouseScroll mousewheel') {
evetns developer.mozilla.org/en-US/docs/DOM/DOM_event_reference/...
e.originalEvent.wheelDelta
উভয়ের সাথে আবদ্ধ mousewheel
এবং DOMMouseScroll
আমার জন্য সত্যিই ভাল কাজ শেষ করেছে:
$(window).bind('mousewheel DOMMouseScroll', function(event){
if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
// scroll up
}
else {
// scroll down
}
});
এই পদ্ধতিটি আইই 9 +, ক্রোম 33, এবং ফায়ারফক্স 27 এ কাজ করছে।
সম্পাদনা করুন - মার্চ 2016
কিছুক্ষণ হয়ে যাওয়ার পরে আমি এই সমস্যাটি পুনর্বিবেচনার সিদ্ধান্ত নিয়েছি। স্ক্রোল ইভেন্টের জন্য MDN পৃষ্ঠায় স্ক্রোল অবস্থানটি পুনরুদ্ধার করার একটি দুর্দান্ত উপায় রয়েছে requestAnimationFrame
যা ব্যবহার করে যা আমার পূর্ববর্তী সনাক্তকরণ পদ্ধতির চেয়ে অত্যন্ত পছন্দনীয়। স্ক্রোলের দিকনির্দেশ এবং অবস্থানের পাশাপাশি আরও ভাল সামঞ্জস্যতা দিতে আমি তাদের কোডটি সংশোধন করেছি:
(function() {
var supportOffset = window.pageYOffset !== undefined,
lastKnownPos = 0,
ticking = false,
scrollDir,
currYPos;
function doSomething(scrollPos, scrollDir) {
// Your code goes here...
console.log('scroll pos: ' + scrollPos + ' | scroll dir: ' + scrollDir);
}
window.addEventListener('wheel', function(e) {
currYPos = supportOffset ? window.pageYOffset : document.body.scrollTop;
scrollDir = lastKnownPos > currYPos ? 'up' : 'down';
lastKnownPos = currYPos;
if (!ticking) {
window.requestAnimationFrame(function() {
doSomething(lastKnownPos, scrollDir);
ticking = false;
});
}
ticking = true;
});
})();
এই কোডটি বর্তমানে কাজ করছে Chrome v50, Firefox v44, Safari v9, and IE9+
তথ্যসূত্র:
এখন পর্যন্ত 2017, আপনি কেবল লিখতে পারেন
$(window).on('wheel', function(event){
// deltaY obviously records vertical scroll, deltaX and deltaZ exist too
if(event.originalEvent.deltaY < 0){
// wheeled up
}
else {
// wheeled down
}
});
বর্তমান ফায়ারফক্স 51, ক্রোম 56, আই 9 + এর সাথে কাজ করে
"মাউসওয়েল" ইভেন্টের বিষয়ে কথা বলার উত্তরগুলি হতাশ ইভেন্টটিকে উল্লেখ করছে। স্ট্যান্ডার্ড ইভেন্টটি সহজভাবে "চাকা"। Https://developer.mozilla.org/en-US/docs/Web/References/Events/wheel দেখুন
এটি আমার জন্য কাজ করেছে :)
//Firefox
$('#elem').bind('DOMMouseScroll', function(e){
if(e.originalEvent.detail > 0) {
//scroll down
console.log('Down');
}else {
//scroll up
console.log('Up');
}
//prevent page fom scrolling
return false;
});
//IE, Opera, Safari
$('#elem').bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta < 0) {
//scroll down
console.log('Down');
}else {
//scroll up
console.log('Up');
}
//prevent page fom scrolling
return false;
});
এখানে একটি ভ্যানিলা সমাধান। JQuery ব্যবহার করা যেতে পারে যদি ইভেন্টটি ফাংশনটির কাছে চলে যায় event.originalEvent
যা jQuery jQuery ইভেন্টের সম্পত্তি হিসাবে উপলব্ধ করে। অথবা ভিতরে যদি callback
ফাংশন আমরা প্রথম লাইন সামনে যোগ অধীনে: event = event.originalEvent;
।
এই কোডটি চক্রের গতি / পরিমাণকে স্বাভাবিক করে তোলে এবং একটি সাধারণ মাউসে একটি ফরোয়ার্ড স্ক্রোল কী হবে তার জন্য ইতিবাচক এবং পিছনে মাউস হুইল চলাচলে নেতিবাচক।
var wheel = document.getElementById('wheel');
function report(ammout) {
wheel.innerHTML = 'wheel ammout: ' + ammout;
}
function callback(event) {
var normalized;
if (event.wheelDelta) {
normalized = (event.wheelDelta % 120 - 0) == -0 ? event.wheelDelta / 120 : event.wheelDelta / 12;
} else {
var rawAmmount = event.deltaY ? event.deltaY : event.detail;
normalized = -(rawAmmount % 3 ? rawAmmount * 10 : rawAmmount / 3);
}
report(normalized);
}
var event = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
window.addEventListener(event, callback);
এছাড়াও jQuery এর জন্য একটি প্লাগইন রয়েছে যা কোডে আরও ভার্বোজ এবং কিছু অতিরিক্ত চিনির রয়েছে: https://github.com/brandonaaron/jquery-mousewheel
এটি প্রতিটি আইই, ফায়ারফক্স এবং ক্রোমের সর্বশেষ সংস্করণে কাজ করছে।
$(document).ready(function(){
$('#whole').bind('DOMMouseScroll mousewheel', function(e){
if(e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0) {
alert("up");
}
else{
alert("down");
}
});
});
আমি আজ এই সমস্যাটিতে আটকে গিয়েছিলাম এবং খুঁজে পেয়েছি যে এই কোডটি আমার পক্ষে ঠিক কাজ করছে
$('#content').on('mousewheel', function(event) {
//console.log(event.deltaX, event.deltaY, event.deltaFactor);
if(event.deltaY > 0) {
console.log('scroll up');
} else {
console.log('scroll down');
}
});
এই কোড ব্যবহার করুন
knob.bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta < 0) {
moveKnob('down');
} else {
moveKnob('up');
}
return false;
});
আমার সংমিশ্রণটি দেখতে এমন দেখাচ্ছে। এটি বিবর্ণ হয়ে যায় এবং নিচে / উপরে প্রতিটি স্ক্রোলের উপর বিবর্ণ হয়। অন্যথায় আপনাকে হেডারটি ফেইড করার জন্য শিরোনাম পর্যন্ত স্ক্রোল করতে হবে।
var header = $("#header");
$('#content-container').bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta > 0) {
if (header.data('faded')) {
header.data('faded', 0).stop(true).fadeTo(800, 1);
}
}
else{
if (!header.data('faded')) header.data('faded', 1).stop(true).fadeTo(800, 0);
}
});
উপরেরটি টাচ / মোবাইলের জন্য অনুকূলিত নয়, আমি মনে করি এটি সমস্ত মোবাইলের জন্য এটি আরও ভাল করে:
var iScrollPos = 0;
var header = $("#header");
$('#content-container').scroll(function () {
var iCurScrollPos = $(this).scrollTop();
if (iCurScrollPos > iScrollPos) {
if (!header.data('faded')) header.data('faded', 1).stop(true).fadeTo(800, 0);
} else {
//Scrolling Up
if (header.data('faded')) {
header.data('faded', 0).stop(true).fadeTo(800, 1);
}
}
iScrollPos = iCurScrollPos;
});
প্লাগ-ইন করে @DarinDimitrov পোস্ট, jquery-mousewheel
, jQuery এর 3+ সঙ্গে নষ্ট হয়ে গেছে । jquery-wheel
JQuery 3+ এর সাথে কাজ করে এমনটি ব্যবহার করা আরও পরামর্শ দেওয়া হবে ।
আপনি যদি jQuery রুটে যেতে না চান, এমডিএন mousewheel
ঘটনাটি অমানুষিক এবং অনেক জায়গায় অসমর্থিত হওয়ায় ইভেন্টটি ব্যবহার করার জন্য অত্যন্ত সাবধান করে । পরিবর্তে এটি বলেছে যে আপনিwheel
যে মূল্যবোধগুলি বোধ করছেন ঠিক তার চেয়ে অনেক বেশি স্পষ্টতা পাওয়ার কারণে আপনার ইভেন্টটি ব্যবহার করা উচিত । এটি বেশিরভাগ প্রধান ব্রাউজার দ্বারা সমর্থিত।
যদি উল্লিখিত jquery মাউসওয়েল প্লাগইন ব্যবহার করে থাকেন , তবে ইভেন্ট হ্যান্ডলার ফাংশনের 2 য় আর্গুমেন্টটি কী ব্যবহার করবেন - delta
:
$('#my-element').on('mousewheel', function(event, delta) {
if(delta > 0) {
console.log('scroll up');
}
else {
console.log('scroll down');
}
});
আমি যেখানে $(window).mousewheel
ফিরে আসছিলাম সম্প্রতি একই সমস্যা পেয়েছি
undefined
আমি যা করেছি তা ছিল $(window).on('mousewheel', function() {});
এটি প্রক্রিয়া করার জন্য আরও আমি ব্যবহার করছি:
function (event) {
var direction = null,
key;
if (event.type === 'mousewheel') {
if (yourFunctionForGetMouseWheelDirection(event) > 0) {
direction = 'up';
} else {
direction = 'down';
}
}
}