JS、CSS --- 获取元素样式的方法,获取元素的坐标,windows坐标

获取元素样式

获取内联样式

该方法属于直接获取样式

语法: 元素.style.样式名

<div id="box1" style="width: 100px;" >
  </div>
  <script>
    let box1 = document.getElementById('box1')
    console.log(box1.style.width);  // 100px
  </script>

获取当前显示的样式

语法:元素.currentStyle.样式名

​ 它可以读取当前显示样式的值

currentStyle 只有IE支持

在其他浏览器用getComputedStyle( )方法获取元素样式

  • 该方法获取的样式都是只读的,要修改要用style

  • 需要两个参数;:

  • 第一个、获取样式的元素

  • 第二个、可以传递一个伪元素,一般都传null

var obj = getComputedStyle(box1,null);

该方法会返回一个对象对象里封装了对应的样式

输出获得的obj对象:

image-20220220212304677

如果样式没有设置,则会获取真实的值,而不是默认值

obj.width 就会显示对应宽度

<div id="box1" style="width: 100px;" >
  </div>
  <script>
    let box1 = document.getElementById('box1') // 获取box1 元素
    let obj = getComputedStyle(box1)// 获取box1对象
    console.log(obj.width); //  打印box1盒子的宽度  100px
  </script>

获取元素可见样式

clientWidth

clientHeight

  • 这两个属性都可以获取元素的可视宽度高度
  • (包括内容区和内边距)
  • 这些属性都是不带px的,返回一个数字,可以直接进行计算

offsetWidth

offsetHeight

  • 包括内容区,内边距,跟边框的元素的高度、宽度

offsetParent

  • 获取当前元素的定位父元素
  • 会获取当前最近的开启定位的祖先元素

offsetLeft

offsetTop

  • 获取相当于当前定位父元素的水平偏移量和垂直偏移量

scrollWidht

scrollHeight

  • 可以获取元素整个滚动区域的宽度和高度

scrollLeft

scrollTop

  • 可以获取水平滚动移动的距离
  • 可以获取垂直滚动条滚动的距离

pageY

— 元素在文档中的相对坐标保持不变,从文档顶部(现在已滚动出去)开始计算。

clientY

— 窗口相对坐标确实发生了变化(箭头变短了),因为同一个点越来越靠近窗口顶部。

当满足scrollHeight - scrollTop == clientHeight

  • 说明垂直滚动条拖到底了

当满足scrollWidht - scrollLeft == clientWidth

  • 说明水平滚动条托到底了

利用此可以实现一个用户条例案例

