سؤال

ولدي وظيفة في جافا سكريبت التي تتحرك شعبة واحدة تبعا للموقف الماوس. يتم تعيين هذه الدالة على وظيفة setInterval ()، وتنفيذ كل ثانية. ولست بحاجة لالتقاط موضع الماوس مثل هذا:

function mousemov() {
  document.getElementById("myDiv").style.left = Event.clientX; //don't work
}

window.onload = function() {
  setInterval("mousemov()",1000);
}

ملاحظة: أنا لا يمكن استخدام الحدث MouseMove لأن وظيفة يجب أن يتم تنفيذ حتى إذا تم إيقاف الماوس

.

وشكرا ليساعد!

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

المحلول

والمرة الوحيدة التي يمكنك الوصول إلى الكائن الحدث أثناء تنفيذ معالج الحدث. لذلك ما عليك القيام به هو إنشاء حدث OnMouseMove على وثيقة وتخزين إحداثيات الماوس في كائن يمكن الوصول إليها عالميا. ثم يمكنك الوصول إلى هذه القيم من أي مكان آخر في السيناريو الخاص بك لتحديد موضع الماوس.

وهنا مثال (كنت لا تستخدم مسج، لذلك هذا هو رمز DOM على التوالي):

document.onmousemove = function(e) {
    var event = e || window.event;
    window.mouseX = event.clientX;
    window.mouseY = event.clientY;
}

function mousemov() {
    document.getElementById("myDiv").style.left = window.mouseX;
}

window.onload = function() {
    setInterval(mousemov, 1000);
}

وأود أن جعل علما بأن clientX وclientY لا تأخذ بعين الاعتبار التمرير. ستحتاج إلى استرداد التعويضات التمرير وتطبيقها على القيم التي تم إرجاعها.

نصائح أخرى

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

وهذا هو مثال مسج

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

وظيفة mousemove الخاص سيكون

function mousemov() { 
    document.getElementById("myDiv").style.left = window.mouseX;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top