Полагаю, вы пытаетесь создать своего рода Zoom Reticle. Используемый вами скрипт Zoom In Out не имеет хорошего способа t ie в события, когда объект масштабируется. Это делает получение масштаба немного сложнее. Это можно сделать, изучив CSS элемента child
.
Используя эту шкалу, вы можете просто настроить перетаскиваемое удержание.
Ограничения, перетаскиваемые в пределах границ указанного элемента или региона. Поддерживается несколько типов:
- Селектор: Перетаскиваемый элемент будет содержаться в ограничительной рамке первого элемента, найденного селектором. Если элемент не найден, содержимое не будет установлено.
- Элемент: Перетаскиваемый элемент будет содержаться в ограничительной рамке этого элемента.
- String : Возможные значения:
"parent"
, "document"
, "window"
. - Массив: Массив, определяющий ограничивающий прямоугольник в форме
[ x1, y1, x2, y2 ]
.
Для этого фрагмента мы будем использовать формат Array для управления left
и top
child
для содержания в пределах 4 границ. Это будет изменено всякий раз, когда child
увеличено. Этот пример фокусируется на левой и правой защитной оболочке и может быть расширен для управления сверху и снизу.
$(function() {
function getBounds(tObj) {
var t = tObj.position().top;
var l = tObj.position().left + parseInt(tObj.css("margin-left"));
var b = t + tObj.height();
var r = l + tObj.width();
return [l, t, r, b];
}
function getScale(tObj) {
var c = tObj.css("transform");
var p = c.split(", ");
var s = parseFloat(p[3]);
return s;
}
function calcCont(tObj) {
var b = getBounds(tObj);
var child = tObj.children()[0];
var s = getScale($(child)) || 1;
var n = [
b[0],
b[1],
b[2],
b[3]
];
if (s > 1) {
n[0] = b[2] - ($(child).width() * s);
n[2] = b[0];
}
return n;
}
new ScrollZoom($('.parent'), 20, 0.5);
$('.child').draggable({
containment: calcCont($(".parent"))
});
$(".parent").on("mousewheel DOMMouseScroll", function(e) {
$(".child").draggable("option", "containment", calcCont($(".parent")));
return true;
});
});
body {
background: #222;
}
.parent {
width: 400px;
height: 400px;
border: 1px solid;
margin: auto;
}
.child {
width: 380px;
height: 380px;
background: rgba(255, 0, 0, 0.1);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://techeak.com/zoominout.js"></script>
<div class="parent">
<div class="child">
</div>
</div>