jQuery(四)动画、类数组对象操作、添加自定义函数、封装自定义插件

简介: jQuery(四)动画、类数组对象操作、添加自定义函数、封装自定义插件

一、动画

1. 简单动画

image.png

举例:


<body>
  <h1>jQuery动画函数——显示隐藏动画</h1>
  <button id="btn1">显示/隐藏div</button>
  <div id="target">
    <p><span>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</span></p>
  </div>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //点按钮,执行简单动画效果
    $("#btn1").click(function () {
      $("#target").fadeToggle();
    })
  </script>
</body>

举例:显示隐藏部分品牌;


<body>
  <ul id="list">
    <li>0尼康(234)</li>
    <li>1佳能(22)</li>
    <li>2索尼(932)</li>
    <li>3宾得(11)</li>
    <li>4爱国者(3234)</li>
    <li>5欧巴(32)</li>
    <li>6海鸥(2334)</li>
    <li>7卡西欧(334)</li>
    <li>8三星(834)</li>
    <li>9松下(234)</li>
    <li>10其它品牌(2343)</li>
  </ul>
  <button data-toggle="brandlist">收起</button>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //DOM 4步
    //1. 查找触发事件的元素
    // 点击按钮触发事件
    $("button")
      //2. 绑定事件处理函数
      .click(function () {
        //3. 查找要修改的元素
        $("li:gt(4):not(:last-child)").toggle()
        //4. 修改元素
        var $this = $(this)
        if ($this.html() === "收起") {
          $this.html("更多")
        } else {
          $this.html("收起")
        }
      })
  </script>
</body>

2. 万能动画

       能对多种 css 属性应用动画效果,但只支持单个数值的 css 属性,不支持颜色过渡和 css3 变换。


//启动动画
$元素.animate({
   css属性名: 目标值
},持续时间ms)
//停止动画
$元素.stop()

举例:


<body>
  <h1>animate</h1>
  <button id="btn1">启动动画</button>
  <div id="d1">abcd</div>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
  //点按钮,对任意一个css属性,应用动画效果
  $("#btn1").click(function () {
    $("#d1").animate({
    top: 500,
    left: 300,
    width: 500,
    height: 300,
    borderRadius: 150
    }, 2000)
  })
  </script>
</body>

3. 排队和并发

(1)排队:多个 css 属性先后依次变化;同一个元素,先后调用多个 animate 时,多个 animate 中的 css 属性会排队变化。


(2)并发:多个 css 属性同时变化,放在一个 animate 中的多个 css 属性默认同时变化。


4. 选择器

:animated  //专门匹配正在播放animate动画

5. 停止动画

$元素.stop() //默认停止当前一个animate动画,动画队列中后续animate继续执行
$元素.stop(true) //既停止当前animate,又清空后续动画队列

6. 动画播放后,自动执行

       animate()还有第三个实参值——回调函数,凡是放在animate()中第三回调函数参数中的代码,只能在动画结束后自动执行。格式如下:


$元素.animate(
    { css属性: 目标值 },
    动画持续时间,
    function(){ ... }  //第三回调函数
  );

举例:点星星,播放动画;


<body>
  <img id="s1" src="imgs/star.png"><br />
  <img id="s2" src="imgs/star.png"><br />
  <img id="s3" src="imgs/star.png"><br />
  <img id="s4" src="imgs/star.png"><br />
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //s1在屏幕左上角的小星星, 点击后从左移动到屏幕右边
    $("#s1").click(function () {
      var $this = $(this)
      // 如果动画正在执行,则让他停止
      if ($this.is(":animated")) {
        $this.stop()
        // 否则执行
      } else {
        $(this).animate({
          left: 400
        })
      }
    });
    //s2在屏幕左上角的小星星,点击后从左移动到屏幕右边,再移动到下边——走直角
    $("#s2").click(function () {
      var $this = $(this)
      if ($this.is(":animated")) {
        $this.stop(true);
      } else {
        $(this).animate({
          left: 400
        }).animate({
          top: 400
        })
      }
    })
    //s3在屏幕左上角的小星星,点击后从左上角移动到屏幕右下边,走斜线
    $("#s3").click(function () {
      $(this).animate({
        left: 400,
        top: 400
      })
    })
    //s4点击小星星,变大、变淡....  直至消失
    $("#s4").click(function () {
      alert("123456");
      $(this).animate({
          width: 175,
          opacity: 0
        }, 5000,
        function () {
          alert(`我是第三回调函数中的代码,最后执行`);
        }
      )
    })
  </script>
