JSFiddle - React, Tailwind, and code Playground
HTML
<h1>jQuery Plug-In Twinkle function Example</h1>
<p>Look me twinkle!</p>
<button id='startBtn'>Click me to start twinkle</button>
JavaScript
//自製jQuery Plug-In
(function ($) {
$.fn.extend({
//閃爍範例
twinkle: function (options) {
//預設參數
var defaultOptions = {
times: 5, //閃爍次數(先亮再暗算一次)
period: 500, //閃爍間隔(亮與暗的間隔)
callback: function (target) {} //執行完閃爍後要執行的callback
};
$.extend(defaultOptions, options); //覆蓋自訂的參數到預設參數中
//使用return傳回jQuery物件,使其Plug-In使用時擁有串接特性
return this.each(function () { //這裡的this是jQuery物件,each()裡的是
//JavaScript的DOM物件
var target = $(this); //取得各別DOM物件的jQuery物件
var originalVisibilityStatus = $(this).css('visibility'); //取得原來的visibility css屬性
var currentTimes = 0; //現在的回數
startTwinkle();
function startTwinkle() {
if (currentTimes < defaultOptions.times) {
lighten();
//間隔一段時間後變暗,回數加一
setTimeout(function () {
darken();
currentTimes++;
//間隔一段時間後遞迴呼叫自己startTwinkle
setTimeout(function () {
startTwinkle();
}, defaultOptions.period);
}, defaultOptions.period);
} else {
//將target的visibility css屬性設回原來的值,執行callback function
target.css('visibility', originalVisibilityStatus);
defaultOptions.callback(target);
}
}
function lighten() {
target.css('visibility', 'visible');
}
function darken() {
target.css('visibility', 'hidden');
}
});
}
...