js中transform放大比例时,移动范围也扩大了

随_声 2020-08-24 02:29:48
问题就是在指定div的宽高中双指放大不能超过边界,图中2号可以随意在1号中拖动,也可以在随意位置对它进行缩放操作,如果在正中心固定位置可以使用缩放比例,那在随意位置呢,如何让它缩放比例不超出边界。并且移动时的偏移量不会随着比例而移动跑出扩大指定边界内和缩小移动端范围



$(function () {
$("#sdh").draggable({
containment: '#sd',
});
$("#sdh").resizable({
handles:'all',
containment: '#sd',
});
});

var eleImg = document.querySelector('#sdh');
var store = {
scale: 1
};

// 缩放事件的处理
eleImg.addEventListener('touchstart', function (event) {
var touches = event.touches;
var events = touches[0];
var events2 = touches[1];

event.preventDefault();

// 第一个触摸点的坐标
store.pageX = events.pageX;
store.pageY = events.pageY;
store.moveable = true;

if (events2) {
store.pageX2 = events2.pageX;
store.pageY2 = events2.pageY;
}
store.originScale = store.scale || 1;
});
document.addEventListener('touchmove', function (event) {
if (!store.moveable) {
return;
}
var touches = event.touches;
var events = touches[0];
var events2 = touches[1];
// 双指移动
if (events2) {
// 第2个指头坐标在touchmove时候获取
if (!store.pageX2) {
store.pageX2 = events2.pageX;
}
if (!store.pageY2) {
store.pageY2 = events2.pageY;
}

// 获取坐标之间的举例
var getDistance = function (start, stop) {
return Math.hypot(stop.x - start.x, stop.y - start.y);
};

// 双指缩放比例计算
var zoom = getDistance({
x: events.pageX,
y: events.pageY
}, {
x: events2.pageX,
y: events2.pageY
}) /
getDistance({
x: store.pageX,
y: store.pageY
}, {
x: store.pageX2,
y: store.pageY2
});

var a_x = $("#body").offset().left;
var a_y = $("#body").offset().top;
var xx = $("#sd").offset().left;
var yy = $("#sd").offset().top;
var ww = $("#sd").outerWidth() + 1;
var hh = $("#sd").outerHeight() + 1;

var ww2 = $(eleImg).width();
var hh2 = $(eleImg).height();
var xx2 = $(eleImg).offset().left;
var yy2 = $(eleImg).offset().top;

//元素获取左(上下),右(上下)角的位置
var upper_right_X = (xx2 - xx) + ww2;//右上角X
var lower_left_Y = (yy2 - yy) + hh2;//左下角Y
var upper_left_X = (xx2 - xx);//左上角X
var upper_left_Y = (yy2 - yy);//左上角Y

//获取边界窗口的左(上下),右(上下)角的位置
var upper_right_X2 = (xx - a_x) + ww;//右上角X
var lower_left_Y2 = (yy - a_y) + hh;//左下角Y
var upper_left_X2 = (xx - a_x);//左上角X
var upper_left_Y2 = (yy - a_y);//左上角Y

// 应用在元素上的缩放比例
var newScale = store.originScale * zoom;

if (upper_right_X < upper_right_X2 && lower_left_Y < lower_left_Y2 && (parseInt(upper_left_X)) > upper_left_X2 && (parseInt(upper_left_Y)) > upper_left_Y2) {//判断是否超出边界(这条判断移动一下偏移量跟着放大比例就跳出边界内了,就没用了)
// 最大缩放比例限制
if (newScale > 2) {
newScale = 2;
}
// 记住使用的缩放值
store.scale = newScale;
// 图像应用缩放效果
eleImg.style.transform = 'scale(' + newScale + ')';
}
}
});

document.addEventListener('touchend', function () {//手指离开屏幕后触发
store.moveable = false;

delete store.pageX2;
delete store.pageY2;
});
document.addEventListener('touchcancel', function () {//执行都不进来
store.moveable = false;
delete store.pageX2;
delete store.pageY2;
});
...全文
4787 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