事件-拖动事件

本章节讲述的是拖动事件。具体看下面的代码

drag.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="drag.js" type="text/javascript"></script>
    <link href="drag.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<div id="div1" class="div1">
    <div id="div2" class="div2"></div>
    <div id="div3" class="div3"></div>
</div>
</body>
</html>

drag.css

.div1{
    width:500px;
    height:400px;
    border:1px solid  #eeddcc;
    margin:0 auto;
    background-color: antiquewhite;
    position:absolute;//我们是为了移动div1块,所以div1必须要设置成定位的,且这里一定要设置成绝对定位,如果设置成相对定位的话,会有效果差异。

}
.div2{
    width:300px;
    height:100px;
    margin:0 auto;
    background-color: red;
}
.div3{
    width:50px;
    height:50px;
    background-color: aqua;
    position:absolute;
    top:5px;
    right:5px;
}

drag.js

function getByCls(targetname,parentId){
    var Oprent=parentId? document.getElementById(parentId):document,
    els=[];
    var element=Oprent.getElementsByTagName("*");
    for(var i= 0,l=element.length;i<l;i++){
        if(element[i].className==targetname){
            els.push(element[i]);
        }
    }
    return els;

}//一般我们会设置元素的类选择器,所以我们这里自定义一个通过类选择器来获取元素的函数
window.onload=drag;
function drag(){
    var div1=getByCls("div2","div1")[0];//此处一定要注意,后面一定要加上[0],因为我们获取的是一个数组,我们必须获得其中的某一个来操作。
    div1.onmousedown=eventdown;
    div1.onmouseup=eventup;
}
function eventup(){
    document.onmousemove=null;
    div1.onmouseup=null;
}
function eventdown(event){
    var div1=document.getElementById("div1");
    var event=event||window.event;//这个方法是兼容event事件的
    var posX=event.clientX-div1.offsetLeft;
    var posY=event.clientY-div1.offsetTop;//我们可以通过event.clientX, event.clientY的方式获取鼠标的位置坐标。对于div块我们可以通过object.offsetLeft获得他的左上角的X坐标,object.offsetTop获取它的左上角的Y坐标。
    document.onmousemove=function(event){
        var event=event||window.event;
        moveEvent(event,posX,posY);
    }
}
function moveEvent(event,posX,posY){
    var event=event||window.event;
    var div1=document.getElementById("div1");
    var WinWidth=document.documentElement.clientWidth||document.body.clientWidth;
    var WinHeight=document.documentElement.clientHeight||document.body.clientHeight;//这个方法是获取屏幕大小的方法,这处考虑到了兼容问题
    var MaxW=WinWidth-div1.offsetWidth;
    var MaxH=WinHeight-div1.offsetHeight;
    var disX=event.clientX-posX;
    var disY=event.clientY-posY;
    if(disX<0){
        disX=0;
    }else if(disX>MaxW){
        disX=MaxW;
    }
    if(disY<0){
        disY=0;
    }else if(disY>MaxH){
        disY=MaxH;
    }
    div1.style.left=disX+"px";//注意此处后面一定要加"px";
    div1.style.top=disY+"px";
}

总结一下,首先我们可以自定义一个通过类选择器获得元素的方法,事实上已经有函数了Object.getElementByclassName(),但是兼容性不是很好。

其次我们上述通过自定义函数获取的是一个数组,所以我们在上面后面加上了[0],这个千万不要丢呀!!!

其次我们来总结一下几种获取位置坐标,宽度的方法

首先,获取鼠标的坐标的方法:event.clientX, event.clientY;

获取div块的左上角坐标的方法:object.offsetLeft,  object.offsetTop;获取div块宽,长度的方法:object.offsetWidth,object.offsetHeight;

获取屏幕大小的方法:document.documentElement.clientWidth||document.body.clientWidth,  document.documentElement.clientHeight||document.body.clientHeight;

最后,如果我们想移动某个元素的话,那么这个元素一定要设置成定位的,且最好是绝对定位的。然后我们在设置它的left,top值时千万不要丢了在后面加上"px".

//我们可以通过event.clientX, event.clientY的方式获取鼠标的位置坐标。对于div块我们可以通过object.offsetLeft获得他的左上角的X坐标,object.offsetTop获取它的左上角的Y坐标。
时间: 2024-12-17 16:55:22

事件-拖动事件的相关文章

运用HTML5原生拖动事件(drag)实现拖动效果

