12.2.3 元素大小

  1. 滚动大小
    scrollHeight:在没有滚动条的情况下,元素内容的总高度
    scrollWidth:在没有滚动条的情况下,元素内容的总宽度
    scrollLeft:被隐藏在内容区域左侧的像素数。通过设置这个属性可以改变元素的滚动位置。
    scrollTop:被隐藏在内容区域上方的像素数。通过设置这个属性可以改变元素的滚动位置。
  2. 确定元素大小
    getBoundingClientRect()方法。返回一个矩形对象,包含4个属性:left、top、right、bottom。这些属性给出了元素在页面中相对于视口的位置
  1. function getElementLeft(element) {
  2. var actualLeft = element.offsetLeft;
  3. var current = element.offsetParent;
  4. while (current !== null) {
  5. actualLeft += current.offsetLeft;
  6. current = current.offsetParent;
  7. }
  8. return actualLeft;
  9. }
  10. function getElementTop(element) {
  11. var actualTop = element.offsetTop;
  12. var current = element.offsetParent;
  13. while (current !== null) {
  14. actualTop += current.offsetTop;
  15. current = current.offsetParent;
  16. }
  17. return actualTop;
  18. }
  19. function getBoundingClientRect(element) {
  20. var scrollTop = document.documentElement.scrollTop;
  21. var scrollLeft = document.documentElement.scrollLeft;
  22. if (element.getBoundingClientRect) {
  23. if (typeof arguments.callee.offset != "number") {
  24. var temp = document.createElement("div");
  25. temp.style.cssText = "position:absolute;left:0;top:0;";
  26. document.body.appendChild(temp);
  27. arguments.callee.offset = temp.getBoundingClientRect().top - scrollTop;
  28. document.body.removeChild(temp);
  29. temp = null;
  30. }
  31. var rect = element.getBoundingClientRect();
  32. var offset = arguments.callee.offset;
  33. return {
  34. left: rect.left + offset,
  35. right: rect.right + offset,
  36. top: rect.top + offset,
  37. bottom: rect.bottom + offset
  38. };
  39. } else {
  40. var actualLeft = getElementLeft(element);
  41. var actualTop = getElementTop(element);
  42. return {
  43. left: actualLeft - scrollLeft,
  44. right: actualLeft + element.offsetWidth - scrollLeft,
  45. top: actualTop - scrollTop,
  46. bottom: actualTop + element.offsetHeight - scrollTop
  47. }
  48. }
  49. }