JavaScript——DOM(Document Object Model)文档对象模型

r囧r小猫 2023-10-06 17:12 154阅读 0赞

节点:Node

构成HTML文档最基本的单元。常用节点分为四类

  • 文档节点:整个HTML文档(#document)
  • 元素节点:HTML文档中的HTML标签
  • 属性节点∶元素的属性
  • 文本节点:HTML标签中的文本内容(#text)

实例

  1. <button id="btn">我是一个按钮</button>
  2. <script type="text/javascript">
  3. /*
  4. * 浏览器已经为我们提供 文档节点 对象这个对象是window属性
  5. * 可以在页面中直接使用,文档节点代表的是整个网页
  6. */
  7. //console.log(document);
  8. //获取到button对象
  9. var btn = document.getElementById("btn");
  10. //修改按钮的文字
  11. btn.innerHTML = "I'm Button";
  12. </script>

实例二

  1. <button id="btn">我是一个按钮</button>
  2. <script>
  3. /* onload事件会在整个页面加载完成之后才触发
  4. 为window绑定一个onload事件
  5. 该事件对应的响应函数将会在页面加载完成之后执行,
  6. 这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了 */
  7. window.onload = function() {
  8. var test = document.getElementById("btn")
  9. test.onclick = function() {
  10. alert("hello")
  11. }
  12. var result = test.innerHTML;
  13. console.log(test)
  14. }
  15. </script>

获取元素节点

  1. 通过document对象调用
  2. 1getElementById()
  3. -通过id属性获取一个元素节点对象,没找到则返回null,找到则返回对象
  4. var test = document.getElementById("btn");
  5. var result = test.innerHTML;
  6. console.log(result)
  7. 2getElementsByTagName()
  8. -通过标签名获取一组元素节点对象,没找到则返回null,找到则返回类数组对象
  9. var test = document.getElementsByTagName("p");
  10. var result = p[0].innerHTML;//innerText和innerHTML类似但是会去掉标签
  11. console.log(result)
  12. 3getElementsByName()
  13. -通过name属性获取一组元素节点对象
  14. 4getElementsByClassName()//IE8及以下不支持

图片切换例子

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style>
  7. .outer{
  8. width: 550px;
  9. padding:10px;
  10. margin: 50px auto;
  11. text-align: center;
  12. background-color: #8b9bff;
  13. }
  14. </style>
  15. <script>
  16. window.onload = function() {
  17. var image=["./1.jpg","./2.jpg","./3.jpg","./4.jpg","./5.jpg"]
  18. //当前图片的索引
  19. var index=0;
  20. var img=document.getElementsByTagName("img")[0];
  21. //
  22. var info = document.getElementById("info");
  23. info.innerHTML="一共"+image.length+"张图片"+" "+"这是第"+(index+1)+"张";
  24. var prev = document.getElementById("prev")
  25. prev.onclick = function() {
  26. index--;
  27. if(index<0){
  28. index=image.length-1;
  29. }
  30. img.src=image[index];
  31. info.innerHTML="一共"+image.length+"张图片"+" "+"这是第"+(index+1)+"张";
  32. }
  33. var next = document.getElementById("next")
  34. next.onclick = function() {
  35. index++;
  36. if(index>=image.length){
  37. index=0;
  38. }
  39. img.src=image[index];
  40. info.innerHTML="一共"+image.length+"张图片"+" "+"这是第"+(index+1)+"张";
  41. }
  42. }
  43. </script>
  44. </head>
  45. <body>
  46. <div class="outer">
  47. <h2 id=info></h2>
  48. <img src="./1.jpg" />
  49. <button id="prev">上一张</button>
  50. <button id="next">下一张</button>
  51. </div>
  52. </body>
  53. </html>

在这里插入图片描述

获取元素节点的子节点

  1. 通过具体的元素节点调用
  2. 1. getElementsByTagName()
  3. -方法,返回当前节点的指定标签名后代节点
  4. 2. childNodes
  5. -属性,表示当前节点的所有子节点
  6. childNodes属性会获取包括文本节点在呢的所有节点
  7. 根据DOM标签标签间空白也会当成文本节点
  8. 注意:在工E8及以下的浏览器中,不会将空白当成子节点
  9. children属性可以获取当前元素的所有子元素
  10. 3. firstChild
  11. -属性,表示当前节点的第一个子节点
  12. //firstChild可以获取到当前元素的第一-个子节点(包括空白文本节点)
  13. var fir = phone.firstChild;
  14. //firstElementChild获取当前元素的第一个子元素
  15. firstElementChild不支持IE8及以下的浏览器,
  16. 如果需要兼容他们尽量不要使用
  17. */
  18. 4. lastChild
  19. -属性,表示当前节点的最后-个子节点

获取父节点和兄弟节点

  1. 通过具体的节点调用
  2. 1. parentNode
  3. -属性,表示当前节点的父节点
  4. 2. previousSibling
  5. -属性,表示当前节点的前一个兄弟节点,也可能获取空白文档
  6. previousElementSibling不会获取空白文档,不兼容ie8及以下
  7. 3. nextSibling
  8. -属性,表示当前节点的后一个兄弟节点

全选练习

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script>
  7. window.onload = function() {
  8. var items = document.getElementsByName("items");
  9. //全选/全不选
  10. var checkedAllBox = document.getElementById("checkedAllBox");
  11. //全选
  12. var checkedAllBtn = document.getElementById("checkedAllBtn");
  13. checkedAllBtn.onclick = function() {
  14. for (var i = 0; i < items.length; i++) {
  15. items[i].checked = true;
  16. }
  17. checkedAllBox.checked = true;
  18. }
  19. //全不选
  20. var checkedNoBtn = document.getElementById("checkedNoBtn");
  21. checkedNoBtn.onclick = function() {
  22. for (var i = 0; i < items.length; i++) {
  23. items[i].checked = false;
  24. }
  25. checkedAllBox.checked = false;
  26. }
  27. //反选
  28. var checkedRevBtn = document.getElementById("checkedRevBtn");
  29. checkedRevBtn.onclick = function() {
  30. checkedAllBox.checked = true;
  31. for (var i = 0; i < items.length; i++) {
  32. items[i].checked = !items[i].checked;
  33. //判断四个多选框是否全选
  34. if (!items[i].checked) {
  35. checkedAllBox.checked = false;
  36. }
  37. }
  38. }
  39. //提交按钮
  40. var sendBtn = document.getElementById("sendBtn");
  41. sendBtn.onclick = function() {
  42. for (var i = 0; i < items.length; i++) {
  43. if (items[i].checked == true) {
  44. alert(items[i].value);
  45. }
  46. }
  47. }
  48. checkedAllBox.onclick = function() {
  49. for (var i = 0; i < items.length; i++) {
  50. items[i].checked = checkedAllBox.checked;
  51. }
  52. }
  53. /* 如果四个多选框全都选中,则chec kedAllBox也应该选中
  54. 如果四个多选框没都选中,则chec kedAllBox也不应该选中
  55. */
  56. //为四个多选框分别绑定点击响应函数
  57. for (var i = 0; i < items.length; i++) {
  58. items[i].onclick = function() {
  59. checkedAllBox.checked = true;
  60. for (var j = θ; j < items.length; j++) {
  61. //判断四个多选框是否全选
  62. if (!items[j].checked) {
  63. checkedAllBox.checked = false;
  64. }
  65. break;
  66. }
  67. }
  68. }
  69. }
  70. </script>
  71. </head>
  72. <body>
  73. <form method="post" action="">
  74. 你爱好的运动是? <input type="checkbox" id="checkedAllBox" />全选/全不选
  75. <br />
  76. <input type="checkbox" name="items" value="足球" />足球
  77. <input type="checkbox" name="items" value="篮球" />篮球
  78. <input type="checkbox" name="items" value="羽毛球" />羽毛球
  79. <input type="checkbox" name="items" value="乒乓球" />乒乓球
  80. <br />
  81. <input type="button" id="checkedAllBtn" value="全选" />
  82. <input type="button" id="checkedNoBtn" value="全不选" />
  83. <input type="button" id="checkedRevBtn" value="反选" />
  84. <input type="button" id="sendBtn" value="提交" />
  85. </form>
  86. </body>
  87. </html>

在这里插入图片描述

DOM查询的其他方法

  1. //获取body标签
  2. var body=document.getElementsByTagName("body")[0];
  3. //或
  4. var body=document.body;
  5. //获取html标签
  6. var html=document.documentElement;
  7. //document.all代表页面的所有元素
  8. //document.querySelector(),如果有多个,但是只会返回第一个
  9. document.querySelector(".box1 div")
  10. //document.querySelectorAll(),如果有多个返回多个,只有一个也会返回数组
  11. document.querySelectorAll(".box1")

创建节点

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script>
  7. window.onload = function() {
  8. myClick("btn01", function() {
  9. //创建节点
  10. var p = document.createElement("p");
  11. //创建文本节点对象
  12. var bjText=document.createTextNode("北京");
  13. //添加子节点:语法:父节点.document.appendChild(子节点)
  14. p.appendChild(bjText);
  15. var add = document.getElementById("addp");
  16. add.appendChild(p);
  17. //=========或则使用以下方法,更简便==================================
  18. var p = document.createElement("p");
  19. p.innerHTML="湛江";
  20. var add = document.getElementById("addp");
  21. add.appendChild(p);
  22. })
  23. }
  24. function myClick(idStr, fun) {
  25. var btn = document.getElementById(idStr);
  26. btn.onclick = fun;
  27. }
  28. </script>
  29. </head>
  30. <body>
  31. <button id="btn01">创建节点</button>
  32. <h3 id="addp"></h3>
  33. </body>
  34. </html>

CDES

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script>
  7. function delA() {
  8. //点击哪个,this就是哪个按钮
  9. //获取当前的tr
  10. var tr = this.parentNode.parentNode;
  11. //获取员工的名字
  12. var deleteName = tr.children[0].innerHTML;
  13. //是否删除提示
  14. var flag = confirm("是否" + deleteName + "删除?")
  15. //删除<tr>
  16. if (flag) {
  17. tr.parentNode.removeChild(tr);
  18. }
  19. return false;
  20. }
  21. window.onload = function() {
  22. //删除信息
  23. //获取超链接
  24. var allA = document.getElementsByTagName("a");
  25. for (var i = 0; i<allA.length; i++) {
  26. allA[i].onclick = delA; //将对象赋值过去而不是返回值
  27. }
  28. //添加信息
  29. //提交按钮
  30. var addEmpButton = document.getElementById("addEmpButton");
  31. addEmpButton.onclick = function() {
  32. //获取名字
  33. var name = document.getElementById("empName").value;
  34. alert(name);
  35. //获取email
  36. var email = document.getElementById("email").value;
  37. //获取salary
  38. var salary = document.getElementById("salary").value;
  39. //创建一个<tr>
  40. var tr = document.createElement("tr");
  41. //设置tr的内容
  42. tr.innerHTML = "<td>"+name+"</td>" +
  43. "<td>"+email+"</td>" +
  44. "<td>"+salary+"</td>" +
  45. "<td><a href='javascript:;'>Delete</a></td>";
  46. //获取超链接
  47. var a = tr.getElementsByTagName("a")[0];
  48. a.onclick = delA;
  49. // //创建四个<td></td>
  50. // var nameTd = document.createElement("td");
  51. // var emailTd = document.createElement("td");
  52. // var salaryTd = document.createElement("td");
  53. // var aTd = document.createElement("td");
  54. // //创建一个a
  55. // var a = document.createElement("a");
  56. // //创建文本节点
  57. // var nameText = document.createTextNode(name);
  58. // var emailText = document.createTextNode(email);
  59. // var salaryText = document.createTextNode(salary);
  60. // var delText = document.createTextNode("Delete");
  61. // //将文本添加到td中
  62. // nameTd.appendChild(nameText);
  63. // emailTd.appendChild(emailText);
  64. // salaryTd.appendChild(salaryText);
  65. // a.appendChild(delText);
  66. // aTd.appendChild(a);
  67. // //将td添加到tr中
  68. // tr.appendChild(nameTd);
  69. // tr.appendChild(emailTd);
  70. // tr.appendChild(salaryTd);
  71. // tr.appendChild(aTd);
  72. // //向a中添加href属性
  73. // a.href = "javascript:;";
  74. // a.onclick = delA;
  75. //获取table
  76. //var employeeTable = document.getElementById("employeeTable");
  77. //获取employeeTable中的<tbody>
  78. var tbody = employeeTable.getElementsByTagName("tbody")[0];
  79. //将tr添加到tbody中
  80. tbody.appendChild(tr);
  81. };
  82. };
  83. // function myClick(idStr, fun) {
  84. // var btn = document.getElementById(idStr);
  85. // btn.onclick = fun;
  86. // }
  87. </script>
  88. </head>
  89. <body>
  90. <table id="employeeTable">
  91. <tr>
  92. <th>Name</th>
  93. <th>Email</th>
  94. <th>Salary</th>
  95. <th> </th>
  96. </tr>
  97. <tr>
  98. <td>wang</td>
  99. <td>787@qq.com</td>
  100. <td>8000</td>
  101. <td><a href="deleteEmp?id=001">delete</a></td>
  102. </tr>
  103. <tr>
  104. <td>Tony</td>
  105. <td>742347@qq.com</td>
  106. <td>10000</td>
  107. <td><a href="deleteEmp?id=002">Delete</a></td>
  108. </tr>
  109. </table>
  110. <div id="formDiv">
  111. <h4>添加信息</h4>
  112. <table>
  113. <tr>
  114. <td class="word">name:</td>
  115. <td class="inp">
  116. <input type="text" name="empName" id="empName" />
  117. </td>
  118. </tr>
  119. <tr>
  120. <td class="word">email:</td>
  121. <td class="inp">
  122. <input type="text" name="email" id="email" />
  123. </td>
  124. </tr>
  125. <tr>
  126. <td class="word">salary:</td>
  127. <td class="inp">
  128. <input type="text" name="salary" id="salary" />
  129. </td>
  130. </tr>
  131. <tr>
  132. <td colspan="2" align="center">
  133. <button id="addEmpButton">
  134. Submit
  135. </button>
  136. </td>
  137. </tr>
  138. </table>
  139. </div>
  140. </body>
  141. </html>

操作“内联”样式

修改

  1. 通过JS修改元素的样式:
  2. 语法:元素.style.样式名=样式值
  3. 注意:如果CSS的样式名中含有一,
  4. 这种名称在JS中是不合法的比如background-color
  5. 需要将这种样式名修改为驼峰命名法,
  6. 去掉-,然后将-后的字母大写
  7. box1.style.width="300px" ;
  8. box1.style.height = " 300px" ;
  9. box1.style backgroundColor = "yellow";
  10. 我们通过sty1 e属性设置的样式都是内联样式,
  11. 而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示
  12. 但是如果在样式中写了! important,则此时样式会有最高的优先级,
  13. 即使通过JS也不能覆盖该样式,此时将会导致JS修改样式失效
  14. 所以尽量不要为样式添加!important

读取

  1. 语法:元素.style.样式名
  2. box1.style.height

获取元素的样式(只读)

  1. currentStyl
  2. 获取元素当前正在显示的样式,不局限内联样式
  3. 语法:元素.currentStyle.样式名
  4. currentStyle只有IE支持
  5. box1.currentStyle.height
  6. 在其他浏览器中可以使用
  7. getComputedstyle( )这个方法来获取元素当前的样式
  8. 这个方法是window的方法,可以直接使用!
  9. 需要两个参数
  10. 第一个:要获取样式的元素
  11. 第二个:可以传递一个伪元素,-般都传null
  12. alert(getComputedStyle(box1,null).width);
  13. 该方法会返回一个对象,对象中封装了当前元素对应的样式
  14. 可以通过对象.样式名来读取样式
  15. 如果获取的样式没有设置,则会获取到真实的值,而不是默认值
  16. 比如:没有设置width,它不会获取到auto,而是一个长度
  17. alert(getComputedStyle(box1,null).backgroundColor);不兼容IE8
  18. 处理兼容问题
  19. 定义一个函数,用来获取指定元素的当前的样式
  20. 参数:
  21. obj要获取样式的元素
  22. name要获取的样式名
  23. alert(getStyle(box1,backgroundColor));
  24. function getStyle(obj,name){
  25. if(window.getComputedStyle){
  26. //正常浏览器
  27. return getComputedStyle(obj,null)[name];
  28. }
  29. else{
  30. //IE8
  31. return obj.currentStyle[name];
  32. }
  33. }

其他样式的相关属性

获取元素的宽度和高度(只读)

  1. clientWidth
  2. clientHeight
  3. -这两个属性可以获取元素的可见宽度和高度
  4. -这些属性都是不带px的,返回都是一个数字, 可以直接进行计算
  5. -会获取元素宽度和高度,包括内容区和内边距
  6. box1.clienwidth
  7. offsetWidth
  8. offsetHeight
  9. 获取元素的整个的宽度和高度,包括内容区、内边距和边框
  10. offsetParent
  11. -可以用来获取当前元素的定位父元素
  12. -会获取到离当前元素最近的开启了定位的祖先元素,如果所有的祖先元素等候没有开启定位,则返回body
  13. var op = box1. offsetParent ;
  14. alert(op.id);
  15. offsetL eft
  16. -当前元素相对于其定位父元素的水平偏移量
  17. offsetTop
  18. 当前元素相对于其定位父元素的垂直偏移量
  19. scrollWidth
  20. scrollHeight
  21. 可以获取元素整个滚动区域的高度和宽度
  22. scrollLeft
  23. 可以获取水平滚动条滚动的距离
  24. scrollTop
  25. 可以获取垂直滚动条滚动的距离
  26. scrollHeight-scrollTop==clientHeight时垂直滚动条滚动到底
  27. 例如:info.scrollHeight-info.scrollTop==info.clientHeight
  28. scrollWidth-scrollLeft==clientWidth时水平滚动条滚动到底

事件对象

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style>
  7. #areaDiv {
  8. width: 200px;
  9. height: 50px;
  10. border: 1px solid #000000;
  11. }
  12. #showMsg {
  13. width: 200px;
  14. height: 20px;
  15. border: 1px solid #000000;
  16. margin-top: 10px;
  17. }
  18. </style>
  19. <script>
  20. window.onload = function() {
  21. var areaDiv = document.getElementById("areaDiv");
  22. var showMsg = document.getElementById("showMsg");
  23. // 事件对象
  24. // 当事件的响应函数被触发时,浏览器每次都会将一一个事件对象作为实参传递进响应函数
  25. areaDiv.onmousemove = function(event) {
  26. // clientX 返回当事件被触发时,鼠标指针的水平坐标。
  27. // clientY 返回当事件被触发时,鼠标指针的垂直坐标。
  28. //通过判断兼容浏览器
  29. if (!event) {
  30. event = window.event;
  31. }
  32. //或则evnet=event||window.event;
  33. var x = event.clientX;
  34. var y = event.clientY;
  35. showMsg.innerHTML = "x=" + x + "," + "y = "+y;
  36. }
  37. };
  38. </script>
  39. </head>
  40. <body>
  41. <div id="areaDiv"></div>
  42. <div id="showMsg"></div>
  43. </body>
  44. </html>