拖动效果相信很多朋友都自己写过,不管你用原生JS还是Jquery要实现起来也很简单,但是今天我想介绍的是运用HTML5标准中定义的原生拖动事件实现拖动效果. 一.背景: 其实说是HTML5标准定义,其实最早在IE4中就有拖放功能的API,只是在IE4中,网页中只有两种对象可以拖放:图像和某些文本.并且在IE4中唯一有效的放置目标是文本框.到了IE5.5,拖放功能得到了扩展,让网页中的任何元素都可以拖放.最终HTML5以IE的实力为基础制定了拖放规范.FF3.5+,Safari3+和Chrome根

触摸事件-拖动view

案例:通过触摸事件拖动imageView和view1和view2 注意:1.imgeview默认不能响应触摸事件,2.视图有三个子视图,如何区分多个视图 用storyBoard托人2个view和一个imageView,IBOutlet连线 案例图片:[一会上传] //让imageView接受用户触摸 1 [self.imageView setUserInteractionEnabled:YES]; 区分哪个视图 1 [touch view] == self.imageView 触摸事件代码 1

IIViewDeckController拖动事件与百度地图拖动事件冲突

在使用第三方(IIViewDeckController)的侧边栏和百度地图同时使用时.发现百度地图的拖动事件被侧边栏截取了,导致拖动地图时地图移动缓慢,几乎无法滑动.在网上苦苦搜寻了解决方案,最终搜索到比较靠谱的http://www.cocoachina.com/bbs/read.php?tid-252890-page-2.html链接里面11楼的评论.但是我按照他的办法添加代码,在我这边还是没有效果.于是我就在IIViewDeckController第三类里面去找- (BOOL)gesture

JS =&gt;处理单击事件与拖动事件并存

使用click事件,很难确定在拖动开始和结束的时候触发,所以使用了onmouseup(释放鼠标的时候),释放鼠标的时候,即在拖动还未结束,但是准备处理的阶段,此时mouseButtonFlag按照逻辑来说应该是true,即不会触发绑定的事件. 1.将click转为使用onmouseup事件 2.添加mouseButtonFlag对象,判断是否拖拽情况,用以处理是否触发鼠标释放(点击)事件 (这个是篇sortable的参数说明的文章,作者xpsharp,http://blog.csdn.net/x

H5拖动事件复习

定义和用法 ondrag 事件在元素或者选取的文本被拖动时触发. 拖放是 HTML5 中非常常见的功能. 更多信息可以查看我们 HTML 教程中的 HTML5 拖放. 注意: 为了让元素可拖动,需要使用 HTML5 draggable 属性. 提示: 链接和图片默认是可拖动的,不需要 draggable 属性. 在拖放的过程中会触发以下事件: 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ondrag - 元素正在拖动时触发 ondragend - 用户

Android长按及拖动事件探究

Android中长按拖动还是比较常见的.比如Launcher中的图标拖动及屏幕切换,ListView中item顺序的改变,新闻类App中新闻类别的顺序改变等.下面就这个事件做一下分析. 就目前而言,Android中实现长按事件响应有几种方式,包括: 设置View.OnLongClickListener监听器 通过GestureDetector.OnGestureListener间接获取长按事件 实现View.OnTouchListener,然后在回调中通过MotionEvent判断是否触发了长按

JavaScript-4.5 事件大全,事件监听---ShinePans

绑定事件 <input type="bubtton" onclick="javascript:alert('I am clicked');"> 处理事件 <script language="JavaScript" for="对象" event="事件"> ... (事件处理代码) ... </script> 鼠标事件举例 <script language="

《学习笔记》JS事件和事件冒泡

js事件详解 ●一般事件 onclick 鼠标点击时触发此事件 ondblclick 鼠标双击时触发此事件 onmousedown 按下鼠标时触发此事件 onmouseup 鼠标按下后松开鼠标时触发此事件 onmouseover 当鼠标移动到某对象范围的上方时触发此事件 onmousemove 鼠标移动时触发此事件 onmouseout 当鼠标离开某对象范围时触发此事件 onkeypress 当键盘上的某个键被按下并且释放时触发此事件. onkeydown 当键盘上某个按键被按下时触发此事件 o

DDD领域事件与事件总线源码下载

最近在看领域事件的文章.看到了“张占岭”的<DDD~领域事件与事件总线> 原文地址:http://www.cnblogs.com/lori/p/3476703.html 遗憾的是没有提供下载,把文中的代码复制下来但发现不完整.于是决定自己补全代码. 说明:本来只是打算做一次性的测试项目所以没有命名的.其中用XML初始化的代码也被注释了. 下载地址: http://pan.baidu.com/s/1c0DD5eS 梦回周公