主頁 > 軟體設計 > Web前端開發工程師知識體系_34_JavaScript jQuery(四)

Web前端開發工程師知識體系_34_JavaScript jQuery(四)

2021-10-09 08:52:36 軟體設計

一、影片

1.簡單影片

$元素.show()

$元素.hide()

$元素.toggle()

顯示隱藏

$元素.slideUp()

$元素.slideDown()

$元素.slideToggle()

上滑下滑

$元素.fadeIn()

$元素.fadeOut()

$元素.fadeToggle()

淡入淡出

舉例:

<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是一致的,

舉例如下:


補充:this 7種

判斷this,一定不要看定義在哪兒,只看在哪里如何呼叫

(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物件,
  }

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306469.html

標籤:其他

上一篇:selenium--面試官問元素定位不到怎么辦?作業中還在為元素定位不到而煩惱?看這一文就夠了--內附決議跟代碼解決案例!讓面試官對你刮目相看

下一篇:假期結束-8種對快速排序等演算法的優化重燃你學習的欲望

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more