写了一个拖动条的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方法
分享到:
相关推荐
在做视频剪辑工具的时候是需要尺子控件的,在wpf中很容易实现一个自定义的尺子控件。但是在实际使用中会遇到一个问题,即尺子越长,渲染速度越慢,当其总刻度到达几百万时拖动会直接造成界面卡顿。所以需要给标尺...
不过由于是SWT+JFace实现的桌面程序,想研究Java桌面程序应用的朋友也可以下载看看,其一些特性及设计思路还是比较有用的。 <br>详细资料及截图请参考压缩包中doc/how to run.doc文档 <br>新特性: 支持拽...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
在这个"对MP3文件剪切更准确_1.9.zip"压缩包中,包含了一个名为"MP3剪切器.exe"的应用程序,以及一个名为"comdlg32.ocx"的控件文件,这两个文件是实现精确MP3剪切的关键组件。 "MP3剪切器.exe"是一个专门针对MP3...
到这里,我们就实现了一个界面结束执行,然后弹出另一个 界面的程序。下面我们在主窗口上加一个按钮,按下该按钮,弹出一个对话框, 但这个对话框关闭,不会使主窗口关闭。 8.如下图,在主窗口加入按钮,显示文本为...
它允许用户通过拖拽界面来创建完全原创的2D游戏,无需编写任何代码。这款工具支持iOS、Android、HTML5甚至Mac平台的应用程序开发。 **系统需求:** - 操作系统:Windows 7 或 Windows Vista。 - 推荐使用最新版的...