主頁 > 前端設計 > 4.事件及影片

4.事件及影片

2021-08-21 08:24:15 前端設計

鍵盤事件

keydown([[data],fn])

描述: 為 “keydown” 鍵盤按下時觸發 事件系結一個處理函式,或者觸發元素上的 “keydown” 事件,
語法

  • .keydown( handler(eventObject) )
$('#target').keydown(function() {
  alert('Handler for .keydown() called.');
});
  • .keydown( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').keydown({msg:'hello'},function(event) {
  alert('Handler for .keydown() called.' + event.data.msg);
});
  • .keydown() 這個方法不接受任何引數出發元素的"keydown"事件
$('#other').click(function() {
  $('#outer').keydown();
});

keypress([[data],fn])

描述: 為 “keypress” 事件系結一個處理函式,或者觸發元素上的 “keypress” 事件,
注意:由于keypress事件沒有統一的官方規范說明,所以在不同的瀏覽器,不同的瀏覽器版本,和不同的平臺實際使用這個事件時可能遇到的問題,

當瀏覽器捕獲一個元素上鍵盤輸入時,keypress就會發送個元素,這是類似keydown事件,除了當按鍵被一直按下(即連續插入字符的場合)時的處理,如果用戶按下并按住這個鍵(不松開釋放)的時候,keydown事件只觸發一次,但是keypress會在每個字符插入的時候都會觸發事件,此外,組合鍵(如Shift)會觸發keydown事件,但不會觸發keypress事件,

keypress事件處理程式可以附加到任何元素,但該事件只是發送到具有焦點的元素上,不同的瀏覽器中,可獲得焦點的元素略有不同,但是表單元素總是能獲取焦點,所以對于此事件型別表單元素是最合適的,

值得注意的是keydown 和 keyup提供一個代碼,表示哪一個鍵被按下,而keypress表示被輸入哪個字符,例如,按下了小寫的 “a”,在 keydown和keyup 中,對應該鍵的代碼是 65,但是對于 keypress 而言,接收到的代碼是 97,如果是大寫 “A” 的話,則所有的相關事件接收到的代碼都是 65,由于這個區別,若想捕獲敲擊了哪個特殊鍵的話,例如,方向鍵,使用 .keydown()或.keyup() 更好,

語法

  • .keypress( handler(eventObject) )
$("#target").keypress(function() {
  alert("Handler for .keypress() called.");
});
  • .keypress( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').keypress({msg:'hello'},function(event) {
  alert('Handler for .keypress() called.' + event.data.msg);
});
  • .keypress() 這個方法不接受任何引數出發元素的"keypress"事件
$('#other').click(function() {
  $('#outer').keypress();
});

keyup([[data],fn]) 發

描述: 為 JavaScript 的"keyup" 事件系結一個處理器,或者觸發元素上的 “keyup” 事件,
語法

  • .keyup( handler(eventObject) )
$('#target').keyup(function() {
  alert('Handler for .keyup() called.');
});
  • .keyup( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').keyup({msg:'hello'},function(event) {
  alert('Handler for .keyup() called.' + event.data.msg);
});
  • .keyup() 這個方法不接受任何引數出發元素的"keyup"事件
$('#other').click(function() {
  $('#target').keyup();
});

「課堂練習」

使用jQuery實作聊天框功能

聊天框練習.gif
要求:

  1. 創建一個上圖所示的聊天框
  2. 實作點擊發送或按下快捷鍵ctrl+enter將輸入框中的文本內容以聊天氣泡的形式添加到頁面上
  3. 在發送訊息時,如果表單內容為空則不回應發送事件

表單事件

.blur([[data],fn])

描述: 為 “blur” 事件系結一個處理函式,或者觸發元素上的 “blur” 事件,此事件不支持冒泡,
語法

  • .blur( handler(eventObject) )
$('#target').blur(function() {
  alert('Handler for .blur() called.');
});
  • .blur( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').blur({msg:'hello'},function(event) {
  alert('Handler for .blur() called.' + event.data.msg);
});
  • .blur() 這個方法不接受任何引數出發元素的"blur"事件
$('#other').click(function() {
  $('#target').blur();
});

