DOM宽高位置和滚动条案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
div{
border: 10px solid black;
width: 100px;
height: 100px;
padding: 5px;
margin: 10px;
overflow: scroll;
}
#aa{
height: 300px;
width: 300px;
}
</style>
</head>
<body>
<div>
<p id="aa"></p>
</div>
<script>
var div=document.querySelector("div");
//如果使用了overflow:scroll,则要减去滚动条的宽度或高度
console.log(div.clientHeight,div.clientWidth); //获取width+padding
console.log(div.offsetWidth,div.offsetHeight); //获取width+padding+border
//如果使用overflow:hidden div 左padding+里面最大的宽度
//而高度内外的padding都会添加进去
console.log(div.scrollWidth,div.scrollHeight); //获取width+padding
//当前文档的宽高(html)
console.log(document.documentElement.clientWidth,document.documentElement.clientHeight);
</script>
</body>
</html>
//案例1 随机生成div的位置但是不能超出文档实际的宽和高
document 是文档 一切的根源
document.documentElement 是html元素
document.body 是body元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 100px;
height: 100px;
position: relative;
background-color:orange;
}
</style>
</head>
<body>
<div></div>
<script>
var div=document.querySelector("div");
document.addEventListener("click",clickHandler);
function clickHandler(e){
//千万别忘记写px,没有任何像素 div不动还不报错
div.style.left=Math.random()*(document.documentElement.clientWidth-div.offsetWidth)+"px";
div.style.top=Math.random()*(document.documentElement.clientHeight-div.offsetHeight)+"px";
//去除body的滚动条
// document.body.style.overflow="hidden";
}
</script>
</body>
</html>
案例二
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- <style>
*{
margin: 0;padding: 0;
}
div{
width: 100px;
height:100px;
margin-left: 50px;
margin-top:50px;
background-color: black;
position: absolute;
left:50px;
top: 50px;
border: 2px solid green;
}
</style> -->
<style>
#div1{
width: 200px;
height:200px;
background-color: greenyellow;
position: absolute;
left: 100px;
top:100px;
}
#div0{
width: 100px;
height:100px;
background-color: indianred;
position: relative;
left: 50px;
top:50px
}
</style>
</head>
<body>
<!-- <div id="div0">
</div>
<script>
var div=document.querySelector("div");
//这里的clinetLeft 和clinetTop为div的边框大小
console.log(div.clientLeft,div.clientTop);
//这里的offsetLeft和offsetTop为div盒子到页面左面和顶部的距离
//如果div父元素并且使用了定位属性,那么div的offsetLeft和offsetTop就是到父元素左上角的距离
console.log(div.offsetLeft,div.offsetTop);
</script> -->
<div id="div1">
<div id="div0"></div>
</div>
<script>
//新知识 如果div1的子元素有div0 并且都使用了定位属性,那么怎么计算出div0 到页面的距离呢
//getBoundingRect() 函数就是获取矩形的范围
// x:元素到页面左边的距离
// y:元素到页面顶端的距离
// left=x;
// top:y;
// right:元素最右边边线到页面左边的距离
// bottom:元素最下边的边线到页面顶部的距离
var div0=document.getElementById("div0");
console.log(div0.getBoundingClientRect());
</script>
</body>
</html>
滚动条案例2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
p{
height: 4000px;
}
div{
width: 50px;
height: 50px;
background-color: cadetblue;
font-size: 40px;
line-height: 50px;
text-align: center;
position: fixed;
right: 100px;
bottom: 100px;
cursor: pointer;
}
</style>
</head>
<body>
<p></p>
<div>^</div>
<script>
var div;
var bool;
init();
function init(){
//获取div 元素dom
div=document.querySelector("div");
//div透明100%
div.style.opacity="0";
//给文档添加滚动事件监听
document.addEventListener("scroll",scrollHandler);
//给div添加点击事件
div.addEventListener("click",clickHandler);
//执行setinterval 函数
setInterval(animation,16);
}
//滚动事件
function scrollHandler(e){
//如果滚动顶端超过100,div就显示 否则就隐藏
if(document.documentElement.scrollTop >100){
div.style.opacity="1";
}else{
div.style.opacity="0";
}
}
//点击事件
function clickHandler(e){
//设置bool为真
bool=true;
}
//持续执行
function animation(){
//如果bool值为假 跳出 不执行
if(!bool)return;
//如果滚动的top小于等于0的时候,bool值设为false 并且跳出当前函数 不在重复执行
if(document.documentElement.scrollTop<=0){
bool=false;
return;
}
//如果bool为真,那么滚动的top 每次减去300
document.documentElement.scrollTop-=300;
}
</script>
</body>
</html>

浙公网安备 33010602011771号