美文网首页
html中的id与onmouse系列事件知识点

html中的id与onmouse系列事件知识点

作者: lambdang | 来源:发表于2017-05-06 22:09 被阅读50次

简介:最近做项目一直用vue框架,碰上了一些需要直接操作dom的情况,但是vue是数据驱动的框架,对于dom操作很弱,一个ref还不能操作组件中的dom,最后研究了一番发现dom可以直接操作,而且更简单。真是用多了框架把最原始最强大的方法都丢了。先来几个知识点铺垫然后做两个关于鼠标拖动的例子。

一:重视起来id

以前总是用jq,id都是用来定位元素的,但仅仅这么用就让费id的本质了,id是dom对象的入口,所有写在dom元素中的属性都可以用id来获取;
比如dom中的style属性用

<div id="box" style="height:100px;width:100px"></div>
```
```
id.style.width 就能获取到相应的值
```
除了这些添加上去的属性 还有很多方法(回调函数)也可以通过id进行绑定
```
<div id="box" onclick="myonclick()"></div> 
#给div绑定了一个点击事件
#也可以在js中这么写
id.onclick = function(){}
```
总结:id是dom元素对象,可获取或者定义dom元素的属性或者方法
#####二:各种位置
在‘id’的回调事件函数中总有个event对象参数,这个对象玄机很深,只说关于位置的两个属性
1.  **event.clientX、event.clientY**
    鼠标相对于[浏览器](http://www.2cto.com/os/liulanqi/)窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性

2. **event.offsetX、event.offsetY**
鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。

3. **id对象的位置参数**
    id.offsetTop对于父元素(position:absolute或relative)上边缘的像素位置
    id.offsetLeft对于父元素(position:absolute或relative)左边缘的像素位置

都是像素为单位的整形数
列:计算div坐标点
```
var baseY = ev.clientY-ev.offsetY;
var baseX = ev.clientX-ev.offsetX;
//或者
var baseY = ev.clientY-id.offsetTop;
var baseX = ev.clientX-id.offsetLeft;
//注 id指的是id那个名字
```
######三:各种id回调事件
1. onmousedown 
    按下鼠标时候会调用该回调函数
2. onmouseup
    松开鼠标时候
3. onmousemove
    鼠标滑动的时候
    该回调函数是个关于过程的函数,在整个鼠标移动的时候该函数一直有效,所以这个函数中的参数event的clientX,clientY会根据实际位置实时改变
4. onmouseout
    鼠标超出元素的时候

######四:实例1 点击拖动实例
```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点击拖动</title>
</head>
<body>
    
    <div id="box" style="position:absolute;background: #888;width: 500px;height:300px;top:100px;left:100px">
        <div id="inbox" style="position:absolute;background: orange;width: 50px;height: 50px;top:10px">
            拖动我
        </div>
    </div>


<script>

    // box.onclick = function(){
    //     console.log(box.offsetWidth)
    // }
    inbox.onmousedown = function(event){
            var basex = event.clientX-inbox.offsetLeft; //计算client初始位置x
            var basey = event.clientY-inbox.offsetTop;  //计算client初始位置y

            var maxpointx = basex+(box.offsetWidth-inbox.offsetWidth) //最大值坐标 id.offsetWidth 获取宽度值 可以直接计算
            var maxpointy = basey+(box.offsetHeight-inbox.offsetHeight)
            // console.log(basex,basey);
        // 移动事件
        box.onmousemove = function(event){
            // 计算边界 防止超出边界
            if(event.clientX<basex){
                posx = basex
            }else if(event.clientX>maxpointx){
                posx = maxpointx
            }else{
                posx = event.clientX
            }

            if(event.clientY<basey){
                posy = basey
            }else if(event.clientY>maxpointy){
                posy = maxpointy
            }else{
                posy = event.clientY
            }
            var l = posx-basex; //计算clientx 差值
            var t = posy-basey; //计算clienty 差值 差值即

            inbox.style.left = l+"px";
            inbox.style.top = t+"px";
        }
    }
 // 鼠标弹起事件
    inbox.onmouseup = function(ev){
        box.onmousemove = null;
        box.onmouseup=null;
    }
        // 超出事件

    box.onmouseout = function(){
        box.onmousemove = null;
        box.onmouseup=null;
    }
</script>
</body>
</html>
```
#####五:实例2 点击拖动滚动实例
图片在含有滚动条的div里 点击拖动 实现拖动浏览
```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点击拖动滚动</title>
</head>
<body>
    <div id="box" style="height:300px;width: 400px;border: 1px solid red;position: absolute;top:20px;left:20px;overflow: scroll;">
        <div style="width: 800px;height: 600px">
            ![](xxxxxx)
        </div>
        
    </div>
<script>
    box.onmousedown=function(event){
        var basex = event.clientX;
        var basey = event.clientY;

        var scrollLeft = box.scrollLeft;
        var scrollTop = box.scrollTop;
        box.onmousemove = function(event){
            var movex = basex - event.clientX;
            var movey = basey - event.clientY ;

            box.scrollLeft = scrollLeft+movex;
            box.scrollTop = scrollTop+movey;
        }
    }

    box.onmouseup = function(){
        box.onmousemove=null;
    }
    box.onmouseout = function(){
        box.onmousemove=null;
    }
</script>
</body>
</html>
```
总结:例1是根据原始坐标计算left和top值 而例2是根据相对坐标计算scrollLeft和scrollTop应该滚动多少 个原理不同但所用知识点完全相同

相关文章

网友评论

      本文标题:html中的id与onmouse系列事件知识点

      本文链接:https://www.haomeiwen.com/subject/xbzetxtx.html