(原创)自己实现的一个比较通用的拖动条

本文介绍了一个使用JavaScript实现的拖动条组件,支持水平和垂直拖动,并演示了如何控制相邻区域的尺寸变化。
写了一个拖动条的js类 . 只测试了左右拖动,效果还可以.

function Bar(type, id, IdA, IdB) {
// 上下还是左右
this.type = type;
this.moveable = false;
this.isIE = (navigator.appName == "Microsoft Internet Explorer"
? true
: false);
this.domObj = document.getElementById(id);
if (IdA) {
this.areaA = document.getElementById(IdA);
} else {
this.areaA = this.domObj.previousSibling;
}
if (IdB) {
this.areaB = document.getElementById(IdB);
} else {
this.areaB = this.domObj.nextSibling;
}
// 初始坐标
this.X = this.domObj.offsetLeft;
this.Y = this.domObj.offsetTop;
// 隐藏标志
this.areaAHideFlag = false;
// 页面宽高
this.clientWidth = document.body.clientWidth;
this.clientHeight = document.body.clientHeight;
}
// 鼠标起来
Bar.prototype.doMouseUp = function() {
this.endListen();
}
// 鼠标按下
Bar.prototype.doMouseDown = function() {
this.startListen();
}
// 鼠标移动
Bar.prototype.doMouseMove = function() {
// 判断type
var X, Y, tmp;
// 上下
if (!this.moveable) {
// 不可移动,退出
return;
}
if (this.type == "v") {
Y = getEvent().clientY;
tmp = 500;

if (X <= 100) {
X = 110;
this.doMouseUp();
}
if (X > tmp) {
X = tmp - 10;
this.doMouseUp();
}
this.domObj.style.top = Y;
this.areaA.style.height = Y;
this.areaB.style.top = this.domObj.style.top + this.domObj.offsetHeight;
this.areaB.style.height = this.clientHeight - this.areaB.offsetTop;
}
// 左右
if (this.type == "h") {
X = getEvent().clientX;
tmp = 500;

if (X <= 100) {
X = 110;
this.doMouseUp();
}
if (X > tmp) {
X = tmp - 10;
this.doMouseUp();
}
this.domObj.style.left = X;
this.areaA.style.width = X;
this.areaB.style.left = X + this.domObj.offsetWidth;
this.areaB.style.width = this.clientWidth - this.areaB.offsetLeft;
}

}
// 开始监听
Bar.prototype.startListen = function() {
if (this.isIE) {
this.domObj.setCapture();
} else {
document.captureEvents(Event.MOUSEMOVE);
}
if (this.type == "h") {
this.X = getEvent().clientX;
}
if (this.type == "v") {
this.Y = getEvent().clientY;
}
this.moveable = true;
}
// 结束监听
Bar.prototype.endListen = function() {
if (this.isIE) {
this.domObj.releaseCapture();
} else {
document.releaseEvents(Event.MOUSEMOVE);
}
this.moveable = false;
}
Bar.prototype.hide = function() {
// 如果没有隐藏左侧 或上侧 ,将左侧或上侧 隐藏
this.areaA.style.display = "none";
this.domObj.style.left = 0;
this.areaB.style.left = this.domObj.offsetWidth;
this.areaB.style.width = this.clientWidth - this.areaB.offsetLeft;
this.areaAHideFlag = true;
// 隐藏之后移除this.domObj的监听事件
}
Bar.prototype.show = function() {
this.areaA.style.display = "block";
this.domObj.style.left = this.areaA.offsetWidth;
this.areaB.style.left = this.domObj.offsetLeft + this.domObj.offsetWidth;
this.areaB.style.width = this.clientWidth - this.areaB.offsetLeft;
this.areaAHideFlag = false;
// 显示之后添加this.domObj的监听事件
}
//showOrHide函数在外部写,根据flag调用hide或者是show方法
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值