账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于JavaScript DOM编程艺术 第十章示例代码的疑问?
    61
    0

    这段代码摘抄自Javascript DOM编程艺术第2版 第十章 192页

    请问倒数第二行变量 movement 有什么作用??只有时间函数也可以运行,没看到哪里用到这个变量啊。192页说动画效果不正确是由全局变量引起的,不懂怎么影响到的

    代码如下 moveElement.js

    function moveElement(elementID,final_x,final_y,interval) {
      if (!document.getElementById) return false;
      if (!document.getElementById(elementID)) return false;
      var elem = document.getElementById(elementID);
    
      var xpos = parseInt(elem.style.left);
      var ypos = parseInt(elem.style.top);
    
      if (xpos == final_x && ypos == final_y) {    //当前位置和目标位置对比
        return true;
      }
    
      if (xpos < final_x) {
        xpos++;
      }
      if (xpos > final_x) {
        xpos--;
      }
      if (ypos < final_y) {
        ypos++;
      }
      if (ypos > final_y) {
        ypos--;
      }
      elem.style.left = xpos + "px";
      elem.style.top = ypos + "px";
      var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";  
      movement = setTimeout(repeat,interval); 
      //上面
    }
    

    谢谢各位大神的指导!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 余生浅末 普通会员 1楼

      在JavaScript DOM编程艺术的第十章中,您可能会遇到一些关于DOM操作、事件处理、文档对象模型(DOM)对象的结构和行为等方面的问题。以下是一些可能的示例代码和疑问,以及解答:

      1. DOM操作

      a. document.getElementById():获取指定ID的元素:

      javascript const elementId = 'myElement'; const element = document.getElementById(elementId); console.log(element); // 输出:<div id="myElement">Hello, World!</div>

      b. document.getElementsByTagName():获取所有匹配指定标签名的元素:

      javascript const elements = document.getElementsByTagName('div'); console.log(elements); // 输出:[<div id="myElement">Hello, World!</div>]

      c. document.querySelectorAll():获取所有匹配指定选择器的元素:

      javascript const elements = document.querySelectorAll('div'); console.log(elements); // 输出:[<div id="myElement">Hello, World!</div>]

      d. document.createElement():创建一个新的DOM元素:

      javascript const newElement = document.createElement('div'); newElement.textContent = 'This is a new element'; document.body.appendChild(newElement); console.log(newElement.textContent); // 输出:This is a new element

      1. 事件处理

      a. addEventListener():添加事件监听器到元素:

      javascript const element = document.getElementById('myElement'); element.addEventListener('click', function() { console.log('Element clicked!'); });

      b. removeEventListener():移除事件监听器:

      javascript const element = document.getElementById('myElement'); element.removeEventListener('click', function() { console.log('Element clicked!'); });

      c. dispatchEvent():触发事件:

      javascript const element = document.getElementById('myElement'); element.dispatchEvent(new MouseEvent('click')); console.log(element.dispatchEvent(new MouseEvent('click')); // 输出:true

      1. DOM对象的结构和行为

      a. DOM元素属性javascript const element = document.getElementById('myElement'); console.log(element.style.color); // 输出:#ff0000 element.style.backgroundColor = 'red';

      b. DOM元素事件监听javascript const element = document.getElementById('myElement'); element.addEventListener('click', function() { console.log('Element clicked!'); }); element.addEventListener('mouseover', function() { console.log('Element hovered!'); }); element.addEventListener('mouseout', function() { console.log('Element left!'); });

      c. DOM元素事件处理javascript const element = document.getElementById('myElement'); element.addEventListener('click', function() { console.log('Element clicked!'); }); element.addEventListener('mouseover', function() { console.log('Element hovered!'); }); element.addEventListener('mouseout', function() { console.log('Element left!'); });

      d. DOM元素的DOM事件映射javascript const element = document.getElementById('myElement'); element.addEventListener('click', function() { console.log('Element clicked! Event mapped to the click event.'); }); element.addEventListener('mouseover', function() { console.log('Element hovered! Event mapped to the mouseover event.'); }); element.addEventListener('mouseout', function() { console.log('Element left! Event mapped to the mouseout event.'); });

      e. DOM元素的样式更改javascript const element = document.getElementById('myElement'); element.style.color = '#ff0000'; element.style.backgroundColor = 'red';

      f. DOM元素的style对象javascript const element = document.getElementById('myElement'); console.log(element.style.color); // 输出:#ff0000 element.style.backgroundColor = 'red';

      g. DOM元素的textContent属性javascript const element = document.getElementById('myElement'); element.textContent = 'Hello, World!'; console.log(element.textContent); // 输出:Hello, World!

      h. DOM元素的innerHTML属性javascript const element = document.getElementById('myElement'); element.innerHTML = 'Hello, World!'; console.log(element.innerHTML); // 输出:Hello, World!

      i. DOM元素的querySelector()querySelectorAll()方法javascript const elements = document.querySelectorAll('.myClass'); console.log(elements); // 输出:[<div class="myClass">Hello, World!</div>] const elements2 = document.querySelectorAll('.myClass', '.myClass2'); console.log(elements2); // 输出:[<div class="myClass">Hello, World!</div>, <div class="myClass2">Hello, World!</div>]

      j. DOM元素的style对象的CSSRulesstyle对象的children属性javascript const element = document.getElementById('myElement'); const rules = element.style.cssRules; console.log(rules); // 输出:[CSSRule{color: #ff0000; background-color: red; }] console.log(element.style.children); // 输出:[<div class="myClass">Hello, World!</div>]

      k. DOM元素的classList属性javascript const element = document.getElementById('myElement'); const classes = element.classList; console.log(classes); // 输出:[classList includes: 'myClass', classList has 2 classes] console.log(element.classList.contains('myClass')); // 输出:true

      l. DOM元素的classListadd()方法javascript const element = document.getElementById('myElement'); element.classList.add('myClass'); console.log(element.classList.contains('myClass')); // 输出:true

      m. DOM元素的remove()方法javascript const element = document.getElementById('myElement'); element.classList.remove('myClass'); console.log(element.classList.contains('myClass')); // 输出:false

      1. DOM元素的选择器javascript const elements = document.querySelectorAll('.myClass'); console.log(elements.length); // 输出:4 console.log(elements[0].textContent); // 输出:Hello, World! console.log(elements[0].classList.contains('myClass2')); // 输出:false

      2. DOM元素的classListremoveAll()方法javascript const elements = document.querySelectorAll('.myClass'); elements.classList.removeAll('myClass'); console.log(elements.length); // 输出:4 console.log(elements[0].textContent); // 输出:Hello, World! console.log(elements[0].classList.contains('myClass2')); // 输出:true

      3. DOM元素的style对象的get()set()方法javascript const element = document.getElementById('myElement'); const style = element.style; console.log(style.color); // 输出:#ff0000 style.color = '#00ff00'; console.log(style.color); // 输出:#00ff00

      javascript const element = document.getElementById('myElement'); style.cssRules = []; element.style.cssRules.push({ color: '#00ff00' }); console.log(style.cssRules); // 输出:[CSSRule{color: #00ff00; }] element.style.cssRules = style.cssRules.concat([/* ... */]); console.log(style.cssRules); // 输出:[CSSRule{color: #00ff00; }, CSSRule{color: #ff0000; }]

      *注意:在示例代码中,我们在选择器上添加了*(全选)和#(选中一个元素)的括号,这表示我们在选择所有匹配指定选择器的元素,例如,document.querySelectorAll('*')将返回所有匹配*的元素,document.querySelectorAll('#myElement')将返回匹配#myElement的元素。`

      以上就是DOM编程艺术第十章的一些示例代码和疑问解答,希望对您有所帮助。在实际编程中,您可能需要根据具体需求和场景,对DOM操作、事件处理、DOM元素结构和行为等方面进行深入理解和应用。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部