`
jackeysion
  • 浏览: 127573 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多
写了一个拖动条的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方法
分享到:
评论

相关推荐

    C# wpf 实现局部刷新的尺子控件

    在做视频剪辑工具的时候是需要尺子控件的,在wpf中很容易实现一个自定义的尺子控件。但是在实际使用中会遇到一个问题,即尺子越长,渲染速度越慢,当其总刻度到达几百万时拖动会直接造成界面卡顿。所以需要给标尺...

    [原创]用SWT/JFace实现的深路径自动生成软件(附源码)

    不过由于是SWT+JFace实现的桌面程序,想研究Java桌面程序应用的朋友也可以下载看看,其一些特性及设计思路还是比较有用的。 &lt;br&gt;详细资料及截图请参考压缩包中doc/how to run.doc文档 &lt;br&gt;新特性: 支持拽...

    vc++ 应用源码包_1

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_2

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_6

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_3

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_5

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    asp.net知识库

    .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...

    vc++ 开发实例源码包

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    Android实训实习报告总结.docx

    只会照着别人的葫芦来画瓢,即没有设计思想,也没有自主原创的代码,不好不好 于是乎,进了公司跟着项目走,用项目来驱动自己去学习和提高 公司是1+1开发模式,即1个美工 + 1个工程师,负责完成一个项目(主要是游戏...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    到这里,我们就实现了一个界面结束执行,然后弹出另一个 界面的程序。下面我们在主窗口上加一个按钮,按下该按钮,弹出一个对话框, 但这个对话框关闭,不会使主窗口关闭。 8.如下图,在主窗口加入按钮,显示文本为...

Global site tag (gtag.js) - Google Analytics