हिन्दी

टच जेस्चर की दुनिया का अन्वेषण करें और उन्हें अपने जावास्क्रिप्ट प्रोजेक्ट्स में लागू करना सीखें। यह गाइड बेसिक टच इवेंट्स से लेकर एडवांस्ड जेस्चर रिकॉग्निशन तकनीकों तक सब कुछ कवर करता है।

टच जेस्चर: जावास्क्रिप्ट कार्यान्वयन के लिए एक व्यापक गाइड

आज की मोबाइल-फर्स्ट दुनिया में, टच जेस्चर यूजर एक्सपीरियंस का एक अभिन्न अंग बन गए हैं। साधारण टैप से लेकर जटिल मल्टी-फिंगर इंटरैक्शन तक, टच जेस्चर उपयोगकर्ताओं को वेब एप्लिकेशन के साथ इंटरैक्ट करने का एक स्वाभाविक और सहज तरीका प्रदान करते हैं। यह व्यापक गाइड टच जेस्चर की दुनिया का अन्वेषण करता है और आपके जावास्क्रिप्ट प्रोजेक्ट्स में उन्हें लागू करने के लिए एक स्टेप-बाय-स्टेप दृष्टिकोण प्रदान करता है।

टच इवेंट्स को समझना

जेस्चर रिकॉग्निशन में गोता लगाने से पहले, इन इंटरैक्शन को शक्ति देने वाले अंतर्निहित टच इवेंट्स को समझना महत्वपूर्ण है। जावास्क्रिप्ट इवेंट्स का एक सेट प्रदान करता है जो तब फायर होता है जब कोई उपयोगकर्ता स्क्रीन को छूता है। ये इवेंट्स टच के बारे में जानकारी प्रदान करते हैं, जैसे कि उसका स्थान और स्थिति।

बेसिक टच इवेंट्स:

इनमें से प्रत्येक इवेंट में एक `touches` प्रॉपर्टी होती है, जो `Touch` ऑब्जेक्ट्स की एक सूची है। प्रत्येक `Touch` ऑब्जेक्ट स्क्रीन पर संपर्क के एक बिंदु का प्रतिनिधित्व करता है और इसमें जानकारी होती है जैसे:

उदाहरण: टच कोऑर्डिनेट्स लॉग करना

यह सरल उदाहरण दर्शाता है कि जब उपयोगकर्ता स्क्रीन को छूता है तो टच पॉइंट के कोऑर्डिनेट्स को कैसे लॉग किया जाए:


 document.addEventListener('touchstart', function(event) {
  event.preventDefault(); // ब्राउज़र के डिफ़ॉल्ट व्यवहार (जैसे, स्क्रॉलिंग) को रोकता है
  let touch = event.touches[0];
  console.log('टच X पर शुरू हुआ: ' + touch.clientX + ', Y: ' + touch.clientY);
 });

ध्यान दें: `preventDefault()` मेथड का उपयोग अक्सर ब्राउज़र को उसके डिफ़ॉल्ट टच व्यवहार, जैसे स्क्रॉलिंग या ज़ूमिंग, को करने से रोकने के लिए किया जाता है।

बेसिक जेस्चर लागू करना

टच इवेंट्स की ठोस समझ के साथ, अब हम बेसिक जेस्चर लागू कर सकते हैं। आइए टैप, स्वाइप और ड्रैग जैसे उदाहरणों को देखें। इन्हें पहले यह परिभाषित करके समझाया जाएगा कि वे क्या हैं, फिर जावास्क्रिप्ट उदाहरण प्रदान किए जाएंगे।

टैप जेस्चर

एक टैप जेस्चर स्क्रीन पर एक त्वरित स्पर्श और रिलीज़ है। एक टैप जेस्चर को लागू करने के लिए, हम `touchstart` और `touchend` इवेंट्स को ट्रैक कर सकते हैं और उनके बीच के समय के अंतर को माप सकते हैं। यदि समय का अंतर एक निश्चित थ्रेसहोल्ड (जैसे, 200 मिलीसेकंड) से कम है, तो हम इसे एक टैप मानते हैं।


 let tapStartTime = null;

 document.addEventListener('touchstart', function(event) {
  tapStartTime = new Date().getTime();
 });

 document.addEventListener('touchend', function(event) {
  let tapEndTime = new Date().getTime();
  let tapDuration = tapEndTime - tapStartTime;

  if (tapDuration < 200) {
   console.log('टैप का पता चला!');
  }
 });

