JavaScript-实现简单的拖拽动态框效果

志犹学海,业比登山。——王通

目录

一,css样式部分

二,HTML-body部分

三,JS部分

四,完整代码

五,效果图

一,css样式部分

取消了浏览器默认的内边距和外边距

设置了一些部分样式

  <style>
        * {
            padding: 0px;
            margin: 0px;
        }

        li {
            list-style: none;
        }

        a {
            text-decoration: none;
        }

        .bg {
            width: 100%;
            height: 100%;
            position: fixed;
            top: 0px;
            left: 0px;
            background: rgb(0, 0, 0, .4);
            z-index: 9998;
            display: none;
        }

        .login {
            width: 600px;
            height: 300px;
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            z-index: 9999;
            background: #fff;
            display: none;

        }

        .title {
            height: 45px;
            line-height: 45px;
            text-align: center;
            border-bottom: 1px solid #DCDCDC;
            position: relative;
            cursor: move;
        }

        .content p {
            text-align: center;
            line-height: 45px;
        }

        .title a {
            display: block;
            position: fixed;
            top: 2px;
            right: 5px;
            z-index: 9999;
        }
    </style>

二,HTML-body部分

 <!-- 制作登录框 -->
    <a href="javascript:;" id="loginA">注册/登录</a>
    <!-- 登录弹框 -->
    <div class="login">
        <div class="title">
            用户登录 <a href="javascript:;" id="close">关闭</a>
        </div>
        <div class="content">
            <p> 用户名:<input type="text" value="" /></p>
            <p> 密码:<input type="password" value="" /></p>
            <p> <input type="button" value="提交" /></p>
        </div>
    </div>
    <div class="bg"></div>

三,JS部分

     注意 :

        offset获得的距离 不计算 translate偏移的距离 所以这里我们自己减去偏移的一半距离

		<script type="text/javascript">
			var loginA = document.querySelector('#loginA');
			var loginDiv = document.querySelector('.login');
			var close = document.querySelector('#close');
			var title = document.querySelector('.title');
			var bgDiv = document.querySelector('.bg');
			
			//显示登录框
			loginA.addEventListener('click',function(){
				loginDiv.style.display = 'block';
				bgDiv.style.display = 'block';
			})
			
			//隐藏登陆框
			close.addEventListener('click',function(){
				loginDiv.style.display = 'none';
				bgDiv.style.display = 'none';
			})
			
			//移动登录框
			//添加鼠标按下时事件 发生
			title.addEventListener('mousedown',function(e){
				//获得鼠标在登陆框上的位置
				//注意 offset获得的距离 不计算 translate偏移的距离 所以这里我们自己减去偏移的一半距离
				// var x =e.pageX - (loginDiv.offsetLeft-300);
				// var y = e.pageY - (loginDiv.offsetTop-150);
				// console.log(e.pageX,loginDiv.offsetLeft);
				// console.log(x,y);
				var x =e.pageX - (loginDiv.offsetLeft);
				var y = e.pageY - (loginDiv.offsetTop);
				
				//计算鼠标移动时 登陆框需要移动的距离
				document.addEventListener('mousemove',move);
				function move(e){
					var newX = e.pageX - x;
					var newY = e.pageY - y;
					// loginDiv.style.left = newX +300+'px';
					// loginDiv.style.top = newY +150+'px';
					loginDiv.style.left = newX+'px';
					loginDiv.style.top = newY+'px';
				}
				
				//清除 mousemove移动事件
				document.addEventListener('mouseup',function(){
					document.removeEventListener('mousemove',move);
				})
				
			})
		</script>

