offset、client 、scroll

本文深入解析了DOM操作中的offset、client、scroll三大系列属性,包括它们的功能区别及应用场景,如获取元素位置、大小和处理滚动条等,并通过实际案例展示了如何利用这些属性实现元素的拖拽和对话框的突出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三组和大小、位置相关的属性

offset、client、scroll

  • offset系列属性:offset为偏移量。用于获取如div的坐标(box.offsetLeft; box.offsetTop;),而获取div的大小用(box.offsetWidth;  box.offsetHeight这两属性包括盒子的边框和内边距padding)。还存在offsetParent属性:指获取距离当前元素最近的定位父元素,如果没有定位父元素则默认为body。如若存在三个盒子相互依次叠加,则box.offsetParent/Left/Top等的获取数值都是相对相邻最近的父盒子而言。
  • client 系列属性: 与offset一样有四个属性,但是在获取div盒子的大小上,clientLeft获取的是border-left的宽度;clentTop获取的是border-top的宽度;而clientWidth获取的大小包括padding但不包括边框的宽度;clientHeight获取的也同样包括padding不不包括边框的高度(有滚动条的话,也包括滚动条)   
  • scroll系列的属性: scrollLeft和scrollTop指内容中滚动出去的距离      scrollWidth和scrollHeight获取的大小包括padding,但是不包括滚动条

案例之按下鼠标拖拽盒子

var box = document.getElementById('box');
var drop = document.getElementById('drop');    //鼠标点击盒子可实现拖拽的区域

drop.onmousedown = function (e) {    //鼠标按下的事件
    //鼠标按下的时候,鼠标在盒子中的位置:鼠标在页面上的位置-盒子的位置
    var x = e.pageX - box.offsetLeft;
    var y = e.pageY - box.offsetTop;

    //鼠标在文档中移动的事件
    document.onmousemove = function (e) {    //别忘了该对象e有兼容性问题
        //当鼠标在页面上移动时,盒子的坐标 = 鼠标当前在页面中的位置 - 鼠标在盒子上的位置
        var boxX = e.pageX - x;
        var boxY = e.pageX - y;

        box.style.left = boxX + 'px';    //盒子移动的距离等于盒子的坐标,即跟着鼠标走
        box.style.top = boxY + 'px';    
    }
    
}
//当鼠标弹起的时候,移除鼠标移动事件
document.onmouseup = function () {
    document.onmousemove = null;
}
//点击关闭按钮,隐藏盒子
var box_close = document.getElementById('box_close');    //获取该关闭按钮的id
box_close.onclick = function () {
    box.style.display = 'none';    //点击按钮时,隐藏盒子
}

案例之弹出对话框可拖拽且有突出功能

该案例类似百度首页的点击按钮有会员登陆的弹出对话框,且弹出后背景为灰色并且不可操作,该对话框还可随鼠标拖拽移动

//显示登陆框和遮盖层
var login = document.getElementById('login');
var bg = document.getElementById('bg');    //遮盖层div的id,用于弹出对话框后背景不可操作
//1.点击按钮,弹出对话框和遮盖层
var link = document.getElementById('link');    //link为点击按钮弹出对话框的id
link.onclick = function () {
    login.style.display = 'block';    //弹出login
    bg.style.display = 'block';    //点击后弹出遮盖层
    return false;    //取消默认行为之跳转到href
}

//2.点击关闭按钮,隐藏登陆框和遮盖层
var closeBtn = document.getElementById('closeBtn');
close.onclick = function () {
    //隐藏登录框和遮盖层
    login.style.display = 'none';
    bg.style.display = 'none';
}

后面代码的鼠标拖拽盒子移动如上案例,此处不再复述

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值