이 질문은 CSS 변환이 있는 div 내의 하위 요소에 jQuery 드래그 가능 및 크기 조정 가능 플러그인을 적용하는 문제에 관한 것입니다. (행렬)이 적용되었습니다. 문제는 자식 요소를 드래그하거나 크기를 조정할 때 발생합니다. jQuery에서 조정한 내용이 적용된 배율에 해당하는 요소에 의해 마우스 위치와 동기화되지 않기 때문입니다.
이후 몇 가지 실험을 통해 사용자는 jQuery의 드래그 가능하고 크기 조정 가능한 플러그인을 패치하는 것과 관련된 솔루션을 찾았습니다. 패치된 코드의 요약은 다음과 같습니다.
다음 코드는 jQuery UI의 드래그 가능한 플러그인에서 mouseStart() 및 generatePosition() 함수에 대한 수정을 보여줍니다.
function monkeyPatch_mouseStart() { // Monkey patch mouseStart function $.ui.draggable.prototype._mouseStart = function(event) { // Calculate adjusted offset this.offset = this.positionAbs = getViewOffset(this.element[0]); } } function generatePosition(event) { // Calculate adjusted position this.top = ( pageY // Absolute mouse position - this.offset.click.top // Click offset - this.offset.relative.top // Element's initial position + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( this.scrollParent.scrollTop() ) )) ); this.left = ( pageX // Absolute mouse position - this.offset.click.left // Click offset - this.offset.relative.left // Element's initial position + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : this.scrollParent.scrollLeft() )) ); }
드래그 및 크기 조정 기능을 처리하기 위한 jQuery의 대안으로 고려해야 할 몇 가지 옵션은 다음과 같습니다.
사용자는 jQuery 플러그인 내의 콜백 핸들러와 관련된 솔루션도 제공합니다. 이 방법은 플러그인 코드 패치가 필요하지 않으며 드래그 및 크기 조정 작업 중에 배율 인수를 활용하여 너비, 높이 및 위치를 조정합니다.
// Resizable callback handler $(this).resizable({ ... resize: function(event, ui) { // Adjust width and height relative to scale ui.size.width = ui.originalSize.width + (ui.size.width - ui.originalSize.width) / zoomScale; ui.size.height = ui.originalSize.height + (ui.size.height - ui.originalSize.height) / zoomScale; } }); // Draggable callback handler $(this).draggable({ ... drag: function(event, ui) { // Adjust position relative to scale ui.position.left = ui.originalPosition.left + (ui.position.left - ui.originalPosition.left) / zoomScale; ui.position.top = ui.originalPosition.top + (ui.position.top - ui.originalPosition.top) / zoomScale; } });
이 대체 방법은 드래그 및 크기 조정 이벤트를 관리하기 위한 편리한 솔루션입니다. jQuery 플러그인 자체를 수정하지 않고 변형 스케일이 적용된 요소에서.
위 내용은 jQuery 드래그/크기 조정이 CSS Transform Scale과 함께 작동하도록 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!