鼠标拖拽效果

这次要做的是鼠标拖动效果,说白了就是鼠标可以拖动网页上的一些组件(div),最普遍的就是在网页进行登录验证的时候,当点击登陆的时候会弹出一个登陆框,这个登陆框是出于屏幕中间的,浮于网页所有元素之上,可以进行随意拖动。


具体实现也是非常简单的,下面就简单记录一下吧

需要用到的知识有:position属性 ,offsetWidth,offsetHeighrt ,z-index,PageX,PageY,

原生js 注册鼠标监听事件,鼠标按下 拖动 放松事件,Math.Max(),Math.Min()等。。。

好伐,开始吧,上图所实现的原理其实很简单,点击右上角的登陆按钮,首先要有一个遮罩层,宽高为100%;然后写一个居中显示的登陆框,为登陆框添加BLABLABLA事件 ,完成。。。O(∩_∩)O~。

登陆框内部:

Css部分:

<span style="font-family:Microsoft YaHei;font-size:14px;">/*输入框公用的样式*/
    .ui-dialog-input{
        width: 100%;height: 40px;
        margin: 0px;padding:0px;
        border: 1px solid #d5d5d5;
        font-size: 16px;color: #c1c1c1;
        text-indent: 25px;
        outline: none;
    }

    /*两个输入框的icon设置*/
    .ui-dialog-input-username{
        background: url(images/input_username.png) no-repeat 2px ;
    }
    .ui-dialog-input-password{
        background: url(images/input_password.png) no-repeat 2px ;
    }</span>

HTML:

<span style="font-family:Microsoft YaHei;font-size:14px;"><div class="ui-dialog" id="dialog">
	<!-- 标题栏区域 -->
	<div class="ui-dialog-title" id="dialog-title"> 登录通行证 <a class="ui-dialog-closebutton" href="javascript:hidedialog();"></a> </div>
	<!-- 主要内容区域 -->
	<div class="ui-dialog-content">
		<!-- 两个输入框 -->
		<div class="ui-dialog-l40 ui-dialog-pt15">
			<input class="ui-dialog-input ui-dialog-input-username" type="input" placeholder="手机/邮箱/用户名" />
		</div>
		<div class="ui-dialog-l40 ui-dialog-pt15">
			<input class="ui-dialog-input ui-dialog-input-password" type="input" placeholder="密码" />
		</div>
		<div class="ui-dialog-l40"> <a href="#">忘记密码</a> </div>
		<!-- 登录按钮 -->
		<div> <a class="ui-dialog-submit" href="#">登录</a> </div>
		<div class="ui-dialog-l40"> <a href="#">立即注册</a> </div>
	</div>
</div></span>

②遮罩层的实现:

所谓遮罩层,其实就是一个覆盖范围为100%的一个大的灰色div,平时都是display:none的,如何让他在其他元素的上层呢?这里要用到z-index属性,网页在z轴上就像封面朝桌子的一本书一样,数值越大,就相当于页码越大,自然就越靠上方。值得注意的是:设置z-index属性一定要设置position属性,不然会导致失效或者层级错误

具体课程参考这个http://www.neoease.com/tutorials/z-index/。再设置透明度,

用到opacity属性,范围0-1,值越大透明度越低,这个属性在ie下用的是滤镜:filter:Alpha(opacity=40) ie为0-100;

还要图片选中状态给取消了,如果不取消,当你拖动时会出现图片选中(变蓝),只需要在div中写onselectstart='return false'就可以了。

代码:css:

<span style="font-family:Microsoft YaHei;font-size:14px;">.ul-mask{
width:100%;
height:100%;
background:#000;
opacity:0.4;
filter:Alpha(opacity=40);
position:absolute;
top:0;
left:0;
z-index:8000;
display:none;}</span>

HTML:
<span style="font-family:Microsoft YaHei;font-size:14px;"><div class="ul-mask" id='mask' onselectstart='return false'></div></span>

鼠标按下事件处理:e是鼠标拖动对象,他提供了我们需要的属性,e.pageX是鼠标对于屏幕左上角的x距离,pagtY为Y轴,offset是该对象对于父级元素的距离。具体可参照:

http://blog.csdn.net/u014209090/article/details/44015591

<span style="font-family:Microsoft YaHei;font-size:14px;">g('dialog').addEventListener('mousedown',function(e){
	var e=e||window.event;
	mouseOffsetX=e.pageX-g('dialog').offsetLeft;
	mouseOffsetY=e.pageY-g('dialog').offsetTop;
	isdragging=true;

});</span>

④鼠标拖动事件:这里我们要对登陆框的位置进行限制,不能让他的位置在屏幕之外。

具体看代码吧。

<span style="font-family:Microsoft YaHei;font-size:14px;">document.οnmοusemοve=function(e){
			var e=e||window.event;
			var mouseX=e.pageX;
			var mouseY=e.pageY;
			var moveX=0;
			var moveY=0;
			
			if(isdragging===true){
			moveX=mouseX-mouseOffsetX;
			moveY=mouseY-mouseOffsetY;
			//设置范围
			var pageWidth=document.documentElement.clientWidth;
			var pageHeight=document.documentElement.clientHeight;
			
			var dialogWidth=g('dialog').offsetWidth;
			var dialogHeight=g('dialog').offsetHeight;
			var maxX=pageWidth-dialogWidth;
			var maxY=pageHeight-dialogHeight;
			moveX=Math.min(maxX,Math.max(0,moveX));
			moveY=Math.min(maxY,Math.max(0,moveY));
			
			g('dialog').style.left=moveX+'px';
			g('dialog').style.top=moveY+'px';
			
			
			
	}
}</span>

放松鼠标的代码就只是设置isdraging=false;

<span style="font-family:Microsoft YaHei;font-size:14px;">document.οnmοuseup=function(){
isdragging=false;

}</span>

⑤这里我还想当屏幕变化大小的时候,仍然是居中的,那么就要用到onresize了;

<span style="font-family:Microsoft YaHei;font-size:14px;">//窗口改变
window.οnresize=function(){
		autoCenter(g('dialog'));
		FillToBody(g('dialog'));
		}
//自动居中
function autoCenter(el){
var bodyW=document.documentElement.clientWidth;
var bodyH=document.documentElement.clientHeight;
var elW=el.offsetWidth;
var elH=el.offsetHeight;
 el.style.left=(bodyW-elW)/2+"px";
 el.style.top=(bodyH-elH)/2+"px";
}
//自动全屏
function FillToBody(el){
el.style.width=document.documentElement.clientWidth;
el.style.height=document.documentElement.clientHeight;


}
</span>



 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值