• 习题
    • 创建一张表
    • 通过标签名获取元素
    • 猫的帽子

    习题

    创建一张表

    HTML 表格使用以下标签结构构建:

    1. <table>
    2. <tr>
    3. <th>name</th>
    4. <th>height</th>
    5. <th>place</th>
    6. </tr>
    7. <tr>
    8. <td>Kilimanjaro</td>
    9. <td>5895</td>
    10. <td>Tanzania</td>
    11. </tr>
    12. </table>

    <table>标签中,每一行包含一个<tr>标签。<tr>标签内部则是单元格元素,分为表头(<th>)和常规单元格(<td>)。

    给定一个山的数据集,一个包含nameheightplace属性的对象数组,为枚举对象的表格生成 DOM 结构。 每个键应该有一列,每个对象有一行,外加一个顶部带有<th>元素的标题行,列出列名。

    编写这个程序,以便通过获取数据中第一个对象的属性名称,从对象自动产生列。

    将所得表格添加到id属性为"mountains"的元素,以便它在文档中可见。

    当你完成后,将元素的style.textAlign属性设置为right,将包含数值的单元格右对齐。

    1. <h1>Mountains</h1>
    2. <div id="mountains"></div>
    3. <script>
    4. const MOUNTAINS = [
    5. {name: "Kilimanjaro", height: 5895, place: "Tanzania"},
    6. {name: "Everest", height: 8848, place: "Nepal"},
    7. {name: "Mount Fuji", height: 3776, place: "Japan"},
    8. {name: "Vaalserberg", height: 323, place: "Netherlands"},
    9. {name: "Denali", height: 6168, place: "United States"},
    10. {name: "Popocatepetl", height: 5465, place: "Mexico"},
    11. {name: "Mont Blanc", height: 4808, place: "Italy/France"}
    12. ];
    13. // Your code here
    14. </script>

    通过标签名获取元素

    document.getElementsByTagName方法返回带有特定标签名称的所有子元素。实现该函数,这里注意是函数不是方法。该函数的参数是一个节点和字符串(标签名称),并返回一个数组,该数组包含所有带有特定标签名称的所有后代元素节点。

    你可以使用nodeName属性从 DOM 元素中获取标签名称。但这里需要注意,使用tagName获取的标签名称是全大写形式。可以使用字符串的toLowerCasetoUpperCase来解决这个问题。

    1. <h1>Heading with a <span>span</span> element.</h1>
    2. <p>A paragraph with <span>one</span>, <span>two</span>
    3. spans.</p>
    4. <script>
    5. function byTagName(node, tagName) {
    6. // Your code here.
    7. }
    8. console.log(byTagName(document.body, "h1").length);
    9. // → 1
    10. console.log(byTagName(document.body, "span").length);
    11. // → 3
    12. let para = document.querySelector("p");
    13. console.log(byTagName(para, "span").length);
    14. // → 2
    15. </script>

    猫的帽子

    扩展一下之前定义的用来绘制猫的动画函数,让猫和它的帽子沿着椭圆形轨道边(帽子永远在猫的对面)移动。

    你也可以尝试让帽子环绕着猫移动,或修改成其他有趣的动画。

    为了便于定位多个对象,一个比较好的方法是使用绝对(absolute)定位。这就意味着topleft属性是相对于文档左上角的坐标。你可以简单地在坐标上加上一个固定数字,以避免出现负的坐标,它会使图像移出可见页面。

    1. <style>body { min-height: 200px }</style>
    2. <img src="img/cat.png" id="cat" style="position: absolute">
    3. <img src="img/hat.png" id="hat" style="position: absolute">
    4. <script>
    5. let cat = document.querySelector("#cat");
    6. let hat = document.querySelector("#hat");
    7. let angle = 0;
    8. let lastTime = null;
    9. function animate(time) {
    10. if (lastTime != null) angle += (time - lastTime) * 0.001;
    11. lastTime = time;
    12. cat.style.top = (Math.sin(angle) * 40 + 40) + "px";
    13. cat.style.left = (Math.cos(angle) * 200 + 230) + "px";
    14. // Your extensions here.
    15. requestAnimationFrame(animate);
    16. }
    17. requestAnimationFrame(animate);
    18. </script>