Код:
<script>
document.addEventListener('mousedown', function(e) {
const modal = e.target.closest('#charppage');
if (!modal) return;
if (e.target.closest('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])')) {
return;
}
if (e.offsetX >= e.target.clientWidth || e.offsetY >= e.target.clientHeight) {
return;
}
let isDragging = false;
let startY = e.clientY;
const style = window.getComputedStyle(modal);
const transformValue = style.transform !== 'none' ? style.transform : 'matrix(1, 0, 0, 1, 0, 0)';
const matrix = new DOMMatrixReadOnly(transformValue);
let initialTranslateY = matrix.m42 || 0;
function onMouseMove(moveEvent) {
if (!isDragging) {
if (Math.abs(moveEvent.clientY - startY) > 3) {
isDragging = true;
modal.style.cursor = 'grabbing';
document.body.style.cursor = 'grabbing';
} else {
return;
}
}
moveEvent.preventDefault();
const deltaY = moveEvent.clientY - startY;
const currentTranslateY = initialTranslateY + deltaY;
modal.style.transform = `translateX(-50%) translateY(${currentTranslateY}px)`;
}
function onMouseUp() {
if (isDragging) {
modal.style.cursor = '';
document.body.style.cursor = '';
}
isDragging = false;
window.removeEventListener('mousemove', onMouseMove);
window.removeEventListener('mouseup', onMouseUp);
}
window.addEventListener('mousemove', onMouseMove);
window.addEventListener('mouseup', onMouseUp);
});</script>