在这里插入图片描述

使div跟随鼠标移动

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style>
  7. #box1 {
  8. width: 100px;
  9. height: 100px;
  10. background-color: #00FF00;
  11. /*开启定位*/
  12. position: absolute;
  13. }
  14. </style>
  15. <script>
  16. window.onload = function() {
  17. var box1 = document.getElementById("box1");
  18. document.onmousemove = function(event) {
  19. //使div跟随鼠标移动
  20. if (!event) {
  21. event = window.event;
  22. }
  23. //获取滚动条的滚动距离
  24. var st =document.body.scrollTop || document.documentElement.scrollTop;
  25. var sl =document.body.scrollLeft || document.documentElement.scrollLeft;
  26. //获取到鼠标的坐标
  27. /*
  28. clientX和clientY
  29. 用于获取鼠标在当前的可见窗口的坐标
  30. div的偏移量,是相对于整个页面的
  31. pageX和pageY可以获取鼠标相对于当前页面的坐标
  32. 但是这个两个属性在IE8中不支持,所以如果需要兼容IE8,则不要使用
  33. */
  34. var left = event.clientX;
  35. var top = event.clientY;
  36. //设置div的偏移量
  37. box1.style.left = left+sl + "px";
  38. box1.style.top = top +st+ "px";
  39. }
  40. }
  41. </script>
  42. </head>
  43. <body>
  44. <div id="box1"></div>
  45. </body>
  46. </html>