.focus([[data],fn])

描述: 為 JavaScript 的"focus" 事件系結一個處理器,或者觸發元素上的 “focus” 事件,
語法

  • .focus( handler(eventObject) )
$('#target').focus(function() {
  alert('Handler for .focus() called.');
});
  • .focus( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').focus({msg:'hello'},function(event) {
  alert('Handler for .focus() called.' + event.data.msg);
});
  • .focus() 這個方法不接受任何引數出發元素的"focus"事件
$('#other').click(function() {
  $('#outer').focus();
});

.change([[data],fn])

描述: 為 JavaScript 的"change" 事件系結一個處理器,或者觸發元素上的 “change” 事件,

一個元素的值改變的時候將觸發change事件,此事件僅限用于<input>元素,<textarea><select>元素,對于下拉選擇框,復選框和單選按鈕,當用戶用滑鼠作出選擇,該事件立即觸發,但對于其他型別的input元素,該事件觸發將推遲,直到元素失去焦點才會觸點,
語法

  • .change( handler(eventObject) )
$('.target').change(function() {
  alert('Handler for .change() called.');
});
  • .change( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').change({msg:'hello'},function(event) {
  alert('Handler for .change() called.' + event.data.msg);
});
  • .change() 這個方法不接受任何引數出發元素的"change"事件
$('#other').click(function() {
  $('.target').change();
});

.submit([[data],fn])

描述: 為 JavaScript 的 “submit” 事件系結一個處理函式,或者觸發元素上的該事件,

它只能系結在<form>元素上,以下幾種情況會導致表單被提交:用戶點擊了<input type="submit">, <input type="image">, 或者 <button type="submit">,或者當某些表單元素獲取焦點時,都可以提交,

語法

  • .submit( handler(eventObject) )
$('#target').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});
  • .submit( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').submit({msg:'hello'},function(event) {
  alert('Handler for .submit() called.' + event.data.msg);
  return false;
});
  • .submit() 這個方法不接受任何引數出發元素的"submit"事件
$('#other').click(function() {
  $('#target').submit();
});

其他事件

.resize([[data],fn])

描述: 為 JavaScript 的"resize" 事件系結一個處理器,或者觸發元素上的事件,當瀏覽器window的尺寸改變時,window元素上系結的resize事件將被觸發,

注意:resize 事件處理中的代碼,不應該依賴于事件被呼叫的次數,由于不同瀏覽器對該事件實作的方式不同,該事件被呼叫的時機也不同,例如,對于 Internet Explorer 或 基于 WebKit 的瀏覽器(例如,Safari 和 Chrome)而言,resize 事件在視窗改變的程序中,會被連續呼叫,在某些瀏覽器,如 Opera,該事件只在調整視窗大小操作結束時被呼叫,
語法

  • .resize( handler(eventObject) )