स्वाइप जेस्चर

स्वाइप जेस्चर स्क्रीन पर एक त्वरित, दिशात्मक मूवमेंट है। स्वाइप का पता लगाने के लिए, हमें टच की शुरुआती और अंतिम स्थिति को ट्रैक करने और मूवमेंट की दूरी और दिशा की गणना करने की आवश्यकता है। हमें स्वाइप की अवधि पर भी विचार करने की आवश्यकता है।


 let swipeStartX = null;
 let swipeStartY = null;

 document.addEventListener('touchstart', function(event) {
  swipeStartX = event.touches[0].clientX;
  swipeStartY = event.touches[0].clientY;
 });

 document.addEventListener('touchend', function(event) {
  let swipeEndX = event.changedTouches[0].clientX;
  let swipeEndY = event.changedTouches[0].clientY;
  let deltaX = swipeEndX - swipeStartX;
  let deltaY = swipeEndY - swipeStartY;
  let swipeDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);

  if (swipeDistance > 50) { // आवश्यकतानुसार थ्रेसहोल्ड को समायोजित करें
   let angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;

   if (angle > -45 && angle <= 45) {
    console.log('दाएं स्वाइप करें!');
   } else if (angle > 45 && angle <= 135) {
    console.log('नीचे स्वाइप करें!');
   } else if (angle > 135 || angle <= -135) {
    console.log('बाएं स्वाइप करें!');
   } else {
    console.log('ऊपर स्वाइप करें!');
   }
  }
 });

ड्रैग जेस्चर

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


 let dragging = false;
 let offsetX, offsetY;
 let element = document.getElementById('draggableElement');

 element.addEventListener('touchstart', function(event) {
  dragging = true;
  offsetX = event.touches[0].clientX - element.offsetLeft;
  offsetY = event.touches[0].clientY - element.offsetTop;
 });

 document.addEventListener('touchmove', function(event) {
  if (dragging) {
   element.style.left = (event.touches[0].clientX - offsetX) + 'px';
   element.style.top = (event.touches[0].clientY - offsetY) + 'px';
  }
 });

 document.addEventListener('touchend', function(event) {
  dragging = false;
 });

सुनिश्चित करें कि आपके HTML में "draggableElement" आईडी वाला एक एलिमेंट है:


 
मुझे खींचें!

मल्टी-टच जेस्चर

मल्टी-टच जेस्चर में स्क्रीन के साथ इंटरैक्ट करने के लिए कई उंगलियों का उपयोग करना शामिल है। यह पिंच-टू-ज़ूम और रोटेट जैसे अधिक जटिल और अभिव्यंजक इंटरैक्शन की अनुमति देता है।

पिंच-टू-ज़ूम

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


 let initialDistance = null;
 let currentScale = 1;
 let element = document.getElementById('zoomableImage');

 function getDistance(event) {
  let touch1 = event.touches[0];
  let touch2 = event.touches[1];
  let x = touch2.clientX - touch1.clientX;
  let y = touch2.clientY - touch1.clientY;
  return Math.sqrt(x * x + y * y);
 }

 element.addEventListener('touchstart', function(event) {
  if (event.touches.length === 2) {
   initialDistance = getDistance(event);
  }
 });

 element.addEventListener('touchmove', function(event) {
  if (event.touches.length === 2) {
   event.preventDefault();
   let currentDistance = getDistance(event);
   let scaleFactor = currentDistance / initialDistance;
   currentScale *= scaleFactor; // स्केलिंग जमा करें
   element.style.transform = 'scale(' + currentScale + ')';
   initialDistance = currentDistance; // अगले मूवमेंट के लिए रीसेट करें
  }
 });

 element.addEventListener('touchend', function(event) {
  initialDistance = null;
 });

सुनिश्चित करें कि आपके HTML में "zoomableImage" आईडी वाली एक इमेज है:


 

रोटेशन

