js实现拖拽框

纯js版的拖拽框,该效果很简单 直接看代码.....

<!doctype html>
<html>
	<head>
		<meta charset="urf-8"/>
		<style>
			#box{
				border:1px solid #ccc;
				position:absolute;
				border-radius:4px;
				border-shadow:10px 10px 5px #888888;
			}
			#box h1{
				margin:0;
				padding:3px;
				background:#141414;
				color:#fff;
				height:32px;
				line-height:32px;
				text-align:center;
				font-size:12px;
				cursor:move;
			}
		</style>

	</head>
	<body>
	<input id="xy_text" style="margin:30px;width:400px;height:30px;line-height:30px;font-size:22px;"/>
		<div id="box" style="width:480px;height:200px;">  <!-- 此处需要行内样式,否则使用 document.getElementById('box').style.width 获取不到值使用jq就可以 -->
			<h1 id="title">标题</h1>
		</div>

		<script type="text/javascript">
			function $(id){
				return document.getElementById(id);
			}
			window.onload = init;

			function getHeight(){
				return window.innerHeight || document.documentElement && document.documentElement.clientHeight ||
					document.body.clientHeight;
			}

			function getWidth(){
				return window.innerWidth || document.documentElement && document.documentElement.clientWidth ||
				   document.body.clientWidth;
			}

			function init(){
				//鼠标按下去
				var titleDom = $('title');
				titleDom.onmousedown = mousedown;
				document.onmousemove = mousemove;
				document.onmouseout = mouseup;
				document.onmouseup = mouseup;
				var boxDom = $('box');
				var width = parseInt(boxDom.style.width);
				var height = parseInt(boxDom.style.height);
				var bodyWidth = getWidth();
				var bodyHeight = getHeight();
				boxDom.style.top = (bodyHeight - height)/2 + 'px';
				boxDom.style.left = (bodyWidth - width)/2 + 'px';
			}
			var t = 0, l = 0 , x = 0 , y = 0 ,isover = false;

			function mousedown(event){
				var e = event || window.event;
				x = e.clientX;
				y = e.clientY;
				var boxDom = $('box');
				l = parseInt(boxDom.style.left);
				t = parseInt(boxDom.style.top);
				isover = true;
			}

			function mousemove(event){
				if(isover){
					var e = event || window.event;
					var newLeft = l + e.clientX - x;
					var newTop = t + e.clientY - y;
					$('xy_text').value = 'newLeft = '+newLeft + ' , newTop = '+newTop;
					var boxDom = $('box');
					if(newTop <= 0)newTop=0;
					if(newLeft <= 0)newLeft=0;
					var maxLeft = getWidth() - parseInt(boxDom.style.width);
					var maxTop = getHeight() - parseInt(boxDom.style.height);
					if(newLeft >= maxLeft)newLeft=maxLeft;
					if(newTop >= maxTop)newTop=maxTop;
					boxDom.style.top = newTop+'px';
					boxDom.style.left = newLeft+'px';
				}
			}

			function mouseup(event){
				if(isover){
					isover = false;
					$('xy_text').value = isover;
				}
			}
		</script>
	</body>
</html>
时间: 2024-10-10 11:15:41

js实现拖拽框的相关文章

jquery自定义控件拖拽框dragbox

概述: 在做项目的过程中遇到了拖拽框的使用,虽然网上有很多类似的插件,但总归不如自己的好使,于是就自己写了一个,在此总结下来,以便后用. 效果: 提供方法: setTitle(title):设置标题: setContent(content):设置内容: setsize(width, height):设置大小: hide():隐藏: show():显示: 使用方法: 创建对象 var dragbox = $("#dragbox").DragBox({ title:"拖拽的框子&

jquery.dragsort.js 实现拖拽过程遇到的问题

1.在IE下第一次拖动的时候,被拖动的li元素会不显示,查了很多资料发现是因为在IE中定位出了问题,li标签还在,只是位置计算出错.解决的办法是在li的css样式中position设置为relative.这个问题在火狐等其他浏览器是不存在的. 2.如果拖动的li所在容器出现了滚动条,当滚动条滑到最下面的时候,拖拽下面的li的浮动层位置会出现偏移.解决的办法是在jquery.dragsort.js中,this.draggedItem.css({ top: top, left: left });这句

gridster.js–可拖拽的网格插件

gridster.js–可拖拽的网格插件 gridster.js 是一个 jQuery 插件用来构建直观的可拖放的布局,支持多列布局,你还可以动态的添加和删除表格中的元素. \ 主要特性 1.只依赖jQuery 2.支持元素的添加和删除 3.文档比较全 4.拥有测试用例,你可以查看你的浏览器的测试结果 5.比较适合开发益智游戏 如何使用 引入类库,包括jQuery和gridster.js: <script src="http://ajax.googleapis.com/ajax/libs/

用js实现拖拽功能

平常我们在网上可以看到,按住一张图片,然后拖到另一处去,前天在网上看石川(Blue)老师 的js课堂,有见过这个,写下来与大家分享一下: 1,先画个div小红块,样式设置如下: #div1{width: 200px; height: 200px; background-color: red; position:absolute;} 这里的positon属性很重要,如果没有这个,根本拖不动你可以试一下. 2,然后需要用到三个事件,onmousedown, onmousemove, onmouseu

原生js实现拖拽弹框的效果

研究了一上午,模仿了拖拽弹框的效果,小有成就 <script type="text/javascript"> function getByClass(classname,parent){ var par=parent||document, eles=par.getElementsByTagName("*"), needArr=[]; for(var i=0;i<eles.length;i++){ if(eles[i].className==clas

JS—实现拖拽

JS中的拖拽示例:    1)实现拖拽思路:当鼠标按下和拖拽过程中,鼠标与拖拽物体之间的相对距离保持不变    2)实现拖拽遇到的问题:        问题1:当鼠标按下移动过快时,离开了拖拽的物体时,这时拖拽物体将不再随着鼠标移动                因为拖拽的div太小了,这时我们可以将在拖拽物体上的mousemove事件放到document上面                同时将mouseup也改为document上面的事件                IE下直接用obj.s

js 利用jquery.gridly.js实现拖拽并且排序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src='javascripts/jquery.js' type='text/javascript'></script> <script src='javascripts/jqu

一个用js实现拖拽的小例子

代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 7 <style> 8 9 body { 10 margin: 0; 11 } 12 13 #rect { 14 width: 100px; 15 height: 100px; 16 b

JS简易拖拽效果

原理:注册mousemove事件,使元素跟随鼠标挪动:注册mouseup事件,移除mousemove事件,使得松开鼠标时元素不再跟随移动,能够固定在指定位置.在mousedown事件中注册mousemove事件和mouseup事件,这样便可完成一次完整的拖拽. 重点:IE中setCapture()的应用.它的作用是捕捉所有的MouseEvent,设置完成后,即使鼠标移出窗口注册的鼠标事件仍然能够被触发.它在此处的作用是当鼠标移动过快越出元素的边界使得原本将要失效的mousemove事件依然能够发