事件的冒泡

取消冒泡
可以将事件对象的cancelBubble设置为true,即可取消冒泡
event=event || window.event;
event.cancelBubble=true;

事件的委派

  1. 我们希望,只绑定一次事件,即可应用到多个的元素上,即使元素是后添加的
  2. 我们可以尝试将其绑定给元素的共同的祖先元素
  3. 事件的委派
  4. 指将事件统一-绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,会- -直 冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。
  5. 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能
  6. ul.οnclick=function(event){
  7. //如果触发事件的对象是我们期望的元素,则执行否则不执行
  8. event=event || window.event;
  9. if(event.target.className=="link"){
  10. alert("只有点击a中的内容才会触发事件");
  11. }
  12. }
  13. <ul id="ul">
  14. <li><a href="javascript:;" class="link">超链接一</a></li>
  15. <li><a href="javascript:;" class="link">超链接一</a></li>
  16. <li><a href="javascript:;" class="link">超链接一</a></li>
  17. </ul>

事件的绑定

同时为一个元素的相同事件同时绑定多个响应函数

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script>
  7. window.onload = function() {
  8. var btn01 = document.getElementById("btn01");
  9. // addEventListener( )
  10. // -通过这个方法也可以为元素绑定响应函数
  11. // -参数:
  12. // 1.事件的字符串,不要on
  13. // 2.回调函数,当事件触发时该函数会被调用
  14. // 3.是否在捕获阶段触发事件,需要一个布尔值,一般都传false
  15. // 使用addEventListener( )可以同时为一个元素的相同事件同时绑定多个响应函数,
  16. // 这样当事件被触发时,响应函数将会按照函数的绑定顺序执行
  17. //addEventListener//IE8以下不支持
  18. // btn01.addEventListener("click",function(){
  19. // alert(1)
  20. // },false)
  21. // btn01.addEventListener("click",function(){
  22. // alert(2)
  23. // },false)
  24. // btn01.addEventListener("click",function(){
  25. // alert(3)
  26. // },false)
  27. //attachEvent不兼容
  28. // btn01.attachEvent("onclick",function(){
  29. // alert(1);
  30. // })
  31. // btn01.attachEvent("onclick",function(){
  32. // alert(2);
  33. // })
  34. // btn01.attachEvent("onclick",function(){
  35. // alert(3);
  36. // })
  37. bind(btn01,"click",function(){
  38. alert(this);
  39. });
  40. }
  41. //定义一一个函数,用来为指定元素绑定响应函数
  42. // addEventListener( )中的this,是绑定事件的对象
  43. // attachEvent( )中的this,是window
  44. // 需要统-两个方法this
  45. /*
  46. 参数:
  47. *
  48. obj要绑定事件的对象
  49. *
  50. eventStr事件的字符串(不用on)
  51. *
  52. callback回调函数
  53. */
  54. //兼容的解决方法
  55. function bind(obj, eventStr, callback) {
  56. if (obj.addEventListener) {
  57. //大部分浏览器兼容的方式
  58. obj.addEventListener(eventStr, callback, false);
  59. } else {
  60. //this由调用方式决定
  61. //IE8及以下
  62. obj.attachEvent("on" + eventStr, function(){
  63. callback.call(obj);
  64. });
  65. }
  66. }
  67. </script>
  68. </head>
  69. <body>
  70. <button id="btn01"></button>
  71. </body>
  72. </html>