</body>

二、类数组对象操作

1. 遍历

//js数组 
arr.forEach(function(当前元素, 当前下标, 当前数组){ })
//jQuery
$jQuery查找结果.each(function(当前下标, 当前DOM元素){ })

举例:遍历找到的每个元素,并执行相关操作;


<body>
  <ul id="list">
    <li>98</li>
    <li>85</li>
    <li>33</li>
    <li>99</li>
    <li>52</li>
  </ul>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //请给每个不足60分的成绩+10分,并将超过90分的成绩用绿色背景标识出来
    $("ul>li").each(function (i, li) {
      var $li = $(li);
      // 获取当前元素的内容
      var n = parseInt($li.html());
      if (n < 60) {
        $li.html(n + 10)
      } else if (n >= 90) {
        $li.css("background-color", "green")
      }
    })
  </script>
</body>

2. 查找

//js数组
var i=arr.indexOf(要找的元素值);
//在数组arr中查找"要找的元素值"出现的下标位置i,如果没找到,返回-1
//jQuery
var i=$jq查找结果.index(要找的DOM元素)

举例:五星评价;


<body>
  <h3>请打分</h3>
  <ul class="score">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //获得当前单击的li在所有li中的位置i,i及其执行的都变为红色,i之后的都变为白色
    //DOM 4步
    //1. 查找触发事件的元素
    $("ul")
      //2. 绑定事件处理函数
      .click(function (e) {
        //e.target代替this
        var $tar = $(e.target)
        //只有点在li上才能触发事件
        if ($tar.is("li")) {
          var i = $("ul>li").index($tar);
          $(`ul>li:lt(${i+1})`)
            .css("background-color", "yellow");
          //让>i位置的所有li背景变为白色
          $(`ul>li:gt(${i})`)
            .css("background-color", "#fff");
        }
      })
    //3. 查找要修改的元素
    //4. 修改元素
  </script>
</body>

三、添加自定义函数

       如果经常使用的一个功能,jquery 中没有提供,就可以自定义函数加入到 jquery。格式:


//向jquery原型对象中添加一个自定义函数
jQuery.prototype.自定义函数=function(){ }
//使用自定义函数
$查找结果.自定义函数()

举例:封装自定义函数,对找到的所有元素内容求和;


<body>
  <ul>
    <li>85</li>
    <li>91</li>
    <li>73</li>
    <li>59</li>
  </ul>
  <script src="js/jquery-1.11.3.js"></script>
  <script>
    //假设在项目中经常需要对找到的所有元素求和
    // 自定义函数
    jQuery.prototype.sum = function () {
      // 定义初始化值
      var result = 0;
      // 遍历数组中的元素值
      for (var i = 0; i < this.length; i++) {
        // 将当前元素累加到初始化值上
        result += parseInt(this[i].innerHTML);
      }
      return result;
    }
    // 调用自定义函数
    console.log($("ul>li").sum());
  </script>
</body>

四、封装自定义插件

       自定义插件是页面中一块可反复使用的独立的功能区域,只要页面中一块独立的功能区域,可能被反复使用时,都要封装为插件,然后再反复使用插件。


       jQuery 官方插件库 jqueryui,在 jQueryui官网 下载即可;下载后引入插件库的文件:


<link rel="stylesheet" href="css/jquery-ui.css"> //1
<script src="js/jquery-1.11.3.js"> //2
<script src="js/jquery-ui.js"> //3
//注意2、3顺序不可颠倒