$(window).resize(function() {
  $('#log').append('<div>Handler for .resize() called.</div>');
});
  • .resize( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('window').resize({msg:'hello'},function(event) {
  $('body').prepend('<div>' + event.data.msg + $(window).width() + '</div>');
});
  • .resize() 這個方法不接受任何引數出發元素的"resize"事件
$('#other').click(function() {
  $('window').resize();
});

.scroll([[data],fn])

描述: 為 JavaScript 的 “scroll” 事件系結一個處理函式,或者觸發元素上的該事件,

當用戶在元素內執行了滾動操作,就會在這個元素上觸發scroll事件,它適用于window物件,但也可以是可滾動frames與CSS overflow屬性設定為scroll的元素(或auto時,元素的顯示高度小于其內容高度),

語法

  • .scroll( handler(eventObject) )
$('#target').scroll(function() {
  $('#log').append('<div>Handler for .scroll() called.</div>');
});
  • .scroll( [eventData ], handler(eventObject) ) 可以接受兩個引數:
    1. 引數一:一個包含鍵值對映射物件將被傳遞給事件處理程式,
    2. 引數二:每次事件觸發時會執行的函式,函式接受event事件物件作為引數,
$('#target').scroll({msg:'hello'},function(event) {
  $('#log').append('<div>' + event.data.msg + 'Handler for .scroll() called.</div>');
});
  • .scroll() 這個方法不接受任何引數出發元素的"scroll"事件
$('#other').click(function() {
  $('#outer').scroll();
});

「課堂練習」

使用jQuery實作滾動導航

滾動導航條.gif
要求:

  1. 創建一個上圖所示的滾動導航條
  2. 當滾動到一定距離時,顯示導航條
  3. 當滾動到樓層對應位置時,高亮顯示導航條對應樓層,并顯示樓層標題文字
  4. 點擊導航條,滾動到相應的樓層(使用jQuery的.scrollTop()API)
  5. 點擊導航條Top按鈕回傳頁面頂部
    部分代碼:
	<body>
		<div id="listNav">
			<ul>
				<li class="hover">1F <span>服飾</span> </li>
				<li>2F <span>美妝</span> </li>
				<li>3F <span>手機</span> </li>
				<li>4F <span>家電</span> </li>
				<li>5F <span>數碼</span> </li>
				<li>6F <span>運動</span> </li>
				<li>7F <span>居家</span> </li>
				<li>8F <span>母嬰</span> </li>
				<li>9F <span>食品</span> </li>
				<li>10F <span>圖書</span> </li>
				<li>11F <span>服務</span> </li>
				<li class="last">Top</li>
			</ul>
		</div>

		<!--樓層內容開始-->

		<div id="header">
			推薦
		</div>
		<div id="main">
			<div class="list" style="background: #cc0033;">
				服飾
			</div>
			<div class="list" style="background: #999933;">
				美妝
			</div>
			<div class="list" style="background: #ccff33;">
				手機
			</div>
			<div class="list" style="background: #006633;">
				家電
			</div>
			<div class="list" style="background: #6666cc;">
				數碼
			</div>
			<div class="list" style="background: #ff6600;">
				運動
			</div>
			<div class="list" style="background: #ffff00;">
				居家
			</div>
			<div class="list" style="background: #3333ff;">
				母嬰
			</div>
			<div class="list" style="background: #ff00cc;">
				食品
			</div>
			<div class="list" style="background: #669900;">
				圖書
			</div>
			<div class="list" style="background: #ff66cc;">
				服務
			</div>

		</div>
		<div id="footer">

		</div>
	

	</body>

jquery事件系結與移除

.on()

概念:在選定的元素上系結一個或多個事件處理函式,
語法

  • .on( events [, selector ] [, data ], handler(eventObject) )

    1. events 一個或多個空格分隔的事件型別和可選的命名空間,或僅僅是命名空間,比如"click", “keydown.myPlugin”, 或者 “.myPlugin”,
    2. selector 一個選擇器字串,用于過濾出被選中的元素中能觸發事件的后代元素,如果選擇器是 null 或者忽略了該選擇器,那么被選中的元素總是能觸發事件,
    3. data 當事件被觸發時,傳遞給事件處理函式的event.data,
    4. handler(eventObject) 事件被觸發時,執行的函式,若該函式只是要執行return false的話,那么該引數位置可以直接簡寫成 false,

    呼叫event.stopPropagation() (阻止冒泡)和 event.preventDefault() (阻止瀏覽器默認行為)會從一個事件處理程式會自動回傳false,也可以直接將 false 當作 handler 的引數,作為 function(){ return false; } (兩者一起阻止) 的簡寫形式,因此,下面的寫法

$("#dataTable tbody tr").on("click", function(event){
  alert($(this).text());
});

// 阻止所有含有 "disabled" 樣式的鏈接的默認行為,并阻止該事件上的冒泡行為,
$("a.disabled").on("click", false); 

$("#dataTable tbody").on("click", "tr", function(event){
  alert($(this).text());
});

// 將資料傳遞到處理程式
function greet(event) { alert("Hello "+event.data.name); }
$("button").on("click", { name: "Karl" }, greet);
$("button").on("click", { name: "Addy" }, greet);
  • .on( events [, selector ] [, data ] )
    1. events 一個物件,鍵是由一個或多個由空格分隔的事件型別及可選的名字空間,值是這些事件型別所對應的事件處理函式,
    2. selector 一個選擇器字串
    3. data 傳遞給事件處理函式的event.data
$("div.test").on({
  click: function(){
    $(this).toggleClass("active");
  },
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});

.off()

概念:方法移除用.on()系結的事件處理程式,
語法

  • .off( events [, selector ] [, handler(eventObject) ] )
    1. events 一個或多個空格分隔的事件型別和可選的命名空間,或僅僅是命名空間,比如"click", “keydown.myPlugin”, 或者 “.myPlugin”,
    2. selector 一個選擇器,當系結事件處理程式時最初傳遞給 .on()的那個,
    3. handler(eventObject) 以前附加事件上的事件處理程式函式,或特殊值false.
// 移除所有段落上的事件:
$("p").off()

$("body").off("click", "#theone", aClick)

$("form").on("click.validator", "button", validate);

  • .off( events [, selector ] )
    1. events 一個物件,鍵所代表事件型別和可選的命名空間,值表示先前事件系結的處理函式,
    2. selector 一個選擇器,當系結事件處理程式時,先前傳遞給 .on()的那個,

 function toggleClass(){
    $(this).toggleClass("active");
  }
 function addClass(){
    $(this).addClass("inside");
  } 
  function removeClass (){
    $(this).removeClass("inside");
  }
  
$("div.test").on({
  click: toggleClass,
  mouseenter: addClass,
  mouseleave: removeClass
});

$("div.test").off({
  click: toggleClass,
  mouseenter: addClass,
  mouseleave: removeClass
});

.trigger()

概念:觸發匹配元素上的給定的事件型別
語法:

  • .trigger( eventType [, extraParameters ] )
    1. eventType 包含JavaScript事件型別的字串
    2. extraParameters 傳遞給事件處理程式的額外陣列引數,
$('#foo').on('click', function() {
      alert($(this).text());
    });
$('#foo').trigger('click');

// 支持觸發和監聽自定義事件
$('#foo').on('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);
  • .trigger( event ) 接受jQuery事件物件
$("body").trigger({
    type:"logged",
    user:"foo",
    pass:"bar"
});

注意:.trigger()事件會在DOM樹上冒泡;在事件處理程式中回傳false或呼叫事件物件中的.stopPropagation() 方法可以使事件停止冒泡,

.triggerHandler()

概念:這個方法會觸發指定的事件型別上所有系結的處理函式,
語法

  • .triggerHandler( eventType [, extraParameters ] )
    1. eventType JavaScript事件型別的字串,
    2. extraParameters 傳遞給事件處理程式的額外陣列引數,
$("input").triggerHandler("focus");

$("input").triggerHandler("focus", [1, 2]);

注意:.triggerHandler() 方法的行為與 .trigger() 相似,不同之處有如下幾點:

  • .triggerHandler() 方法并不會觸發事件的默認行為,
  • .trigger() 會影響所有與 jQuery 物件相匹配的元素,而 .triggerHandler() 僅影響第一個匹配到的元素,
  • 使用 .triggerHandler() 創建的事件,并不會在 DOM 樹中向上冒泡,如果事件沒有被目標元素直接處理,那么它就不會進行任何處理,
  • 與普通的方法回傳 jQuery 物件(這樣就能夠使用鏈式用法)相反,.triggerHandler() 回傳最后一個處理的事件的回傳值,如果沒有觸發任何事件,會回傳 undefined,

jQuery影片

顯示隱藏

概念:jQuery提供用來顯示/隱藏匹配元素的方法,
語法

  • .show()/.hide()
$('.target').show();

$("p").hide();

注意:

  1. 如果沒有引數,匹配的元素將沒有影片的被立即顯示/隱藏,這大致相當于呼叫.css('display', 'none') / .css('display', 'block')
  2. display屬性值保存在jQuery的資料快取中,所以display可以方便以后可以恢復到其初始值,如果一個元素的display屬性值為inline,然后是隱藏和顯示,這個元素將再次顯示inline,
  • .hide( [duration ] [, complete ] ) / .show( [duration ] [, complete ] )
    1. duration 一個字串或者數字決定影片將運行多久毫秒,默認 400, 字串 ‘fast’ 和 ‘slow’ 分別代表200和600毫秒的延時,
    2. complete 在影片完成時執行的函式,

$("span").show(2000);

$("div").first().show("fast", function showNext() {
    $(this).next("div").show("fast", showNext);
});

  • .hide( [duration ] [, easing ] [, complete ] ) / .show( [duration ] [, easing ] [, complete ] )
    • easing 一個字串,表示過渡使用哪種緩動函式,jQuery自身提供"linear" 和 “swing”(默認),
$("span").show(2000, 'linear', function() {
    console.log('影片執行完畢')
});
  • .hide( options ) / .show( options ) options是一組包含影片選項的值的集合,支持的選項:
    1. duration 一個字串或者數字決定影片將運行多久毫秒,默認 ‘normal’ (400毫秒), 字串 ‘normal’、‘fast’ 和 ‘slow’
    2. easing 一個字串表示過渡緩動函式"linear" 和 “swing”,默認 ‘swing’
    3. queue 一個布林值,指示是否將影片放置在效果佇列中,如果為false時,將立即開始影片,可以接受一個字串用作自定義佇列,影片被添加到由該字串表示的佇列中,默認 ‘true’
    4. complete 在影片完成時執行的函式,
$("span").show({
    duration: 500,
    easing: "linear"
    complete: function() {
        console.log('影片執行完畢')
    }
})

注意

  1. 當提供一個持續時間引數,顯示/隱藏影片方法將為匹配元素的寬度,高度,以及不透明度,同時進行影片操作直至元素顯示/隱藏,若是隱藏影片最終display樣式屬性將被設定為none,

滑動

概念

  • slideDown 用滑動影片顯示一個匹配元素,
  • slideUp 用滑動影片隱藏一個匹配元素,
  • slideToggle 用滑動影片顯示或隱藏一個匹配元素,
    語法
  • .滑動方法( [duration ] [, complete ] )
$("p").slideToggle("slow");

$('#book').slideDown('slow', function() {
    console.log('影片執行完畢')
});
  • .滑動方法( [duration ] [, easing ] [, complete ] )
$('#book').slideUp('slow', 'linear', function() {
    console.log('影片執行完畢')
});
  • .滑動方法( options )
$("span").slideToggle({
    duration: 500,
    easing: "linear"
    complete: function() {
        console.log('影片執行完畢')
    }
})

注意:滑動方法將給匹配元素的高度設定影片,通過改變高度導致頁面中,在這個元素下面的內容往下或往上滑,并且display屬性值同樣保存在jQuery的資料快取中,

淡入淡出(通過改變不透明度)

fadeIn/fadeOut/fadeToggle

概念

  • fadeIn 通過匹配的元素的不透明度影片以淡入的方式顯示匹配元素,
  • fadeOut 通過匹配的元素的不透明度影片以淡出的方式隱藏匹配元素,
  • fadeToggle 通過匹配的元素的不透明度影片,來顯示或隱藏它們,

語法

  • .淡入淡出方法( [duration ] [, complete ] )
$("p").fadeOut("slow");

$("p:last").fadeToggle("slow");

$("p:last").fadeToggle("fast", function () {
    $("#log").append("<div>finished</div>");
  });
  • .淡入淡出方法( [duration ] [, easing ] [, complete ] )
$("p:last").fadeToggle('slow', 'linear', function() {
    console.log('影片執行完畢')
});
  • .淡入淡出方法( options )
$("span").fadeToggle({
    duration: 500,
    easing: "linear"
    complete: function() {
        console.log('影片執行完畢')
    }
})

注意:如果提供回呼函式,這個 callback 函式將在影片完成后被執行一次,這個能用來將不同的影片串聯起來組成一個事件序列,這個回呼函式不設定任何引數,但是this指向執行影片的DOM元素,如果多個元素一起做影片效果,值得注意的是這個回呼函式在每個匹配元素上執行一次,而不是作為一個整體,

fadeTo

概念:影片的調整匹配元素的透明度,

語法

  • .fadeTo( duration, opacity [, complete ] ) 其他引數與上面影片API相同 opacity 值為0和1之間的數字表示目標元素的不透明度,
$("p").fadeTo("slow", 0.5);


$("p:last").fadeTo("fast", 0.2, function () {
    $("#log").append("<div>finished</div>");
  });
  • .fadeTo( duration, opacity [, easing ] [, complete ] )
$("p:last").fadeToggle('slow', 0.8, 'linear',      
  function() {
    console.log('影片執行完畢')
});

注意:將duration設定為0,這個方法只是改變opacity CSS屬性,所以.fadeTo(0, opacity)和.css(‘opacity’, opacity)是一樣的效果,

自定義影片

概念:使用.animate()方法根據一組 CSS 屬性,執行自定義影片,
注意:

  1. 不同于影片的簡便方法,自定義影片不會影響隱藏元素的可見性部分的效果,例如,給定$(‘someElement’).hide().animate({height:‘20px’}, 500),影片將執行,但該元素將保持隱藏,
  2. 所有用于影片的屬性必須是數字的,除非另有說明;這些屬性如果不是數字的將不能使用基本的jQuery功能,(例如,width, height或者left可以執行影片,但是background-color不能,)屬性值的單位像素(px),除非另有說明,單位em 和 %需要指定使用,
  3. 除了樣式屬性,自定義影片的一些非樣式的屬性,如scrollTop 和 scrollLeft,以及自定義屬性,也可應用于影片,
  4. 判斷元素是否處于影片狀態,一般與is()方法配合使用:animated
  5. 影片屬性也可以是一個相對值,如果提供一個以+= 或 -=開始的值,那么目標值就是以這個屬性的當前值加上或者減去給定的數字來計算的,

語法

  • .animate( properties [, duration ] [, easing ] [, complete ] )
    1. properties 接受一個CSS屬性和值的物件,影片將根據這組物件移動,
    2. 其他引數與之前API相同
 $("#block").animate({
    width: "70%",
    opacity: 0.4,
    marginLeft: "0.6in",
    fontSize: "3em",
    borderWidth: "10px"
  }, 1500 );
  
 $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // 影片執行完畢
});
  • .animate( properties, options )
  $('#book').animate({
    width: 'toggle',
    height: 'toggle'
  }, {
    duration: 5000,
    specialEasing: {
      width: 'linear',
      height: 'easeOutBounce'
    },
    complete: function() {
      $(this).after('<div>Animation complete.</div>');
    }
  });