事件的传播

事件的拖拽1

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style type="text/css">
  7. #box1 {
  8. width: 100px;
  9. height: 100px;
  10. background-color: #00FF00;
  11. position: absolute;
  12. }
  13. </style>
  14. <script>
  15. window.onload = function() {
  16. var box1 = document.getElementById("box1");
  17. /* 拖拽box1元素
  18. 拖拽的流程
  19. 1.当鼠标在被拖拽元素上按下时,开始拖拽onmousedown
  20. 2.当鼠标移动时被拖拽元素跟随鼠标移动onmous emove
  21. 3.当鼠标松开时,被拖拽元素固定在当前位置onmouseup */
  22. box1.onmousedown = function() {
  23. document.onmousemove = function(event) {
  24. event = event || window.event;
  25. //获取鼠标的坐标
  26. var left = event.clientX;
  27. var top = event.clientY;
  28. //修改box1的位置
  29. box1.style.left = left + "px";
  30. box1.style.top = top + "px";
  31. }
  32. document.onmouseup = function() {
  33. //当鼠标松开时,被拖拽元素固定在当前位置onmouseup
  34. //取消document的onmousemove事件
  35. document.onmousemove = null;
  36. //取消document的onmouseup事件
  37. document.onmouseup = null ;
  38. }
  39. }
  40. }
  41. </script>
  42. </head>
  43. <body>
  44. <div id="box1"></div>
  45. </body>
  46. </html>

