Web APIs(五)

93 阅读3分钟

Web APIs

一、const

1.早起js,声明变量,只能使用var

2.es6(新版本的js) 出现后 只能使用let 或者 const

3.let和const的区别

①let 声明变量 可以被修改

②const 声明变量 不可以被修改 const 为常量 固定不变

4.作用:在程序设计的时候,如果发现一些数据 永远不会被改变 ,优先使用const(后期不小心发现被修改,报错---便于后期解决错误)

5.后续学习,能用const的就用const,不能用const的就不用,不适用var

      //  const num = 1;
      // num = 2;
      // console.log(num);---->报错,判断:使用const的情况下,有等于号可以判定 程序会报错

// 复杂类型的数据 补充
      // const 声明的变量不能被修改

      // const num = 1;
      // num = 2;

      // const arr=[];
      // // arr.push("呵呵");// 新增一个元素 但是并没有修改过 数组的地址
      // arr=123;// 修改
      // console.log(arr);


      /* 
      const 声明的变量不能被修改
      1 普通类型的数据  直接写 =  ,表示修改数据 报错
      2 复杂类型的数据 直接写 =  , 表示修改 报错
      3 复杂类型的数据 写 = 相当于重新开辟新空间
      
      
       */

      // const obj = {};
      // obj.name = '悟空';
      // //  console.log(obj);
      // obj = 123; // 报错 = 出现=> 开启新的内存空间 报错

      // 小结  const 不能被修改的判断的方式
      // 看它有没有写 = 号即可
      //

      const index = 10;
      index++; // index = index + 1 //报错

      /* 

6.总结

①const和let一样 也能声明变量

②const 声明的变量不能被修改 let 可以随意修改

③判断是不是修改 看它有没有重新写 = 号或者自增自减少

④能使用const 就不用let

⑤你不知道什么时候使用const

⑥学习老师的代码

⑦就使用let

二、事件对象

1.事件对象是什么

①也是个对象,这个对象里有事件触发时的相关信息 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息

2.如何获取

①在事件绑定的回调函数的第一个参数就是事件对象 ②一般命名为event、ev、e

3.语法

元素.addEventListener("click",function(e){

})

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>02-事件对象.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <button>点击点击</button>
    <script>
      // 获取按钮
      const btn = document.querySelector("button");

      btn.addEventListener("click", function (event) {
        console.log(event); // 存放事件触发一瞬间的信息 -  鼠标位置信息
      });
    </script>
  </body>
</html>

4.事件对象常见属性

1.type:获取当前的事件类型

2.clientX/clientY:获取光标相对于浏览器可见窗口左上角的位置

3.offsetX/offsetY:获取光标相对于当前dom元素左上角的位置

4.key:获取用户安夏的键盘值,现在不提倡使用keyCode

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>03-事件对象-常见属性</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      div {
        width: 300px;
        height: 400px;
        background-color: aqua;
        margin-left: 300px;
      }
    </style>
  </head>
  <body>
    <div>点击点击</div>
    <script>
      // 获取按钮
      const btn = document.querySelector("div");

      btn.addEventListener("mousemove", function (event) {
        // console.log(event.type); // 输出当前的事件类型  少用
        // console.log(event.clientX,event.clientY ); // 返回 鼠标的位置-参照物 页面的左上角即可
        console.log(event.offsetX, event.offsetY); // 返回鼠标的坐标,参照物 是被点击的元素的左上角
      });
    </script>
  </body>
</html>

三、图片跟随案例

1 给body标签 绑定 鼠标移动事件  
body也是一个普通的块级元素 高度由内容撑开 同时 div使用了定位-脱标 body标签没有高度 
2 事件触发了 获取 事件对象的坐标 clientX clientY
document.body.addEventListener("mousemove", function (event) {
const left = event.clientX;
const top = event.clientY;
3 把坐标设置给div的left top
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body {
        width: 900px;
        height: 900px;
      }
      img {
        position: fixed;
        transform: translate(-50%, -50%);
        cursor: none;
      }
    </style>
  </head>
  <body>
    <img src="./images/bird.png" width="60px" />
    <script>
      const img = document.querySelector("img");
      document.body.addEventListener("click", function () {
        document.body.addEventListener("mousemove", function (event) {
          const left = event.clientX;
          const top = event.clientY;

          img.style.left = left + "px";
          img.style.top = top + "px";
        });
      });
    </script>
  </body>
</html>

四、键盘案例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>05-键盘按键.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <script>
      // 给body标签 绑定 键盘按下事件 keydown
      document.body.addEventListener("keydown", function (event) {
        console.log(event.key); // 当下按下的按键 !
      });
    </script>
  </body>
</html>

五、微博发布案例(新增enter键 发布或绑定按钮)

1.关键代码部分

 // 判断一下当前的文本域的内容 是不是空字符串
        if (area.value.trim() === '') {
          console.log('返回不再往下执行');
          return;
        }


 area.addEventListener('keydown', function (event) {
        // 判断按键是不是回车键
        if (event.key === 'Enter') {
          // console.log("执行和按钮一样的功能");

          // 给btn按钮绑定过点击事件,点击事件也是可以主动触发
          btn.click(); // 你点击了一下按钮


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>06-微博发布.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <a href="http://www.baidu.com"></a>
    <textarea id="area"></textarea>
    <button>发布</button>
    <ul></ul>
    <script>
      /* 
      步骤
      1 给发布按钮 绑定点击事件
        1 获取文本域的内容 
        2 拼接到一个新创建的li标签中
        3 把新创建的li标签插入到ul中

      2 给文本域 绑定键盘按下事件

        按下键盘之后  先判断当下按下的是不是回车  也去执行点击按钮的工作 即可 
       */
      const btn = document.querySelector('button');
      const area = document.querySelector('#area');
      const ul = document.querySelector('ul');

      btn.addEventListener('click', function (event) {
        // 判断一下当前的文本域的内容 是不是空字符串
        if (area.value.trim() === '') {
          console.log('返回不再往下执行');
          return;
        }

        // area.value
        const li = document.createElement('li');
        li.innerText = area.value;
        ul.appendChild(li);
      });

      area.addEventListener('keydown', function (event) {
        // 判断按键是不是回车键
        if (event.key === 'Enter') {
          // console.log("执行和按钮一样的功能");

          // 给btn按钮绑定过点击事件,点击事件也是可以主动触发
          btn.click(); // 你点击了一下按钮

          // 解决按下回车 文本换行的效果
          // 文本域的默认的行为
          // 处理标签的默认行为
          // return false
          event.preventDefault(); // 阻止浏览器标签的默认行为  阻止a标签默认跳转行为
        }
      });

      document.querySelector('a').addEventListener('click', function (e) {
        e.preventDefault(); // 阻止a标签的默认 跳转行为
      });
    </script>
  </body>
</html>