ক্লিক ইভেন্টের মতো 'টাচস্টার্ট' ইভেন্টের জন্য e.PageX পজিশনের সমতুল্য কি আছে?


104

আমি লাইভ ফাংশনটিতে ব্যবহৃত একটি টাচস্টার্ট ইভেন্টের jQuery এর সাথে এক্স পজিশনটি পাওয়ার চেষ্টা করছি?

অর্থাত

$('#box').live('touchstart', function(e) { var xPos = e.PageX; } );

এখন, এটি ইভেন্ট হিসাবে 'ক্লিক' করে কাজ করে। পৃথিবীতে কীভাবে ( আলফা জিকিউরি মোবাইল ব্যবহার না করে ) আমি কোনও স্পর্শ ইভেন্টের সাথে এটি পাই?

কোন ধারনা?

কোন সাহায্যের জন্য ধন্যবাদ।


আমি যারা এই সাহায্য করার প্রয়োজন হয় এই পাওয়া: - stackoverflow.com/questions/3183872/... এটি touchstart কাজ করে।
— মোমযুক্ত

উত্তর:


180

কিন্ডা দেরিতে, তবে আপনাকে জিক্যুরি ম্যাসেজ করে না, মূল ইভেন্টটি অ্যাক্সেস করতে হবে। এছাড়াও, যেহেতু এগুলি বহু-স্পর্শ ইভেন্ট, তাই অন্যান্য পরিবর্তনগুলি করা দরকার:

$('#box').live('touchstart', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});

আপনি যদি অন্য আঙ্গুলগুলি চান তবে আপনি এগুলি স্পর্শ তালিকার অন্যান্য সূচীতে খুঁজে পেতে পারেন।

নতুন জ্যাকুরির জন্য আপডেট করুন:

$(document).on('touchstart', '#box', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});

আপনার শেষে একটি অনুপস্থিত শেষ বন্ধনী রয়েছে, এটি হওয়া উচিত:})
— স্টিভ্যাসি

তুমি সঠিক. বিস্মিত কেউ 2 বছর ধরে খেয়াল করেনি! =) ধন্যবাদ!
— mkoistinen

দুর্ভাগ্যক্রমে আমার পক্ষে কাজ করেনি, আমি প্রথমটি x এবং y পেয়েছিলাম touchmove।
— অ্যান্ড্রুব

@andrewb, অ্যাড e.preventDefault()মধ্যে touchstartইভেন্ট হ্যান্ডলার।
— matewka

ধন্যবাদ, বন্ধু. e.touches[0].pageX;আমার জন্য ভাল কাজ করেছেন
— জয়ন্ত বর্ষি

43

আমি JQuery ভিত্তিক প্রকল্পের জন্য এই সাধারণ ক্রিয়াটি ব্যবহার করি

    var pointerEventToXY = function(e){
      var out = {x:0, y:0};
      if(e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel'){
        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
        out.x = touch.pageX;
        out.y = touch.pageY;
      } else if (e.type == 'mousedown' || e.type == 'mouseup' || e.type == 'mousemove' || e.type == 'mouseover'|| e.type=='mouseout' || e.type=='mouseenter' || e.type=='mouseleave') {
        out.x = e.pageX;
        out.y = e.pageY;
      }
      return out;
    };

উদাহরণ:

$('a').on('mousedown touchstart', function(e){
  console.log(pointerEventToXY(e)); // will return obj ..kind of {x:20,y:40}
})

আশা করি এটি আপনার পক্ষে উপকারী হবে;)


13
ইভেন্টের ধরণটি পরীক্ষা করার দরকার নেই কারণ স্পর্শ ইভেন্টের জন্য e.pageX অপরিজ্ঞাত করা হবে। কেবল করুনout.x = e.pageX || e.originalEvent.touches[0].pageX;
— গ্রিফিন

1
প্রত্যাবর্তনের আগে আমি এই অংশটি যুক্ত করার জন্য যদি এটি কাউকে সহায়তা করে তবে পিতামণ্ডলের উপাদানগুলির উপর ভিত্তি করে শতাংশের অবস্থান অর্জন করুন ... var অফসেটপ্যারেন্ট = e.target.offsetParent; ভ্যারেন্টালফিট = e.target.offsetParent.offsetLeft; আউট। out.percentY = (out.y - অফসেটপ্যারেন্ট.অফসেটটপ) / অফসেটপ্রেেন্ট.অফসেটহাইট; ফিরে আসা;
— sradforth

if(e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel'){-> if (e.type.startsWith("touch"))?
— ই

@ গ্রিফিন - আমি মনে করি যে আপনার পরামর্শের সাথে সমস্যাটি হ'ল ডেস্কটপে যখন নথির বাম প্রান্তে মাউস থাকে তখন আপনার বক্তব্যের প্রথম শাখাটি 0 দেয় যা মিথ্যা হিসাবে ব্যাখ্যা করা হয় এবং তারপরে ব্রাউজারের ত্রুটি কারণ দ্বিতীয় শাখায় অপরিবর্তিত একমত?
— এমএসসি

13

আমি এখানে অন্যান্য উত্তরগুলির কয়েকটি চেষ্টা করেছি, তবে আসল ইভেন্টটিও অপরিজ্ঞাত ছিল। পরিদর্শন শেষে, একটি টাচলিস্ট শ্রেণিবদ্ধ সম্পত্তি (অন্য পোস্টার দ্বারা প্রস্তাবিত হিসাবে) পাওয়া গেছে এবং এভাবে পেজএক্সএক্স / ওয়াইয়ে পৌঁছাতে সক্ষম হয়েছেন:

var x = e.changedTouches[0].pageX;

4
এটি সমস্ত জাভাস্ক্রিপ্ট ভিত্তিক কোডের জন্য সূক্ষ্ম কাজ করে। স্ক্রু jquery
— মার্টিয়ান2049

2
আমার ত্রাণকর্তা! এমনকি টাচমোভ () এর জন্যও পুরোপুরি কাজ করে।
— তিবিক্স

7

আপনি jQuery ব্যবহার করে না থাকেন ... আপনি ইভেন্টের অ্যাক্সেস এক প্রয়োজন TouchListকরা একটি পেতে Touchবস্তুর যা pageX/Y clientX/Yইত্যাদি

এখানে সম্পর্কিত ডক্সের লিঙ্কগুলি রয়েছে:

আমি e.targetTouches[0].pageXআমার ক্ষেত্রে ব্যবহার করছি ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.