style>
        #inf{
            width: 400px;
            height: 1000px;
            overflow: auto;
        }
    </style>
    <script>
        window.onload = function(){
            // 获取inf的滚动长度
            var inf = document.getElementById("inf");
            var btn1 = document.getElementById("btn1");
            var btn2 = document.getElementById("btn2");
            // 绑定一个元素滚动事件  不能给window绑定
             inf.onscroll = function(){
                if(parseInt(inf.scrollHeight) - parseInt(inf.scrollTop) == parseInt(inf.clientHeight)){
                 alert("你已经阅读完");
                    //js中true  禁用按钮  false  开启按钮
                    btn1.disabled = false;
                    btn2.disabled = false;
            }
            }
    </script>
</head>
<body>
    <p>欢迎亲爱的用户注册</p>
    <div id="inf">
        XXX
    </div>
        //  设置禁用 disabled 内的值可以随便填
    <input id="btn1" type="checkbox" disabled="disabled">我已仔细阅读协议,一定遵守
    <input id="btn2" type="submit" value = "注册" disabled="disabled">
    <button id ="btn3"></button>
</body>

image-20220220212103933

当鼠标条到最底部时触发,然后将按钮的禁用取消,并且提示用户已经阅读完毕

坐标

要移动页面的元素,我们应该先熟悉坐标。

大多数 JavaScript 方法处理的是以下两种坐标系中的一个:

相对于窗口 — 类似于 position:fixed,从窗口的顶部/左侧边缘计算得出。

  • 我们将这些坐标表示为 clientX/clientY,当我们研究事件属性时,就会明白为什么使用这种名称来表示坐标。

相对于文档 — 与文档根(document root)中的 position:absolute 类似,从文档的顶部/左侧边缘计算得出。

  • 我们将它们表示为 pageX/pageY

当页面滚动到最开始时,此时窗口的左上角恰好是文档的左上角,它们的坐标彼此相等。但是,在文档移动之后,元素的窗口相对坐标会发生变化,因为元素在窗口中移动,而元素在文档中的相对坐标保持不变。

在下图中,我们在文档中取一点,并演示了它滚动之前(左)和之后(右)的坐标:

image-20220304215126065

当文档滚动了:

  • pageY — 元素在文档中的相对坐标保持不变,从文档顶部(现在已滚动出去)开始计算。
  • clientY — 窗口相对坐标确实发生了变化(箭头变短了),因为同一个点越来越靠近窗口顶部。

元素坐标:getBoundingClientRect

方法 elem.getBoundingClientRect() 返回最小矩形的窗口坐标,该矩形将 elem 作为内建 DOMRect 类的对象。

主要的 DOMRect 属性:

  • x/y — 矩形原点相对于窗口的 X/Y 坐标,
  • width/height — 矩形的 width/height(可以为负)。

此外,还有派生(derived)属性:

  • top/bottom — 顶部/底部矩形边缘的 Y 坐标,
  • left/right — 左/右矩形边缘的 X 坐标。

页面上的任何点都有坐标:

  1. 相对于窗口的坐标 — elem.getBoundingClientRect()
  2. 相对于文档的坐标 — elem.getBoundingClientRect() 加上当前页面滚动。

窗口坐标非常适合和 position:fixed 一起使用,文档坐标非常适合和 position:absolute 一起使用。

这两个坐标系统各有利弊。有时我们需要其中一个或另一个,就像 CSS positionabsolutefixed 一样。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用JavaScript来获取CSS中动画沿着贝塞尔曲线运动的轨迹。首先,你需要获取CSS中定义动画的贝塞尔曲线的值,然后使用JavaScript计算出沿着该曲线的轨迹。 以下是一个示例代码: ```javascript // 获取元素的动画样式 var element = document.getElementById('your-element'); // 替换为你要获取动画样式元素 var styles = window.getComputedStyle(element); var animationTimingFunction = styles.getPropertyValue('animation-timing-function'); // 提取贝塞尔曲线值 var bezierValue = animationTimingFunction.match(/cubic-bezier\(([^)]+)\)/)[1]; var bezierPoints = bezierValue.split(',').map(parseFloat); // 计算轨迹点坐标 var trajectoryPoints = []; for (var t = 0; t <= 1; t += 0.01) { var x = cubicBezier(t, 0, bezierPoints[0], bezierPoints[2], 1); var y = cubicBezier(t, 0, bezierPoints[1], bezierPoints[3], 1); trajectoryPoints.push({ x: x, y: y }); } // 输出轨迹点坐标 console.log(trajectoryPoints); // 贝塞尔曲线计算函数 function cubicBezier(t, p0, p1, p2, p3) { var mt = 1 - t; return mt * mt * mt * p0 + 3 * mt * mt * t * p1 + 3 * mt * t * t * p2 + t * t * t * p3; } ``` 这段代码首先获取了要应用动画的元素的动画样式,然后从样式中提取了贝塞尔曲线的值。接下来,使用贝塞尔曲线计算函数计算沿着曲线的轨迹,并将每个点的坐标存储在 `trajectoryPoints` 数组中。 你可以将上述代码中的 `your-element` 替换为你要获取动画轨迹的元素的ID。最终,`trajectoryPoints` 数组将包含沿着贝塞尔曲线的轨迹点坐标。你可以根据需要对这些坐标进行进一步处理或使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值