事件的拖拽2

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style type="text/css">
  7. #box1 {
  8. width: 100px;
  9. height: 100px;
  10. background-color: #00FF00;
  11. position: absolute;
  12. }
  13. </style>
  14. <script>
  15. window.onload = function() {
  16. var box1 = document.getElementById("box1");
  17. /* 拖拽box1元素
  18. 拖拽的流程
  19. 1.当鼠标在被拖拽元素上按下时,开始拖拽onmousedown
  20. 2.当鼠标移动时被拖拽元素跟随鼠标移动onmous emove
  21. 3.当鼠标松开时,被拖拽元素固定在当前位置onmouseup */
  22. box1.onmousedown = function(event) {
  23. //div的偏移量鼠标.clentX -元素.offsetLeft
  24. //div的偏移量鼠标.clentY -元素.offsetTop
  25. event = event || window.event;
  26. var ol=event.clientX-box1.offsetLeft;
  27. var ot=event.clientY-box1.offsetTop;
  28. document.onmousemove = function(event) {
  29. event = event || window.event;
  30. //获取鼠标的坐标
  31. var left = event.clientX;
  32. var top = event.clientY;
  33. //修改box1的位置
  34. box1.style.left = left-ol + "px";
  35. box1.style.top = top-ot + "px";
  36. }
  37. document.onmouseup = function() {
  38. //当鼠标松开时,被拖拽元素固定在当前位置onmouseup
  39. //取消document的onmousemove事件
  40. document.onmousemove = null;
  41. //取消document的onmouseup事件
  42. document.onmouseup = null ;
  43. }
  44. }
  45. }
  46. </script>
  47. </head>
  48. <body>
  49. <div id="box1"></div>
  50. </body>
  51. </html>

事件的拖拽3

  1. //设置btn01对鼠标按下相关的事件进行捕获
  2. //当调用一个元素的setCapture( )方法以后,这个元素将会把下一次所有的鼠标按下相关的事件捕获到自身上
  3. if(box1.setCapture){
  4. box1.setCapture();
  5. }
  6. box1.setCapture&&box1.setCapture();
  7. //当鼠标松开时,取消对事件的捕获
  8. box1.releaseCapture && box1.releaseCapture( );

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读

    相关 DOM 文档对象模型

    优点和缺点 编辑 DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。 DOM的缺点主要