jQuery - 第2天

学习并掌握 jQuery 中丰富的实例方法,能够基于 jQuery 实现元素节点的操作、位置和大小的计算以及动画等网页交互。

  • 能够在任意位置动态插入新元素节点
  • 能够删除和复制元素节点
  • 掌握 jQuery 中事件委托的使用方法
  • 能够动态获取元素节点的位置及大小
  • 能够为元素设置动画效果

元素节点

学习 jQuery 中与文档操作相关的实例方法,能够灵活快捷的实现文档插入、删除、复制、替换的操作。

插入

jQuery 中封装了在指定位置动态插入元素节点的方法,其用法如下代码所示:

  1. <script>
  2. // 待插入的元素节点
  3. let tr = $(`
  4. <tr>
  5. <td>学员</td>
  6. <td>17</td>
  7. <td>女</td>
  8. <td>13632369876</td>
  9. <td>
  10. <button class="btn btn-xs btn-info edit">编辑</button>
  11. <button class="btn btn-xs btn-danger delete">删除</button>
  12. </td>
  13. </tr>
  14. `);
  15. // 1. 参照父元素的位置插入
  16. $('tbody').append(tr);
  17. $('tbody').prepend(tr);
  18. // 2. 参照兄弟元素的位置插入
  19. $('tbody').eq(2).after(tr);
  20. $('tbody').eq(3).before(tr);
  21. </script>

总结:

  1. appendprepend 以父元素为参考分别在结尾处和开头处插入新的元素节点
  2. afterbefore 以当前元素为参考在之前或之后插入新的元素节点
  3. appendprependafterbefore 均支持直接将 html 字符串做为节点插入

删除

jQuery 中封装了动态删除元素节点的方法,其用法如下代码所示:

  1. <script>
  2. // 删除li元素
  3. $(this).parents('tr').remove();
  4. </script>

总结:

  1. remove 方法删除的是当前调用方法的元素节点

复制

jQuery 中封装了复制(克隆)元素节点的方法,其用法如下代码所示:

  1. <script>
  2. // 通过复制获得新的节点
  3. $(this).parents('tr').clone(true);
  4. </script>

总结:

  1. clone 方法复制得到的元素节点仍是 jQuery 对象
  2. 待复制的节点中如果有事件监听,需要为 clone 方法传入参数 true

事件委托

jQuery 中封装了事件委托的支持,其用法如下代码所示:

  1. // on方式: 可以有事件委托语法: bind是没有!
  2. //父级计对象.on(事件类型,要指定子元素的CSS选择器,执行函数)
  3. // 内部封装:帮助我们完成比对!
  4. // 以前:给每个按钮添加事件监听;
  5. // 今天: 事件委托!遇到一堆按钮都要添加同样的事件类型,应该使用事件委托!
  6. /* $("tbody").on("click", ".delete", function () {
  7. $(this).parents("tr").remove()
  8. }) */
  9. // 或者使用
  10. $('table').delegate('.delete', 'click', function () {
  11. $(this).parents('tr').remove();
  12. })
  13. $(".add").on("click", function () {
  14. let tr = $(
  15. `<tr>
  16. <td>小网</td>
  17. <td>19</td>
  18. <td>男</td>
  19. <td>13632369876</td>
  20. <td>
  21. <button class="btn btn-xs btn-info">编辑</button>
  22. <button class="btn btn-xs btn-danger delete">删除</button>
  23. </td>
  24. </tr>`
  25. )
  26. $("tbody").append(tr)
  27. })

总结:

  1. 事件委托需要为某个在 DOM 中已经存在的祖先元素添加事件监听
  2. delegate 方法是 jQuery 中专门的事件委托的方法
  3. on 方法中也内置支持事件委托,推荐使用 on 方法

位置和尺寸

学习 jQuery 中与位置和大小相关的实例方法,能够获取元素在不同场景中的尺寸与位置。

位置

jQuery 对获取元素位置进行了封装,使得在不同场景中获取元素位置十分方便,其用法如下代码所示:

  1. <script>
  2. // 获取参照 html 文档的位置
  3. $('.box').offset();
  4. // 获取参照最近的已定位祖先元素位置
  5. $('.box').position();
  6. // 获取子元素滚动的距离
  7. $('.outer').scrollTop();
  8. $('.outer').scrollLeft();
  9. </script>

总结:

  1. offset 方法获取元素参照 html 文档的位置,无论该元素是否采用了定位
    1. // 获取元素位置:
    2. // webapi: 找定位原点
    3. let box = document.querySelector(".box")
    4. console.log(box.offsetTop, box.offsetLeft); //10 80
  1. position 方法获取元素参照最近的已定位的祖先元素的位置
    1. // JQ.position();
    2. // 返回结果: 对象 找定位父级(上级父级有定位,就是定位父级: 如果没有定位,继续往上找,直到找到body) 为原点
    3. console.log($(".box").position()) //Object 80 100
  1. scrollTop/scrollLeft 方法获取子元素滚动的位置(距离)

了解一个细节:offset 计算位置时会忽略外边距(margin),而 position 计算位置时则以外边距(margin)为边界

尺寸

