"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إصلاح مشكلات السحب/تغيير الحجم في jQuery باستخدام مقياس تحويل CSS؟

كيفية إصلاح مشكلات السحب/تغيير الحجم في jQuery باستخدام مقياس تحويل CSS؟

تم النشر بتاريخ 2024-11-05
تصفح:318

How to Fix jQuery Drag/Resize Issues with CSS Transform Scale?

سحب/تغيير حجم jQuery باستخدام مقياس تحويل CSS

المشكلة: عند تطبيق تحويل CSS، قم بالتحويل على وجه التحديد: المصفوفة (0.5، 0، 0، 0.5، 0، 0)؛، إلى div وباستخدام إضافات jQuery القابلة للسحب () والقابلة لتغيير الحجم () على العناصر الفرعية، يصبح التغيير الذي يتم إجراؤه بواسطة jQuery "غير متزامن" مع موضع الماوس.

الحل: تصحيح المكونات الإضافية لـ jQuery

تم العثور على حل عن طريق تصحيح المكونات الإضافية لـ jQuery، وتحديدًا طريقتي _mouseStart و_generatePosition لـ $.ui.draggable. نجح هذا الأسلوب بشكل فعال ولكنه يتطلب تعديل رمز البرنامج المساعد الأصلي.

الحل البديل: استخدام معالجات رد الاتصال

ومع ذلك، تم اكتشاف حل أمثل لا يتطلب تعديل الإضافات jQuery مباشرة. من خلال استخدام معالجات رد الاتصال، من الممكن ضبط مواضع وأحجام العناصر القابلة للسحب وتغيير الحجم بناءً على مقياس التكبير/التصغير الحالي.

إصلاح مقياس التحويل للعناصر القابلة لتغيير الحجم:

$(this).resizable({
    minWidth: -(contentElem.width()) * 10, 
    minHeight: -(contentElem.height()) * 10, 
    resize: function(event, ui) {
        // Adjust width and height based on zoom scale
        var changeWidth = ui.size.width - ui.originalSize.width;
        var newWidth = ui.originalSize.width   changeWidth / zoomScale;

        var changeHeight = ui.size.height - ui.originalSize.height;
        var newHeight = ui.originalSize.height   changeHeight / zoomScale;

        ui.size.width = newWidth;
        ui.size.height = newHeight;
    }
});

إصلاح مقياس التحويل للسحب:

$(this).draggable({
    handle: '.drag-handle', 
    start: function(event, ui) {
        ui.position.left = 0;
        ui.position.top = 0;
    }, 
    drag: function(event, ui) {
        // Adjust left and top positions based on zoom scale
        var changeLeft = ui.position.left - ui.originalPosition.left;
        var newLeft = ui.originalPosition.left   changeLeft / (( zoomScale));

        var changeTop = ui.position.top - ui.originalPosition.top;
        var newTop = ui.originalPosition.top   changeTop / zoomScale;

        ui.position.left = newLeft;
        ui.position.top = newTop;
    }
});

يوفر هذا الأسلوب حلاً نظيفًا وغير جراحي للتعامل مع أحداث السحب وتغيير الحجم ضمن العناصر المقاسة باستخدام jQuery دون تعديل أي من وظائفه الأساسية.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3