रोटेशन में दो उंगलियों का उपयोग करके एक एलिमेंट को घुमाना शामिल है। रोटेशन लागू करने के लिए, हमें दो टच पॉइंट्स के बीच के कोण को ट्रैक करने और उसके अनुसार एलिमेंट को घुमाने की आवश्यकता है।


 let initialAngle = null;
 let currentRotation = 0;
 let element = document.getElementById('rotatableImage');

 function getAngle(event) {
  let touch1 = event.touches[0];
  let touch2 = event.touches[1];
  return Math.atan2(touch2.clientY - touch1.clientY, touch2.clientX - touch1.clientX) * 180 / Math.PI;
 }

 element.addEventListener('touchstart', function(event) {
  if (event.touches.length === 2) {
   initialAngle = getAngle(event);
  }
 });

 element.addEventListener('touchmove', function(event) {
  if (event.touches.length === 2) {
   event.preventDefault();
   let currentAngle = getAngle(event);
   let rotation = currentAngle - initialAngle;
   currentRotation += rotation; // रोटेशन जमा करें
   element.style.transform = 'rotate(' + currentRotation + 'deg)';
   initialAngle = currentAngle; // अगले मूवमेंट के लिए रीसेट करें
  }
 });

 element.addEventListener('touchend', function(event) {
  initialAngle = null;
 });

सुनिश्चित करें कि आपके HTML में "rotatableImage" आईडी वाली एक इमेज है:


 

जेस्चर रिकॉग्निशन लाइब्रेरी

शुरुआत से जटिल जेस्चर लागू करना चुनौतीपूर्ण और समय लेने वाला हो सकता है। सौभाग्य से, कई जावास्क्रिप्ट लाइब्रेरी जेस्चर रिकॉग्निशन की प्रक्रिया को सरल बना सकती हैं। ये लाइब्रेरी प्री-बिल्ट जेस्चर रिकॉग्नाइज़र और टच इवेंट्स को संभालने के लिए यूटिलिटीज प्रदान करती हैं।

Hammer.js

Hammer.js जेस्चर को पहचानने के लिए एक लोकप्रिय जावास्क्रिप्ट लाइब्रेरी है। यह टैप, डबल-टैप, स्वाइप, पिंच, रोटेट और पैन सहित जेस्चर की एक विस्तृत श्रृंखला का समर्थन करता है। यह हल्का, उपयोग में आसान और अत्यधिक अनुकूलन योग्य है। Hammer.js टच इवेंट्स को सुनकर काम करता है और फिर यह निर्धारित करता है कि उपयोगकर्ता टच पॉइंट्स के स्थान और अवधि के आधार पर क्या क्रिया कर रहा है।


 // अपने HTML में Hammer.js शामिल करें
 // 

 let element = document.getElementById('myElement');
 let hammer = new Hammer(element);

 hammer.on('tap', function(event) {
  console.log('टैप इवेंट का पता चला');
 });

 hammer.on('swipe', function(event) {
  console.log('स्वाइप इवेंट का पता चला');
  console.log('स्वाइप दिशा: ' + event.direction);
 });

 hammer.get('pinch').set({ enable: true });
 hammer.get('rotate').set({ enable: true });

 hammer.on('pinch', function(event) {
  console.log('पिंच इवेंट का पता चला');
  element.style.transform = 'scale(' + event.scale + ')';
 });

 hammer.on('rotate', function(event) {
  console.log('रोटेट इवेंट का पता चला');
  element.style.transform = 'rotate(' + event.rotation + 'deg)';
 });

AlloyFinger

AlloyFinger एक और लोकप्रिय जावास्क्रिप्ट लाइब्रेरी है जो जेस्चर रिकॉग्निशन में विशेषज्ञता रखती है, खासकर मोबाइल उपकरणों के लिए। यह अपने छोटे आकार और अच्छे प्रदर्शन के लिए जाना जाता है। यह टैप, स्वाइप, पिंच, रोटेट और प्रेस जैसे सामान्य टच जेस्चर पर ध्यान केंद्रित करता है। यह एलिमेंट्स के लिए जेस्चर बाइंड करने के लिए एक उपयोग में आसान एपीआई प्रदान करता है।


 // अपने HTML में AlloyFinger शामिल करें
 //  // अपने AlloyFinger पथ से बदलें

 let element = document.getElementById('myElement');
 let af = new AlloyFinger(element, {
  tap: function() {
   console.log('टैप इवेंट का पता चला');
  },
  swipe: function(evt) {
   console.log('स्वाइप इवेंट का पता चला');
   console.log('स्वाइप दिशा: ' + evt.direction); // ऊपर, नीचे, बाएँ, दाएँ
  },
  pinch: function(evt) {
   console.log('पिंच इवेंट का पता चला');
   element.style.transform = 'scale(' + evt.scale + ')';
  },
  rotate: function(evt) {
   console.log('रोटेट इवेंट का पता चला');
   element.style.transform = 'rotate(' + evt.angle + 'deg)';
  }
 });