四,完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0px;
				margin: 0px;
			}
			li{
				list-style: none;
			}
			a{
				text-decoration: none;
			}

			.bg{
				width: 100%;
				height: 100%;
			   position: fixed;
				top: 0px;
				left:0px;
				 background: rgb(0,0,0,.4);
				 z-index: 9998;
				 display: none;
			}
			.login{
				 width: 600px;
				 height: 300px;
				 position: fixed;
				 top:50%;
				left:50%;
				transform: translate(-50%,-50%);
				z-index: 9999;
				background: #fff;
				display: none;
							
			}
			.title{
			height: 45px;
			 line-height: 45px;
			text-align: center;
			border-bottom: 1px solid #DCDCDC;
			position: relative;
			cursor: move; 
			}
			.content p{
				 text-align: center;
				 line-height: 45px;
			}
			.title a{
				 display: block;
				 position: fixed;
				top:2px;
				 right: 5px;
				 z-index: 9999;
			}
		</style>
	</head>
	<body>
		<!-- 制作登录框 -->
		
		 <a href="javascript:;" id="loginA">注册/登录</a>
		<!-- 登录弹框 -->
		<div class="login">
		      <div class="title">
				  用户登录 <a href="javascript:;" id="close">关闭</a>
			  </div>
			  <div class="content">
				 <p> 用户名:<input type="text" value="" /></p>
				 <p>  密码:<input type="password" value="" /></p>
				  <p> <input type="button" value="提交" /></p>
			  </div>
		</div>
		<div class="bg"></div>
		<script type="text/javascript">
			var loginA = document.querySelector('#loginA');
			var loginDiv = document.querySelector('.login');
			var close = document.querySelector('#close');
			var title = document.querySelector('.title');
			var bgDiv = document.querySelector('.bg');
			
			//显示登录框
			loginA.addEventListener('click',function(){
				loginDiv.style.display = 'block';
				bgDiv.style.display = 'block';
			})
			
			//隐藏登陆框
			close.addEventListener('click',function(){
				loginDiv.style.display = 'none';
				bgDiv.style.display = 'none';
			})
			
			//移动登录框
			//添加鼠标按下时事件 发生
			title.addEventListener('mousedown',function(e){
				//获得鼠标在登陆框上的位置
				//注意 offset获得的距离 不计算 translate偏移的距离 所以这里我们自己减去偏移的一半距离
				// var x =e.pageX - (loginDiv.offsetLeft-300);
				// var y = e.pageY - (loginDiv.offsetTop-150);
				// console.log(e.pageX,loginDiv.offsetLeft);
				// console.log(x,y);
				var x =e.pageX - (loginDiv.offsetLeft);
				var y = e.pageY - (loginDiv.offsetTop);
				
				//计算鼠标移动时 登陆框需要移动的距离
				document.addEventListener('mousemove',move);
				function move(e){
					var newX = e.pageX - x;
					var newY = e.pageY - y;
					// loginDiv.style.left = newX +300+'px';
					// loginDiv.style.top = newY +150+'px';
					loginDiv.style.left = newX+'px';
					loginDiv.style.top = newY+'px';
				}
				
				//清除 mousemove移动事件
				document.addEventListener('mouseup',function(){
					document.removeEventListener('mousemove',move);
				})
				
			})
		</script>
		
	</body>
</html>

五,效果图

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
实现el-dialog可拖动,可以按照以下步骤进行操作: 1. 首先,确保你已经引入了element-ui库,并正确注册了el-dialog组件。 2. 在el-dialog组件中添加一个自定义的类名,例如"draggable-dialog",用于选择该对话并添加拖动功能。 3. 在页面的JavaScript代码中,使用原生JavaScript或其他库(如jQuery UI)来实现拖动功能。这里以原生JavaScript为例: ```javascript // 获取所有拥有"draggable-dialog"类名的对话元素 var dialogElements = document.getElementsByClassName('draggable-dialog'); // 遍历每个对话元素 Array.prototype.forEach.call(dialogElements, function(dialogElement) { // 在对话标题栏上添加mousedown事件监听器 var header = dialogElement.getElementsByClassName('el-dialog__header')[0]; header.style.cursor = 'move'; header.addEventListener('mousedown', function(e) { // 记录鼠标按下时的初始偏移量 var startX = e.clientX - dialogElement.offsetLeft; var startY = e.clientY - dialogElement.offsetTop; // 添加mousemove事件监听器,实现拖动效果 document.addEventListener('mousemove', moveDialog); // 添加mouseup事件监听器,停止拖动 document.addEventListener('mouseup', stopDialog); // 阻止事件冒泡和默认行为 e.stopPropagation(); e.preventDefault(); // 移动对话的回调函数 function moveDialog(e) { // 计算鼠标当前位置相对于初始偏移量的偏移量 var offsetX = e.clientX - startX; var offsetY = e.clientY - startY; // 设置对话的新位置 dialogElement.style.left = offsetX + 'px'; dialogElement.style.top = offsetY + 'px'; // 阻止事件冒泡和默认行为 e.stopPropagation(); e.preventDefault(); } // 停止拖动的回调函数 function stopDialog(e) { // 移除mousemove和mouseup事件监听器 document.removeEventListener('mousemove', moveDialog); document.removeEventListener('mouseup', stopDialog); // 阻止事件冒泡和默认行为 e.stopPropagation(); e.preventDefault(); } }); }); ``` 通过以上步骤,你可以实现el-dialog可拖动的效果。请注意,这个实现只是一个简单的示例,你可以根据实际需求进行适当的修改和优化。另外,如果你使用的是其他库或架,可能会有相应的拖动插件可用,可以参考相关文档进行集成和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值