1.offsetLeft和offsetTop获取元素偏移

  1. <!--
  2. offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移量)、大小等
  3. 获得元素距离带有定位父元素的位置
  4. 获得元素自身的大小(宽度和高度)
  5. 注意:返回的数值都不带单位
  6. offset系列常用属性:
  7. offset系列属性 作用
  8. element.offsetParent 返回作为该元素带有定位的父级元素,如果父级元素都没有定位则返回body
  9. element.offsetTop 返回元素相对带有定位元素上方的偏移,如果没有父级或父级元素都没有定位则返回body
  10. element.offsetLeft 返回元素相对带有定位元素左边框的偏移,如果没有父级或父级元素都没有定位则返回body
  11. element.offsetWidth 返回自身包括padding、边框、内容区的宽度,返回数值不带单位
  12. element.offsetHeight 返回自身包括padding、边框、内容区的高度,返回数值不带单位
  13. -->
  14. <!DOCTYPE html>
  15. <html lang="en">
  16. <head>
  17. <meta charset="UTF-8">
  18. <title>offsetLeft和offsetTop获取元素偏移</title>
  19. <style>
  20. * {
  21. margin: 0;
  22. padding: 0;
  23. }
  24. .father {
  25. /* position: relative; */
  26. width: 200px;
  27. height: 200px;
  28. background-color: pink;
  29. margin: 150px;
  30. }
  31. .son {
  32. width: 100px;
  33. height: 100px;
  34. background-color: purple;
  35. margin-left: 45px;
  36. }
  37. .w {
  38. height: 200px;
  39. background-color: skyblue;
  40. margin: 0 auto 200px;
  41. padding: 10px;
  42. border: 15px solid red;
  43. }
  44. </style>
  45. </head>
  46. <body>
  47. <div class="father">
  48. <div class="son"></div>
  49. </div>
  50. <div class="w"></div>
  51. <script>
  52. // offset 系列
  53. var father = document.querySelector('.father');
  54. var son = document.querySelector('.son');
  55. // 1.可以得到元素的偏移 位置 返回的不带单位的数值
  56. console.log(father.offsetTop);
  57. console.log(father.offsetLeft);
  58. // 它以带有定位的父亲为准 如果么有父亲或者父亲没有定位 则以 body 为准
  59. console.log(son.offsetLeft);
  60. var w = document.querySelector('.w');
  61. // 2.可以得到元素的大小 宽度和高度 是包含padding + border + width
  62. console.log(w.offsetWidth);
  63. console.log(w.offsetHeight);
  64. // 3. 返回带有定位的父亲 否则返回的是body
  65. console.log(son.offsetParent); // 返回带有定位的父亲 否则返回的是body
  66. console.log(son.parentNode); // 返回父亲 是最近一级的父亲 亲爸爸 不管父亲有没有定位
  67. </script>
  68. </body>
  69. </html>