एक्सेसिबिलिटी संबंधी विचार

टच जेस्चर लागू करते समय, विकलांग उपयोगकर्ताओं के लिए एक्सेसिबिलिटी पर विचार करना आवश्यक है। कुछ उपयोगकर्ता मोटर संबंधी दुर्बलताओं के कारण टच जेस्चर का उपयोग करने में सक्षम नहीं हो सकते हैं। कीबोर्ड नियंत्रण या वॉयस कमांड जैसे वैकल्पिक इनपुट तरीके प्रदान करना यह सुनिश्चित करता है कि आपका एप्लिकेशन व्यापक दर्शकों के लिए सुलभ है।

प्रदर्शन अनुकूलन

टच इवेंट्स कम्प्यूटेशनल रूप से महंगे हो सकते हैं, खासकर जब जटिल जेस्चर को संभालते हैं। एक सहज और उत्तरदायी उपयोगकर्ता अनुभव सुनिश्चित करने के लिए प्रदर्शन के लिए अपने कोड को अनुकूलित करना महत्वपूर्ण है।

क्रॉस-ब्राउज़र संगतता

टच इवेंट सपोर्ट विभिन्न ब्राउज़रों और उपकरणों में भिन्न होता है। क्रॉस-ब्राउज़र संगतता सुनिश्चित करने के लिए अपने कोड को विभिन्न प्रकार के ब्राउज़रों और उपकरणों पर परीक्षण करना महत्वपूर्ण है। ब्राउज़र के अंतर को दूर करने वाली पॉलीफ़िल्स या लाइब्रेरी का उपयोग करने पर विचार करें।

अंतर्राष्ट्रीयकरण (i18n) संबंधी विचार

टच जेस्चर लागू करते समय, अंतर्राष्ट्रीयकरण (i18n) पर विचार करना याद रखें। जबकि टच इंटरैक्शन स्वयं आम तौर पर भाषा-अज्ञेयवादी होते हैं, आसपास के यूआई एलिमेंट्स और फीडबैक मैकेनिज्म को विभिन्न भाषाओं और क्षेत्रों के लिए स्थानीयकृत किया जाना चाहिए।

वैश्विक उदाहरण और विचार

आइए विचार करें कि विभिन्न वैश्विक संदर्भों में टच जेस्चर को अलग-अलग तरीके से कैसे लागू किया जा सकता है:

निष्कर्ष

टच जेस्चर आकर्षक और सहज उपयोगकर्ता अनुभव बनाने के लिए एक शक्तिशाली उपकरण हैं। अंतर्निहित टच इवेंट्स को समझकर और उपयुक्त जेस्चर रिकॉग्निशन तकनीकों का उपयोग करके, आप अपने जावास्क्रिप्ट प्रोजेक्ट्स में जेस्चर की एक विस्तृत श्रृंखला लागू कर सकते हैं। यह सुनिश्चित करने के लिए कि आपका एप्लिकेशन सभी उपयोगकर्ताओं के लिए अच्छी तरह से काम करता है, एक्सेसिबिलिटी, प्रदर्शन और क्रॉस-ब्राउज़र संगतता पर विचार करना याद रखें। जैसे-जैसे तकनीक आगे बढ़ती है, नए प्रकार के जेस्चर और इंटरैक्शन देखने की उम्मीद करें, डिजिटल अनुभवों में सबसे आगे रहने के लिए सीखना जारी रखें।

टच जेस्चर: जावास्क्रिप्ट कार्यान्वयन के लिए एक व्यापक गाइड | MLOG