البرمجة

تحسين سحب وإسقاط العناصر في Gantt Chart باستخدام D3

عندما تقوم بسحب وإسقاط عنصر SVG Rect من مورد واحد إلى مورد آخر في الرسم البياني Gantt الذي تقوم بإنشائه باستخدام D3.js، هناك اثنين من الأمور التي تحتاج إلى مراعاتها:

  1. تحديد موضع الإسقاط: يجب عليك تحديد الشريط الذي تريد إسقاط العنصر عليه بناءً على موضع الإسقاط على المحور y. يمكنك القيام بذلك باستخدام الدالة invert لمقياس الشريط الخاص بك yScale. ومن ثم يمكنك تحديد المربع الذي ينتمي إليه عنصر SVG Rect بناءً على نتيجة الدالة invert:

    javascript
    _onDrop: function(d) { var y = d3.event.y; var bandIndex = Math.floor(this.yScale.invert(y)); var newY = this.yScale(bandIndex); d3.select(this).attr("transform", "translate(" + [0, newY] + ")"); },
  2. إعادة ترميز قيمة الشريط للمحور y: بما أنك تحتاج إلى تحديد موضع الإسقاط بناءً على موضع الماوس على المحور y، يجب عليك تعديل قيمة الشريط لتتناسب مع موضع الإسقاط الجديد. يمكنك القيام بذلك عن طريق تعيين القيمة الجديدة لـ y بناءً على نتيجة invert للقيمة الحالية:

    javascript
    _onDrag: function(d) { var x = d3.event.dx + d3.event.x; var y = d3.event.dy + d3.event.y; var bandIndex = Math.floor(this.yScale.invert(y)); var newY = this.yScale(bandIndex); d3.select(this).raise().attr("transform", "translate(" + [x, newY] + ")"); },

باستخدام هذه الطرق، يمكنك تنفيذ سحب وإسقاط العناصر SVG Rect بين الموارد في الرسم البياني Gantt الخاص بك بنجاح.

المزيد من المعلومات

بالتأكيد، هنا بعض المعلومات الإضافية التي قد تكون مفيدة:

  • تحديد موضع الإسقاط بالضبط: إذا كنت ترغب في تحديد موضع الإسقاط بدقة أكبر، يمكنك استخدام دالة scaleBand للحصول على حجم الشريط وموضعه الدقيق داخل الشريط. على سبيل المثال:

    javascript
    _onDrop: function(d) { var y = d3.event.y; var bandIndex = this.yScale.domain().findIndex(function(band) { var range = this.yScale(band); return y >= range && y <= (range + this.yScale.bandwidth()); }); var newY = this.yScale(bandIndex); d3.select(this).attr("transform", "translate(" + [0, newY] + ")"); },
  • تحديث البيانات بعد الإسقاط: بعد تحديد موضع الإسقاط الجديد، قد ترغب في تحديث البيانات الخاصة بك لتعكس التغييرات. يمكنك القيام بذلك عن طريق تحديث بيانات العنصر الذي تم سحبه وإسقاطه على الشريط الجديد.

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

باستخدام هذه الإضافات، يمكنك تحقيق سحب وإسقاط سلس ودقيق للعناصر على الرسم البياني Gantt الخاص بك باستخدام D3.js.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!