「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > CSS 変換スケールでの jQuery のドラッグ/サイズ変更の問題を修正する方法

CSS 変換スケールでの jQuery のドラッグ/サイズ変更の問題を修正する方法

2024 年 11 月 5 日に公開
ブラウズ:171

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

CSS Transform Scale を使用した jQuery のドラッグ/サイズ変更

問題: CSS 変換を適用する場合、特に変換: 行列(0.5, 0, 0, 0.5, 0, 0); を div に追加し、子要素で jQuery の draggable() および resizable() プラグインを使用すると、jQuery によって行われた変更はマウスの位置と「同期しなくなります」。

解決策: jQuery プラグインにパッチを適用する

jQuery プラグイン、具体的には $.ui.draggable の _mouseStart メソッドと _generatePosition メソッドにパッチを適用することで解決策が見つかりました。このアプローチは効果的に機能しましたが、元のプラグイン コードを変更する必要がありました。

代替解決策: コールバック ハンドラーを使用する

ただし、プラグイン コードを変更する必要のない、より最適な解決策が発見されました。 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