MWSE/public/trial.html

167 lines
5.1 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>jQuery ile Resizable Kutu</title>
<style>
body { font-family: Arial, Helvetica, sans-serif; height:100vh; margin:0; display:flex; align-items:center; justify-content:center; background:#f2f2f2; }
.stage { width:90vw; height:80vh; border:1px solid #ccc; position:relative; background:#fff; }
.box {
position:absolute;
left:50px; top:50px;
width:300px; height:200px;
background:#e8f0ff;
border:1px solid #5b8cff;
box-sizing:border-box;
user-select:none;
}
/* küçücük tutamaklar (handles) */
.handle {
position:absolute;
width:12px; height:12px;
background:#5b8cff;
border-radius:2px;
margin:-6px 0 0 -6px; /* merkezler */
cursor:default;
}
.handle.n { top:0; left:50%; cursor:n-resize; }
.handle.s { bottom:0; left:50%; cursor:s-resize; }
.handle.e { right:0; top:50%; cursor:e-resize; }
.handle.w { left:0; top:50%; cursor:w-resize; }
.handle.ne { right:0; top:0; cursor:ne-resize; }
.handle.nw { left:0; top:0; cursor:nw-resize; }
.handle.se { right:0; bottom:0; cursor:se-resize; }
.handle.sw { left:0; bottom:0; cursor:sw-resize; }
/* bilgi satırı (isteğe bağlı) */
.info { position:absolute; left:6px; bottom:6px; font-size:12px; color:#333; background:rgba(255,255,255,0.8); padding:4px 6px; border-radius:4px; }
</style>
</head>
<body>
<div class="stage">
<div class="box" id="resizable">
<div class="handle n" data-dir="n"></div>
<div class="handle s" data-dir="s"></div>
<div class="handle e" data-dir="e"></div>
<div class="handle w" data-dir="w"></div>
<div class="handle ne" data-dir="ne"></div>
<div class="handle nw" data-dir="nw"></div>
<div class="handle se" data-dir="se"></div>
<div class="handle sw" data-dir="sw"></div>
<div class="info" id="info"></div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$(function(){
var $doc = $(document);
var $box = $('#resizable');
var dragging = false;
var dir = null;
var start = {}; // {mouseX, mouseY, left, top, width, height}
var minW = 60, minH = 40;
function updateInfo(){
var w = Math.round($box.width()), h = Math.round($box.height());
$('#info').text(w + ' x ' + h);
}
updateInfo();
$box.on('mousedown', '.handle', function(e){
e.preventDefault();
dragging = true;
dir = $(this).data('dir');
var offset = $box.position();
start = {
mouseX: e.pageX,
mouseY: e.pageY,
left: offset.left,
top: offset.top,
width: $box.outerWidth(),
height: $box.outerHeight()
};
// disable text selection while dragging
$('body').css('user-select','none');
});
$doc.on('mousemove', function(e){
if(!dragging) return;
e.preventDefault();
var dx = e.pageX - start.mouseX;
var dy = e.pageY - start.mouseY;
var newLeft = start.left;
var newTop = start.top;
var newW = start.width;
var newH = start.height;
// handle horizontal changes
if(dir.indexOf('e') !== -1){
newW = Math.max(minW, start.width + dx);
}
if(dir.indexOf('w') !== -1){
newW = Math.max(minW, start.width - dx);
newLeft = start.left + (start.width - newW);
}
// handle vertical changes
if(dir.indexOf('s') !== -1){
newH = Math.max(minH, start.height + dy);
}
if(dir.indexOf('n') !== -1){
newH = Math.max(minH, start.height - dy);
newTop = start.top + (start.height - newH);
}
// apply
$box.css({ left: newLeft + 'px', top: newTop + 'px', width: newW + 'px', height: newH + 'px' });
updateInfo();
});
$doc.on('mouseup mouseleave', function(){
if(dragging){
dragging = false;
dir = null;
$('body').css('user-select','auto');
}
});
// optional: allow dragging the whole box when clicking inside (but not on handles)
var draggingBox = false, dragBoxStart = {};
$box.on('mousedown', function(e){
if($(e.target).hasClass('handle')) return;
e.preventDefault();
draggingBox = true;
dragBoxStart = { mouseX: e.pageX, mouseY: e.pageY, left: $box.position().left, top: $box.position().top };
$('body').css('user-select','none');
});
$doc.on('mousemove', function(e){
if(!draggingBox) return;
var nx = dragBoxStart.left + (e.pageX - dragBoxStart.mouseX);
var ny = dragBoxStart.top + (e.pageY - dragBoxStart.mouseY);
$box.css({ left: nx + 'px', top: ny + 'px' });
});
$doc.on('mouseup', function(){
if(draggingBox){
draggingBox = false;
$('body').css('user-select','auto');
}
});
// keyboard nudges (isteğe bağlı)
$doc.on('keydown', function(e){
e.preventDefault();
if(!e.altKey) return; // alt ile etkinleştir
var pos = $box.position();
if(e.key === 'ArrowLeft') $box.css('left', pos.left - 1);
if(e.key === 'ArrowRight') $box.css('left', pos.left + 1);
if(e.key === 'ArrowUp') $box.css('top', pos.top - 1);
if(e.key === 'ArrowDown') $box.css('top', pos.top + 1);
});
});
</script>
</body>
</html>