jQuery 对获取元素尺寸进行了封装,使得在不同场景中获取元素尺寸十分方便,其用法如下代码所示:

  1. <script>
  2. // 只包含内容区域尺寸大小
  3. $('.box').width();
  4. $('.box').height();
  5. // 包括内容区域 + 内边距尺寸大小
  6. $('.box').innerWidth();
  7. $('.box').innerHeight();
  8. // 包括内容区域 + 内边距 + 边框尺寸大小
  9. $('.box').outerWidth();
  10. $('.box').outerHeight();
  11. </script>

总结:

  1. width/height 方法获取元素尺寸大小时只包括盒子模型中的内容区域
  2. innerWidth/innerHeight 方法获取元素尺寸大小时包括盒子模型中的内容区域 + 内边距
  3. outerWidth/outerHeight 方法获取元素尺寸大小时包括盒子模型中的内容区域 + 内边距 + 边框

注:outerWidth/outerHeight 方法传入参数值 true 获取元素尺寸大小包括内容区域 + 内边框 + 边框 + 外边距

动画

学习 jQuery 中与动画相关的实例方法,能够为元素添加动画效果增强用户体验。

基础动画

jQuery 中封装了元素显示/隐藏的快捷操作并且支持动画形式的交互效果,主要有以下几种用法:

3显示/隐藏

  1. <script>
  2. // 设置盒子显示
  3. $('.box').show();
  4. // 设置盒子隐藏
  5. $('.box').hide();
  6. // 设置盒子显示/隐藏
  7. $('.box').toggle();
  8. </script>

总结:

  1. show 方法设置元素显示,实质是设置元素样式 display: block
  2. hide 方法设置元素隐藏,实质是设置元素样式 display: none
  3. toggle 方法交替设置元素显示/隐藏
  4. showhidetoggle 方法均可以接收时间(毫秒)做为参数,此时将产生动画效果

淡入/淡出

  1. <script>
  2. // 设置盒子显示
  3. $('.box').fadeIn();
  4. // 设置盒子隐藏
  5. $('.box').fadeOut();
  6. // 设置盒子显示/隐藏
  7. $('.box').fadeToggle();
  8. </script>

总结:

  1. fadeIn 方法设置元素显示,实质是设置元素样式 opacity: 1; display: block;
  2. fadeOut 方法设置元素隐藏,实质是设置元素样式 opacity: 0; display: none
  3. fadeToggle 方法交替设置元素显示/隐藏
  4. fadeInfadeOutfadeToggle 方法默认支持动画效果,接收时间(毫秒)做为参数时能够控制动画执行的速度

展开/折叠

  1. <script>
  2. // 设置盒子显示
  3. $('.box').slideDown();
  4. // 设置盒子隐藏
  5. $('.box').slideUp();
  6. // 设置盒子显示/隐藏
  7. $('.box').slideToggle();
  8. </script>

总结:

  1. slideUp 方法设置元素隐藏,实质上设置元素的宽高和内外边距以及 overflow: hidden
  2. slideDown 方法设置元素显示,实质上设置元素的宽高和内外边距
  3. slideToggle 方法交替设置元素的显示/隐藏
  4. slideUpslideDownslideToggle 方法默认支持动画效果,接收时间(毫秒)做为参数时能够控制动画执行的速度

自定义

jQuery 中提供的基础动画主要是针对元素的显示/隐藏展开的,不仅如此 jQuery 还提供了 animate 方法支持开发者自定义更为丰富的动画效果,其用法如下代码所示:

  1. <script>
  2. // 自定义动画
  3. $('.box').animate({
  4. marginLeft: 200,
  5. width: 300,
  6. height: 200,
  7. backgroundColor: 'red'
  8. }, 2000)
  9. </script>

总结:

  1. animate 方法支持开发者自定义 CSS 动画样式,并控制动画执行的速度
  2. animate 只支持值为数值的 CSS 样式,默认以 px 为长度单位

其它

延时设置

jQuery 不仅可以设置动画执行的速度,还能在动画执行前设置一定的延时,其用法代下代码所示:

  1. <script>
  2. // 等待 1500 毫秒后再隐藏
  3. $('.box').delay(1500).hide();
  4. // 选改变盒子宽度为 400px 等待 1000 毫秒后再改变盒子的高度为 200px
  5. $('.box').animate({width: 400}, 500).delay(15000).animate({height: 200}, 500);
  6. </script>

总结:

  1. delay 方法常用来设置动画的延时执行,接受时间(毫秒)做为参数

终止动画

  1. <script>
  2. // 只传一个 true 时,为 中止
  3. $('.box').stop(true);
  4. // 传入两个 true 时,为 终止
  5. $('.box').stop(true, true);
  6. </script>

总结:

  1. stop 只传一个 true 时,为中止
  2. stop 传入两个 true 时,为终止

回调函数

所有的 jQuery 动画方法都支持传入回调函数,该函数会在动画执行结束时立即执行,其用法如下代码所示:

  1. <script>
  2. $('.box').fadeOut(500, function () {
  3. // 回调函数会在动画执行结束时被调用
  4. // 引入的 this 指向了执行动画的元素节点
  5. $(this).remove();
  6. })
  7. </script>

总结:

  1. 回调函数在动画执行结束时被执行,回调函数中的 this 指向执行动画的元素节点x