「課堂練習」

練習一 多組影片輪播圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iq93ZgN0-1629274094611)(http://edu.yueqian.com.cn/group1/M00/02/F1/wKgA3WA0p8uAHLQNACuDTUzktlY894.gif)]
要求:
使用自定義影片實作上圖所示的多個元素影片過渡效果

部分代碼:

<div id="box">
	<div class="pic">
		<ul>
			<li>
				<img class="img0" src="img/bg1.jpg"/>
				<img class="img1" src="img/text1.png"/>
				<img class="img2" src="img/con1.png"/>
			</li>
			<li>
				<img class="img0" src="img/bg2.jpg"/>
				<img class="img1" src="img/text2.png"/>
				<img class="img2" src="img/con2.png"/>
			</li>
			<li>
				<img class="img0" src="img/bg3.jpg"/>
				<img class="img1" src="img/text3.png"/>
				<img class="img2" src="img/con3.png"/>
			</li>
			<li>
				<img class="img0" src="img/bg4.jpg"/>
				<img class="img1" src="img/text4.png"/>
				<img class="img2" src="img/con4.png"/>
			</li>
			<li>
				<img class="img0" src="img/bg5.jpg"/>
				<img class="img1" src="img/text5.png"/>
				<img class="img2" src="img/con5.png"/>
			</li>
		</ul>
	</div>
</div>

練習二 使用jQuery實作滾動導航影片效果

day04影片導航滾動.gif
要求:

  1. 在昨天的滾動導航潭訓礎上添加影片效果
  2. 當滾動到一定距離時,用淡入淡出效果顯示導航條
  3. 點擊導航條,帶滾動影片的滾動到相應的樓層
  4. 點擊導航條Top按鈕帶滾動影片的回傳頁面頂部

影片佇列

介紹:每個元素可以通過jQuery,包含一個或多個函式佇列,在大多數應用中,只有一個列隊(訪問 fx)被使用,佇列允許一個元素來異步的訪問一連串的動作,而不終止程式執行,

例子

$('#foo').slideUp().fadeIn();

當這個陳述句被執行,這個元素開始立即做滑動影片,
而漸入影片放置在 fx 列隊在,只有當滑動影片完成后才會被執行,

.queue()

概念:顯示或操作在匹配元素上執行的函式佇列
介紹:queue()方法允許我們直接操縱函式佇列,用一個回呼函式訪問queue()特別的有用;它讓我們把新函式置入到佇列的末端,為jQuery集合中的每個元素執行一次回呼函式,

語法

  • .queue( [queueName ] ) 顯示在匹配的元素上的已經執行的函式列隊,
    1. queueName 一個含有佇列名的字串,默認是 fx,標準的影片佇列,
<!-- 顯示列隊的長度 -->
<style>
div { 
    margin:3px;
    width:40px;
    height:40px;
    position:absolute;
    left:0px;
    top:60px;
    background:green;
    display:none; 
}
    
div.newcolor { 
    background:blue; 
}

p { 
    color:red; 
} 
</style>

<p>The queue length is: <span></span></p>
<div></div>
<script>
var div = $("div");
 
function runIt() {
  div.show("slow");
  div.animate({left:'+=200'},2000);
  div.slideToggle(1000);
  div.slideToggle("fast");
  div.animate({left:'-=200'},1500);
  div.hide("slow");
  div.show(1200);
  div.slideUp("normal", runIt);
}
 
function showIt() {
  var n = div.queue("fx");
  $("span").text( n.length );
  setTimeout(showIt, 100);
}
 
runIt();
showIt();
</script>
  • .queue( [queueName ], newQueue ) 在匹配元素上操作已經附加函式的串列,

    1. queueName 一個含有佇列名的字串,默認是 ‘fx’,標準的影片佇列,
    2. newQueue 一個替換當前列隊內容的函式陣列,
  • .queue( [queueName ], callback( next ) )在匹配元素上操作已經附加函式的串列,

    1. queueName 一個含有佇列名的字串,默認是 ‘fx’,標準的影片佇列,
    2. callback( next ) 將要添加到佇列中的新函式,佇列中的下一個函式會在當前函式被呼叫時作為引數傳入,
$("#test").queue(function(next) {
    // next是佇列中下一個函式,呼叫該函式可以保證保證佇列中函式的繼續進行
    next();
});

$('#foo').slideUp();
$('#foo').queue(function() {
  alert('Animation complete.');
  $(this).dequeue();
});

// 商民的代碼相當于:
$('#foo').slideUp(function() {
  alert('Animation complete.');
})

注意:當使用.queue()添加一個函式的時候,我們應該保證在函式最后呼叫了 jQuery.dequeue(),這樣就能讓佇列中的其它函式按順序執行,

.dequeue()

概念:執行匹配元素佇列的下一個函式,
語法

  • .dequeue( [queueName ] )
    1. queueName 一個含有佇列名的字串,默認是fx,標準的效果佇列,
$("div").animate({left:'+=200px'}, 2000);
$("div").animate({top:'0px'}, 600);
$("div").queue(function () {
    $(this).toggleClass("red");
    $(this).dequeue();
  });
$("div").animate({left:'10px', top:'30px'}, 700);

當.dequeue()被呼叫的時候,列隊中的下一個函式將從這個列隊中被移除,然后再執行,這個執行的函式中也應當直接或間接的包含 .dequeue()陳述句,這樣才能繼續執行佇列中的其它函式,所以,這個序列可以繼續,

.stop()

概念:停止匹配元素當前正在運行的影片,

語法

  • .stop( [queue ] [, clearQueue ] [, jumpToEnd ] )
    1. queue 停止影片佇列的名稱,
    2. clearQueue 一個布林值,指示是否取消佇列影片,默認 false.
    3. 一個布林值指示是否當前影片立即完成,跳到當前影片的最后一幀,默認false.
 $('.hoverme').find('img').stop(true, true)

 $('.hoverme').find('img').stop('fx', true, true)

當一個元素呼叫.stop(),當前正在運行的影片(如果有的話)立即停止,由于元素上的影片尚未執行完成,所以影片完成時執行的回呼函式是不會被呼叫的,

.clearQueue()

概念:從列隊中移除所有未執行的項,
語法

  • .clearQueue( [queueName ] )
    1. 一個含有佇列名的字串,默認是fx,標準的效果佇列,
 $("div").clearQueue();

注意:當.clearQueue()方法被訪問的時候,所有在這個列隊中未執行的函式將被移除 ,當不使用引數的時候,.clearQueue()會從標準的影片佇列fx中移除剩下的函式,這個方法類似.stop(true),然而.stop()方法只適用在影片中,.clearQueue()還可以用來移除用.queue()方法添加到普通jQuery串列的任何函式,

delay()

概念:設定一個延時來推遲執行佇列中后續的項,
語法

  • delay(duration,[queueName])
    1. duration 一個整數,指示的毫秒數,用于設定下個佇列推遲執行的時間,
    2. queueName 一個作為佇列名的字串,默認是影片佇列 fx,標準的效果佇列,
// .slideUp() 和 .fadeIn() 影片之間設定800毫秒的延時:
$('#foo').slideUp(300).delay(800).fadeIn(400);

注意

  1. .delay()方法允許我們將佇列中的函式延時執行,它既可以推遲影片佇列中函式的執行,也可以用于自定義佇列,只有佇列中連續的事件會延遲; 例如,不帶引數的 .show() 或者 .hide()不會延遲,因為他們沒有使用效果佇列
  2. 無法取消延時 delay(),它不是JavaScript的原生 setTimeout函式的替代品,這可能是更適合某些使用情況,

「課堂練習」

使用jQuery實作手風琴效果

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-twntubQN-1629274094615)(http://edu.yueqian.com.cn/group1/M00/02/F1/wKgA3WA0rC6ACeQjAFRocxGxD1U238.gif)]
要求:

  1. 使用jQuery實作上面的手風琴影片效果
  2. 滑鼠移入指定元素,元素動態撐開文字隱藏,其他元素影片縮小
    ript
    $(“div”).clearQueue();
**注意**:當.clearQueue()方法被訪問的時候,所有在這個列隊中未執行的函式將被移除 ,當不使用引數的時候,.clearQueue()會從標準的影片佇列fx中移除剩下的函式,這個方法類似.stop(true),然而.stop()方法只適用在影片中,.clearQueue()還可以用來移除用.queue()方法添加到普通jQuery串列的任何函式,

#### delay()
**概念**:設定一個延時來推遲執行佇列中后續的項,
**語法**:
- delay(duration,[queueName])
    1. duration 一個整數,指示的毫秒數,用于設定下個佇列推遲執行的時間,
    2. queueName 一個作為佇列名的字串,默認是影片佇列 fx,標準的效果佇列,
```javascript
// .slideUp() 和 .fadeIn() 影片之間設定800毫秒的延時:
$('#foo').slideUp(300).delay(800).fadeIn(400);

注意

  1. .delay()方法允許我們將佇列中的函式延時執行,它既可以推遲影片佇列中函式的執行,也可以用于自定義佇列,只有佇列中連續的事件會延遲; 例如,不帶引數的 .show() 或者 .hide()不會延遲,因為他們沒有使用效果佇列
  2. 無法取消延時 delay(),它不是JavaScript的原生 setTimeout函式的替代品,這可能是更適合某些使用情況,

「課堂練習」

使用jQuery實作手風琴效果

[外鏈圖片轉存中…(img-twntubQN-1629274094615)]
要求:

  1. 使用jQuery實作上面的手風琴影片效果
  2. 滑鼠移入指定元素,元素動態撐開文字隱藏,其他元素影片縮小

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

標籤:其他

上一篇:(更新中)一文詳解React的核心概念(包括配置和安裝方法)——入門專案實戰

下一篇:從0開始的TypeScriptの七:函式

標籤雲
其他(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)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more