سؤال

أحتاج إلى الحصول على موقف من أو إحداثيات الماوس المطلقة (x و y) باستخدام jQuery (يفضل) هذا البرنامج التعليمي ولكن خارج أي حدث جافا سكريبت. شكرا لك.

هل كانت مفيدة؟

المحلول

غير ممكن. ومع ذلك، يمكنك استخدام نفس النهج في البرنامج التعليمي لتخزين الموضع في متغير عالمي وقراءته خارج الحدث.

مثله:

jQuery(document).ready(function(){
   $().mousemove(function(e){
      window.mouseXPos = e.pageX;
      window.mouseYPos = e.pageY;
   }); 
})

يمكنك الآن استخدام window.mouseXPos و window.mouseYPos من اي مكان.

نصائح أخرى

بدأ هذا كتعليق على إجابة ساستري تشيتان, ، لكنني أدركت أنه قد يستحق النشر كإجابة:

سأكون حريصا على وجود مستوى مستند، دائما mousemove الحدث، حتى لو كنت تقترب فقط موقف المؤشر. هذا هو الكثير من المعالجة ويمكن أن يتضيق بأي متصفح، وخاصة أبطأ مثل أي.

يمثل مشكلة مثل هذا بالتأكيد تقريبا مسألة قرار التصميم: إذا لم تكن بحاجة إلى التعامل مع حدث ماوس لاستطلاع لوظيفة المؤشر، هل تحتاج حقا إلى موضع المؤشر؟ هل هناك طريقة أفضل لحل المشكلة التي تحاول حلها؟

تحرير: حتى في Safari 4، وهو (بخس) سريع جدا, ، هذا واحد mousemove يجعل الحدث كل تفاعل مع تلك الصفحة التعليمية متقلبة بشكل ملحوظ بالنسبة لي. فكر في كيفية تأثير ذلك على تصورات المستخدمين لموقعك أو تطبيقك.

ستقلل هذه الوظيفة تأثير أداء UI عن طريق الحصول على موقف الماوس فقط عند الفاصل:

function getMousePosition(timeoutMilliSeconds) {
    // "one" attaches the handler to the event and removes it after it has executed once 
    $(document).one("mousemove", function (event) {
        window.mouseXPos = event.pageX;
        window.mouseYPos = event.pageY;
        // set a timeout so the handler will be attached again after a little while
        setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds);
    });
}

// start storing the mouse position every 100 milliseconds
getMousePosition(100);

كما هو الحال في الإجابة الأخرى "يمكنك الآن استخدام window.mouseXPos و window.mouseYPos من اي مكان."

تفقد القليل من الدقة حيث لن يتم اكتشاف خطوة الماوس خلال الفواصل الزمنية.

لدي محاولة تعويض Kchetan Calastry، لكنه لا يعمل. (أنا أستخدم JQuery 1.6.4). أنا غير الرمز ثم أعمل الآن. هنا هو رمز بلدي. آمل أن يساعد هذا.



    $(document).ready(function(){
       $(document).mousemove(function(e){
          window.mouseXPos = e.pageX;
          window.mouseYPos = e.pageY;
       }); 
    });

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top