zoukankan      html  css  js  c++  java
  • 滚动条详解及制作(三)

    查看元素的几何尺寸

    domEle.getBoundingClientRect()

    在获取的dom元素上,有一个getBoundingClientRect方法,这个方法可以获取到元素的宽高和左上点的位置以及有下点的位置(width、height、top、left、right、bottom),注意这里的宽高是指除去了margin的盒子模型的宽高。

    但是老版本的IE浏览器没有实现width和height,那么我们在老版本的IE计算宽高的时候就需要用bottom-top和right-left来计算宽高值了。

    还有一点需要注意的是,这里的宽高也不是实时更新的,数据只是一个副本。

    我们依然可以封装一个函数,可以返回元素的宽高。


     
     1 Element.getElementOffset() {
     2         var objData = this.getBoundingClientRect();
     3         if(objData.width) {
     4               return {
     5                     w: objData.width,
     6                     h: objData.height
     7               }
     8         }else {
     9               return {
    10                     w: objData.right - objData.left,
    11                     h: objData.bottom - objData.top
    12               }
    13         }
    14   }
    15    
    JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

    滚动条滚动

    让滚动条滚动的方法有三个:scroll、scrollTo、scrollBy

    这三个方法都有两个参数,分别是x值和y值。前两个方法的作用一模一样,都是让滚动条滚动到(x,y)的位置,但是最后一个scrollBy有一些区别,它是让滚动条相对于上一个位置滚动多少距离。

    我们可以简单的用这个方法来实现一个自动阅读的功能:

    setInterval(function () {

          scrollBy(0, 10);

    },50);

    另一个查看元素尺寸的方法

    dom.offsetWidth/dom.offsetHeight

    虽然前面有一个ele.getBoundingClientRect()方法,但是由于这个方法名字是在太长了,因此用的并不是非常多,相比较而言,这两个dom元素的属性用的更多一些。

    这里获取的宽高值和上面的一样,都是除去margin后的盒子模型的宽高。

    查看元素的位置

    dom.offsetLeft/dom.offsetTop

    这两个值分别是元素距离左侧和上侧的距离,这里的值是相对于有定位的父级而言的,如果没有有定位的父级的话,才是相对于文档的坐标。

    那么现在就来了一个问题:如何找到有定位的父级呢?

    domEle上面还有一个属性是offsetParent,这个属性可以查看到元素的有定位的父级,如果没有的话就会返回body,而body的offsetParent则是null。

    我们利用上面的信息,可以来封装一个函数,求元素的相对于文档的坐标。


     
     1  Element.prototype.getPosition = function (){
     2         if (!this.offsetParent){
     3               return {
     4                     “w”: this.offsetLeft,
     5                     “h”: this.offsetTop
     6               }
     7         }
     8         var width = this.offsetLeft,
     9               height = this.offsetTop,
    10               ele = this.offsetParent;
    11         while (ele.offsetParent){
    12               width += this.offsetParent.offsetLeft;
    13               height += this.offsetParent.offsetTop;
    14               ele = ele.offsetParent;
    15         }
    16         return {
    17               “w”: width,
    18               “h”: height
    19         }
    20   }
    JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)

    那么今天要介绍的关于获取dom元素的尺寸以及滚动条相关的知识就这些哟~

  • 相关阅读:
    【BZOJ 3282】Tree Link Cut Tree模板题
    【BZOJ 2002】【Hnoi 2010】弹飞绵羊 分块||Link Cut Tree 两种方法
    【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题
    小结-Splay
    【BZOJ 3545】【ONTAK 2010】Peaks & 【BZOJ 3551】【ONTAK 2010】Peaks加强版 Kruskal重构树
    【BZOJ 3732】 Network Kruskal重构树+倍增LCA
    【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
    【BZOJ 1901】【Zju 2112】 Dynamic Rankings 动态K值 树状数组套主席树模板题
    1020: [SHOI2008]安全的航线flight
    POJ
  • 原文地址:https://www.cnblogs.com/pandawind/p/10033860.html
Copyright © 2011-2022 走看看