سؤال

أحاول حساب إحداثيات الماوس الصحيحة ، في مساحة تنسيق المستخدم ، في مستند SVG من داخل رمز JavaScript عندما تأتي أشرطة التمرير إلى الوجود عندما يتم عرض ملف SVG من داخل Firefox. لكنه ليس صحيحا تماما. هناك حاجة إلى الحصول على تلميحات الأدوات المستندة إلى SVG بشكل صحيح حتى عندما يتم تمرير SVG أفقياً أو رأسياً.

أرغب في أن تكون التحولات الإحداثي صحيحة عبر متصفحات IE و Firefox. أيضًا ، أريد أن أفعل ذلك باستخدام حل JavaScript+SVG من المصدر الذي نأمل ألا يتطلب رمز مشروط خاص بالمتصفح. أنا أستخدم حاليًا Firefox 3.5.10 ، لكنني سأفكر في الترقية إلى إصدار أحدث من Firefox ، ولم أختبر أي بعد.

المشكلة التي واجهتها هي الإزاحة الإحداثي لأشرطة التمرير: إن تحويل تنسيق الماوس لا يكفي عندما تأتي أشرطة التمرير إلى الوجود فوق عنصر SVG داخل Firefox. كمساعدات تصحيح الأخطاء لمعرفة التحولات الإحداثي ، أعمل مع ملف SVG بسيط يحتوي على معالجات JavaScript ، كلها في ملف واحد ، والتي ترسم ببساطة المقاطع المتقاطعة في مؤشر الماوس ككائنات خط SVG. تجدها منشورة في svg_cross_hairs.svg. إذا قمت بتحميل هذا الملف في Firefox وقصر نافذة Firefox لأسفل حتى تظهر أشرطة التمرير ، ثم قم بالتمرير إما على أشرطة التمرير الرأسية أو الأفقية ، ستجد أن المتقاطعات المرسومة بواسطة javaScript تقابلها كمية إما الفذرية الأفقية أو الرأسية ، وهو غير صحيح من أجل رسم كائن تلميح الأدوات على أو بالقرب من حيث يوجد مؤشر الماوس بالفعل.

أنا أرى Firefox: احصل على إحداثيات الماوس من زاوية العرض أعلى اليسار من Viewport السؤال الذي يتحدث عن Scrolltop منشأه.

MSG#00056 يوضح أن هناك تشويشًا لمعاني element.{pageX,pageY,clientX,clientY} سمات و element.getscreenCTM طريقة.

هل هناك طريقة أنظف للوصول إلى إحداثيات الماوس الصحيحة ، في نظام إحداثيات المستخدم؟

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

المحلول

يمكنك استخدام evt.pageX / evt.pageY أو window.pageXOffset / window.pageYOffset للوصول إلى شيء يعمل حتى لو تم تمرير SVG.

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