插件的使用:


       a. 按照插件要求,自行编写 HTML 内容和结构,不要加任何 class;


       b. 用$("选择器")查找插件的父元素,对插件父元素调用 jquery ui 提供的专门的插件函数。


举例:用 jquery ui 快速生成手风琴;


<head>
  <title> new document </title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="css/jquery-ui.css">
  <script src="js/jquery-1.11.3.js"></script>
  <script src="js/jquery-ui.js"></script>
</head>
<body>
  <h1>jQueryUI:Widgets —— Accordion</h1>
  <div id="my">
  <div>《西游记》简介</div>
  <div>一个和尚和四个动物的故事</div>
  <div>《水浒传》简介</div>
  <div>105个男人和三个女人的故事</div>
  <div>《红楼梦》简介</div>
  <div>一个男人和一群女人的故事</div>
  </div>
  <script>
        // 调用accordion
  $("#my").accordion();
  </script>
</body>

除了使用 jQuery 的官方插件库,我们也可以自定义插件:


       a. 将原页面中插件相关的 css 代码提取到一个独立的 css 文件中保存;


       b. 在独立的js中,向 jQuery 的原型对象中添加一个自定义的插件函数;


jQuery.prototype.自定义插件函数=function(){ }

自定义之后的调用与 jQuery ui 是一致的。


举例如下:

image.png

image.png

image.png


补充:this 7种


(1)obj.fun()  fun中的this指 .前的obj对象(谁调用指谁);


(2)new Fun()  Fun中的this指new创建的新对象;


(3)fun() 或 (function(){ ... })() 或 回调函数 thisz默认指windozw;


(4)原型对象(prototype)中的this指将来调用这个共有函数的.前的某个子对象(谁调用指谁);


(5)访问器属性中的this指代访问器属性所在的当前对象;


(6)DOM和jq中事件处理函数中的this指正在触发事件的当前DOM元素对象;


(7)在jQuery自定义函数中:


jQuery.prototype.共有方法=function(){ 
   //this指将来调用这个共有方法的.前的$(...)jq对象。
  }
相关文章
|
2月前
|
JavaScript
jQuery 树型菜单插件(Treeview)
jQuery 树型菜单插件(Treeview)
64 2
|
2月前
|
JavaScript 前端开发 UED
jQuery 动画
【10月更文挑战第8天】
113 55
|
18天前
|
JavaScript
jQuery实现弹窗消息提示特效插件
这是一个简单的jQuery弹窗消息提示插件,用于网站用户操作提示。包含默认、成功、失败、警告、提示弹窗等不同形式弹出的消息提示效果,轻量简单,欢迎下载!
25 4
|
2月前
|
JavaScript 前端开发
jQuery Growl 插件(消息提醒)
jQuery Growl 插件(消息提醒)
58 4
jQuery Growl 插件(消息提醒)
|
2月前
|
存储 JSON JavaScript
jQuery Cookie 插件
jQuery Cookie 插件
49 4
jQuery Cookie 插件
|
1月前
|
JavaScript 定位技术
jQuery鹰眼视图小地图定位预览插件minimap.js
这是一个jQuery小地图定位预览视图,默认左侧是页面主要内容,minimap.js的好处就是在它的右侧形成一个快速定位通道,产生一个缩小版的页面,即预览效果,可以点击并快速定位到页面的某个位置。简单实用,欢迎下载!
31 0
|
3月前
|
JavaScript
jQuery 停止动画
jQuery 停止动画
24 4
|
3月前
|
JavaScript 前端开发
jQuery - 获取并设置 CSS 类
jQuery - 获取并设置 CSS 类
18 1
|
3月前
|
缓存 JavaScript 前端开发
jQuery 效果- 动画
jQuery 效果- 动画
31 4
|
3月前
|
JavaScript 前端开发
jQuery 效果- 动画
jQuery 效果- 动画
45 11