2.offset与style区别

  1. <!--
  2. offset可以得到任意样式表中的样式值
  3. offset系列获得的数值是没有单位的
  4. offsetWidth包含padding+border+width
  5. offset等属性是只读属性,只能获取不能赋值
  6. style只能得到行内样式表中的样式值
  7. style.width获得的是带有单位的字符串
  8. style.width获得不包含padding和border的值
  9. style.width是可读属性,可以获得也可以赋值
  10. 所以,我们想要获取元素大小位置,用offset更合适
  11. 想要给元素更改值,则需要用style改变
  12. -->
  13. <!DOCTYPE html>
  14. <html lang="en">
  15. <head>
  16. <meta charset="UTF-8">
  17. <title>offset与style区别</title>
  18. <style>
  19. .box {
  20. width: 200px;
  21. height: 200px;
  22. background-color: pink;
  23. padding: 10px;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="box" style="width: 200px;"></div>
  29. <script>
  30. // offset与style的区别
  31. var box = document.querySelector('.box');
  32. console.log(box.offsetWidth);
  33. console.log(box.style.width);
  34. // box.offsetWidth = '300px';
  35. box.style.width = '300px';
  36. </script>
  37. </body>
  38. </html>

3.获取鼠标在盒子内的坐标

  1. <!--
  2. 获取鼠标在盒子里的坐标:
  3. 用鼠标在页面下的坐标e.pageX和e.pageY减去盒子的坐标this.offsetLeft和this.offsetTop
  4. -->
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8">
  9. <title>获取鼠标在盒子内的坐标</title>
  10. <style>
  11. div{
  12. width: 300px;
  13. height: 300px;
  14. background-color: violet;
  15. margin:200px;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div></div>
  21. <script>
  22. var div=document.querySelector('div');
  23. div.addEventListener('mousemove',function (e) {
  24. console.log(e.pageX);
  25. console.log(e.pageY);
  26. console.log(div.offsetLeft);
  27. console.log(div.offsetTop);
  28. var x=e.pageX-this.offsetLeft;
  29. var y=e.pageY-this.offsetTop;
  30. this.innerHTML='x坐标是'+x+',y坐标是'+y;
  31. })
  32. </script>
  33. </body>
  34. </html>

2021.11.06 20:08

4.拖动模态框

  1. <!--
  2. 1.点击弹出层,静态框和遮挡层就会显示出来display:block;
  3. 2.点击关闭按钮,模态框和遮挡层就会隐藏起来display:none;
  4. 在页面的拖拽原理:鼠标按下并移动,之后松开鼠标
  5. 触发事件是鼠标按下mousedown,鼠标移动mousemove鼠标松开mouseup
  6. 拖拽过程:鼠标移动过程中,获得最新的值赋值给模拟框的left和top值,这样模拟框就可以跟着鼠标走了
  7. 鼠标按下触发的事件源是 最上面一行,就是id为title
  8. 鼠标移动,把鼠标在页面中的坐标,减去 鼠标在盒子内的坐标,就是模态框的left和top值
  9. 鼠标弹起,就让鼠标移动事件移除
  10. -->
  11. <!DOCTYPE html>
  12. <html lang="en">
  13. <head>
  14. <meta charset="UTF-8">
  15. <title>拖动模态框</title>
  16. <style>
  17. .login-header {
  18. width: 100%;
  19. text-align: center;
  20. height: 30px;
  21. font-size: 24px;
  22. line-height: 30px;
  23. }
  24. ul,
  25. li,
  26. ol,
  27. dl,
  28. dt,
  29. dd,
  30. div,
  31. p,
  32. span,
  33. h1,
  34. h2,
  35. h3,
  36. h4,
  37. h5,
  38. h6,
  39. a {
  40. padding: 0px;
  41. margin: 0px;
  42. }
  43. .login {
  44. display: none;
  45. width: 512px;
  46. height: 280px;
  47. position: fixed;
  48. border: #ebebeb solid 1px;
  49. left: 50%;
  50. top: 50%;
  51. background: #ffffff;
  52. box-shadow: 0px 0px 20px #ddd;
  53. z-index: 9999;
  54. transform: translate(-50%, -50%);
  55. }
  56. .login-title {
  57. width: 100%;
  58. margin: 10px 0px 0px 0px;
  59. text-align: center;
  60. line-height: 40px;
  61. height: 40px;
  62. font-size: 18px;
  63. position: relative;
  64. cursor: move;
  65. }
  66. .login-input-content {
  67. margin-top: 20px;
  68. }
  69. .login-button {
  70. width: 50%;
  71. margin: 30px auto 0px auto;
  72. line-height: 40px;
  73. font-size: 14px;
  74. border: #ebebeb 1px solid;
  75. text-align: center;
  76. }
  77. .login-bg {
  78. display: none;
  79. width: 100%;
  80. height: 100%;
  81. position: fixed;
  82. top: 0px;
  83. left: 0px;
  84. background: rgba(0, 0, 0, .3);
  85. }
  86. a {
  87. text-decoration: none;
  88. color: #000000;
  89. }
  90. .login-button a {
  91. display: block;
  92. }
  93. .login-input input.list-input {
  94. float: left;
  95. line-height: 35px;
  96. height: 35px;
  97. width: 350px;
  98. border: #ebebeb 1px solid;
  99. text-indent: 5px;
  100. }
  101. .login-input {
  102. overflow: hidden;
  103. margin: 0px 0px 20px 0px;
  104. }
  105. .login-input label {
  106. float: left;
  107. width: 90px;
  108. padding-right: 10px;
  109. text-align: right;
  110. line-height: 35px;
  111. height: 35px;
  112. font-size: 14px;
  113. }
  114. .login-title span {
  115. position: absolute;
  116. font-size: 12px;
  117. right: -20px;
  118. top: -30px;
  119. background: #ffffff;
  120. border: #ebebeb solid 1px;
  121. width: 40px;
  122. height: 40px;
  123. border-radius: 20px;
  124. }
  125. </style>
  126. </head>
  127. <body>
  128. <div class="login-header"><a id="link" href="javascript:;">点击,弹出登录框</a></div>
  129. <div id="login" class="login">
  130. <div id="title" class="login-title">登录会员
  131. <span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span>
  132. </div>
  133. <div class="login-input-content">
  134. <div class="login-input">
  135. <label>用户名:</label>
  136. <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input">
  137. </div>
  138. <div class="login-input">
  139. <label>登录密码:</label>
  140. <input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input">
  141. </div>
  142. </div>
  143. <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div>
  144. </div>
  145. <!-- 遮盖层 -->
  146. <div id="bg" class="login-bg"></div>
  147. <script>
  148. var login=document.querySelector('.login');
  149. var mask=document.querySelector('.login-bg');
  150. var link=document.querySelector('#link');
  151. var closeBtn=document.querySelector('#closeBtn');
  152. //点击弹出层这个链接link 让mask和login显示出来
  153. link.addEventListener('click',function () {
  154. login.style.display='block';
  155. mask.style.display='block';
  156. })
  157. //点击closeBtn就隐藏mask和login
  158. closeBtn.addEventListener('click',function () {
  159. mask.style.display='none';
  160. login.style.display='none';
  161. })
  162. //拖拽页面
  163. var title=document.querySelector('#title');
  164. title.addEventListener('mousedown',function (e) {
  165. var x=e.pageX-login.offsetLeft;
  166. var y=e.pageY-login.offsetTop;
  167. //鼠标移动,把鼠标在页面中的坐标,减去 鼠标在盒子内的坐标,就是模态框的left和top值
  168. document.addEventListener('mousemove',move);
  169. function move(e) {
  170. login.style.left=e.pageX-x+'px';
  171. login.style.top=e.pageY-y+'px';
  172. }
  173. //鼠标弹起,就让鼠标移动事件移除
  174. document.addEventListener('mouseup',function (e) {
  175. document.removeEventListener('mousemove',move);
  176. })
  177. })
  178. </script>
  179. </body>
  180. </html>

5.client系列

动态获取该元素的边框大小、元素大小等
element.clientTop 返回元素上边框的大小
element.clientLeft 返回元素左边框的大小
element.clientWidth 返回自身包括padding、内容区的宽度,不含边框,返回数值不带单位
element.clientHeight 返回自身包含padding、内容区的高度,不含边框,返回数值不带单位

offset系列获得的数值是没有单位的
offsetWidth包含padding+border+width

6.立即执行函数

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>立即执行函数</title>
  6. </head>
  7. <body>
  8. <script>
  9. //立即执行函数:不需要调用,立马能够自己执行的函数
  10. function fn(){
  11. console.log(1);
  12. }
  13. fn();
  14. //写法
  15. // (function() {}) () 或者(function(){}());
  16. (function (a) {
  17. console.log(a);
  18. })(2);//第二个小括号可以看做是调用函数,可以传参数
  19. (function (a,b) {
  20. console.log(a+b);
  21. } (2,3))
  22. //立即执行函数最大的作用就是 独立创建了一个作用域,里面的所有变量都是局部变量,不会影响运行
  23. </script>
  24. </body>
  25. </html>

2021.11.07 16:15