he-maoke

导航

day13事件下

事件冒泡:

从里到外冒泡,当外面有盒子添加点击,里面有按钮按下会自动调用外面盒子的点击

事件捕获:

直接进行捕获处理

阻止事件冒泡:

e.stoppropagation()*

e.cancelBubble=true(兼容ie的写法)

阻止默认行为

e.preventDefault()

e.returnValue=false (可能会被废弃)

return false

拖拽

思路:

1.给移动元素添加mousedown事件,并获取鼠标在元素内的坐标

2.在mousedown的事件添加mousemove事件(给父元素添加),并获取实时的鼠标在页面上的实时位置,在减去鼠标在元素的坐标,并赋值给元素的left和top

3.最后添加弹起事件,并取消mousemove事件

div.onmousedown=function(e){

  var x=e.pageX-div.offsetleft;

  var y=e.pageY-div.offsettop;

  document.onmousemove=function(e){

    var targetX=e.pageX-x;

    var targetY=e.pageY-y;

    div.style.left = targetX + "px";

    div.style.top = targetY + "px";

  }

  document.onmouseup=function(){

    document.onmousemove=false;

  }

}

 

区间拖拽

1.给元素添加按下事件 (获取元素的父盒子的位置 在网页上的位置 获取对应的鼠标在元素里面的位
置)
2.在按下事件里面添加移动事件(父元素添加) (获取当前鼠标在父盒子里面的位置 - 对应的鼠标在元
素的位置 设置对应的位置 )
3.在弹起事件里面取消对应的移动事件以及弹起事件

 

box.onmousemove = function(e){
e = e || window.event
// var targetX = e.offsetX - currentX
// var targetY = e.offsetY - currentY
var targetX = e.pageX - this.offsetLeft - currentX
var targetY = e.pageY - this.offsetTop - currentY
//最大的移动区间就是 父元素的宽度-子元素的宽度
var maxX = this.offsetWidth - moveBox.offsetWidth
var maxY = this.offsetHeight - moveBox.offsetHeight
//边界判断
// 如果当前定位的位置小于0就让他等于0
if(targetX<0){
targetX = 0
}
if(targetY<0){
targetY = 0
}
//如果当前移动的距离大于我们最大的距离就让他等于这个距离
if(targetX>maxX){
targetX = maxX
}
if(targetY>maxY){
targetY = maxY
}
//控制小盒子的位置
moveBox.style.left = targetX + "px"
moveBox.style.top = targetY + "px"
}
//4.取消对应的大盒子的移动事件 以及大盒子的弹起事件
box.onmouseup = function(){
box.onmouseup = box.onmousemove = false
}

公式

 1.鼠标在大盒子的位置就是=当前鼠标在页面上的位置-大盒子的offset值

 2.移动位置=得到鼠标在大盒子里面的位置-鼠标在小盒子里的位置

 3.最大移动区间=父元素的宽(高)度-子元素的宽(高)度

 
 
offset家族
offset家族是获取对应的偏移的位置 他有奶便是娘 (他的父元素谁加了定位他就基于谁 否则基于
body)
offsetParent 偏移的父元素(选择离他最近加了定位的父元素)
offsetLeft 左偏移
offsetTop 上偏移
offsetWidth 偏移元素的宽度
offsetHeight 偏移元素的高度
 
 
获取样式
window.getComputedStyle() *
element.currentStyle (兼容ie8以下的浏览器)
 
 
事件监听器
 
1.采用了观察者模式(observer)
2.同一个事件可以有多个处理函数
3.在添加事件的时候对应的处理函数不能是匿名函数(不然是不能被移除的)
添加事件监听 addEventListener
addEventListener(监听事件名,处理函数,冒泡false 还是捕获 true)
移除事件监听 removeEventListener
removeEventListener(事件名,处理函数)

posted on 2022-06-09 22:33  hmkyj  阅读(22)  评论(0编辑  收藏  举报