概要と目標
jQueryプラグインを使って、
楽をしよう。
jQueryには様々なプラグインが存在する。
ネットで見つけたプラグインを使えるようになろう。
jQueryには様々なプラグインが存在する。
ネットで見つけたプラグインを使えるようになろう。
プラグインとは、jQueryと一緒に利用するJavaScriptのライブラリのこと。
膨大な数のプラグインがネット上にあるため、手軽に様々な効果が付けれる。
多くのプラグインは以下の手順で利用できる。
ただし、プラグイン利用時には必ずライセンスを確認してから利用すること。
カレンダーや、タブなど、よく見かける様々なUIが簡単に使えるプラグイン。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery UI</title>
<link rel="stylesheet" href="jquery-ui-1.12.1/jquery-ui.min.css">
</head>
<body>
<h1>jQuery UI</h1>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery-ui-1.12.1/jquery-ui.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery UI</title>
<link rel="stylesheet" href="jquery-ui-1.12.1/jquery-ui.min.css">
</head>
<body>
<h1>jQuery UI</h1>
<p>Date: <input type="text" id="datepicker"></p>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery-ui-1.12.1/jquery-ui.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery UI</title>
<link rel="stylesheet" href="jquery-ui-1.12.1/jquery-ui.min.css">
</head>
<body>
<h1>jQuery UI</h1>
<p>Date: <input type="text" id="datepicker"></p>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery-ui-1.12.1/jquery-ui.min.js"></script>
<script>
$(function () {
$("#datepicker").datepicker();
});
</script>
</body>
</html>
jQueryには様々なスライダー系のプラグインがある。
bxSliderはその中でも、オプションが豊富な、ど定番のプラグイン。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>bxSlider</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css">
</head>
<body>
<h1>bxSlider</h1>
<div class="container">
<ul>
<li><img src="images/photo-sea.jpg" alt="きれいな海"></li>
<li><img src="images/photo-mountain.jpg" alt="きれいな山"></li>
<li><img src="images/photo-sky.jpg" alt="きれいな空"></li>
<li><img src="images/photo-river.jpg" alt="きれいな川"></li>
<li><img src="images/photo-town.jpg" alt="きれいな街"></li>
</ul>
</div>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>bxSlider</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css">
</head>
<body>
<h1>bxSlider</h1>
<div class="container">
<ul class="slider">
<li><img src="images/photo-sea.jpg" alt="きれいな海"></li>
<li><img src="images/photo-mountain.jpg" alt="きれいな山"></li>
<li><img src="images/photo-sky.jpg" alt="きれいな空"></li>
<li><img src="images/photo-river.jpg" alt="きれいな川"></li>
<li><img src="images/photo-town.jpg" alt="きれいな街"></li>
</ul>
</div>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>bxSlider</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css">
</head>
<body>
<h1>bxSlider</h1>
<div class="container">
<ul class="slider">
<li><img src="images/photo-sea.jpg" alt="きれいな海"></li>
<li><img src="images/photo-mountain.jpg" alt="きれいな山"></li>
<li><img src="images/photo-sky.jpg" alt="きれいな空"></li>
<li><img src="images/photo-river.jpg" alt="きれいな川"></li>
<li><img src="images/photo-town.jpg" alt="きれいな街"></li>
</ul>
</div>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script>
$(function () {
$('.slider').bxSlider();
});
</script>
</body>
</html>
jQueryのプラグインの多くはオプションを指定できる。
オプションを指定する時は、プラグイン実行用メソッドのパラメータとして指定する。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>bxSlider</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css">
</head>
<body>
<h1>bxSlider</h1>
<div class="container">
<ul class="slider">
<li><img src="images/photo-sea.jpg" alt="きれいな海"></li>
<li><img src="images/photo-mountain.jpg" alt="きれいな山"></li>
<li><img src="images/photo-sky.jpg" alt="きれいな空"></li>
<li><img src="images/photo-river.jpg" alt="きれいな川"></li>
<li><img src="images/photo-town.jpg" alt="きれいな街"></li>
</ul>
</div>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script>
$(function () {
$('.slider').bxSlider({
mode: 'fade',
auto: true,
pause: 3000
});
});
</script>
</body>
</html>
よく使う機能をプラグイン化しておけば、様々な案件で使いまわしやすくなる。
ただし、プラグインの作成には他のJavaScriptやプラグインと変数名や関数名が衝突しないなどの配慮が必要で少々複雑。
ここでは最低限のプラグイン作成方法を紹介。
$.fn.プラグイン実行用のメソッド名 = function() {
// プラグイン化する処理
return this;
}
$(セレクタ).プラグイン実行用のメソッド名()
なお、プラグインファイル内で、実行時のセレクタを使うには、
「this」というキーワードを使うことで利用できる。
$.fn.mymodal = function () {
// ここにプラグインの処理
return this;
}
$('.js-modalWindow').click(function () {
// body要素内の末尾にdiv要素を追加
$('body').append('<div class="overlay"></div>');
// .overlay をフェードイン
$('.overlay').fadeIn(300);
// イベントが発生した要素のhref属性の属性値を取得
var target = $(this).attr('href');
// console.log(target);
// 新たなimg要素を生成
var largeImg = '<img src="' + target + '" class="content">';
// .overlay の子要素として追加
$('.overlay').append(largeImg);
// body要素に is-active classを追加
$('body').addClass('is-active');
// リンク機能を無効化
return false;
});
// 非表示用のクリックイベント
$('body').on('click', '.overlay', function () {
// 自身をフェードアウトで非表示にし、コールバック関数発動
$(this).fadeOut(300, function () {
// フェードアウト完了後、自身を削除
$(this).remove();
// body要素の is-active classを外す
$('body').removeClass('is-active');
});
});
$.fn.mymodal = function () {
// ここにプラグインの処理
$('.js-modalWindow').click(function () {
// body要素内の末尾にdiv要素を追加
$('body').append('<div class="overlay"></div>');
// .overlay をフェードイン
$('.overlay').fadeIn(300);
// イベントが発生した要素のhref属性の属性値を取得
var target = $(this).attr('href');
// console.log(target);
// 新たなimg要素を生成
var largeImg = '<img src="' + target + '" class="content">';
// .overlay の子要素として追加
$('.overlay').append(largeImg);
// body要素に is-active classを追加
$('body').addClass('is-active');
// リンク機能を無効化
return false;
});
// 非表示用のクリックイベント
$('body').on('click', '.overlay', function () {
// 自身をフェードアウトで非表示にし、コールバック関数発動
$(this).fadeOut(300, function () {
// フェードアウト完了後、自身を削除
$(this).remove();
// body要素の is-active classを外す
$('body').removeClass('is-active');
});
});
return this;
}
this」に置き換える
$.fn.mymodal = function () {
// ここにプラグインの処理
this.click(function () {
// body要素内の末尾にdiv要素を追加
$('body').append('<div class="overlay"></div>');
// .overlay をフェードイン
$('.overlay').fadeIn(300);
// イベントが発生した要素のhref属性の属性値を取得
var target = $(this).attr('href');
// console.log(target);
// 新たなimg要素を生成
var largeImg = '<img src="' + target + '" class="content">';
// .overlay の子要素として追加
$('.overlay').append(largeImg);
// body要素に is-active classを追加
$('body').addClass('is-active');
// リンク機能を無効化
return false;
});
// 非表示用のクリックイベント
$('body').on('click', '.overlay', function () {
// 自身をフェードアウトで非表示にし、コールバック関数発動
$(this).fadeOut(300, function () {
// フェードアウト完了後、自身を削除
$(this).remove();
// body要素の is-active classを外す
$('body').removeClass('is-active');
});
});
return this;
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像のモーダルウインドウ</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>画像のモーダルウインドウ</h1>
<ul>
<li>
<a href="images/pizza-large.jpg" class="js-modal">
<img src="images/pizza-thumb.jpg" alt="ピザ">
</a>
</li>
<li>
<a href="images/pasta-large.jpg" class="js-modal">
<img src="images/pasta-thumb.jpg" alt="パスタ">
</a>
</li>
<li>
<a href="images/hamburger-large.jpg" class="js-modal">
<img src="images/hamburger-thumb.jpg" alt="ハンバーガー">
</a>
</li>
<li>
<a href="images/onigiri-large.jpg" class="js-modal">
<img src="images/onigiri-thumb.jpg" alt="おにぎり">
</a>
</li>
</ul>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery.mymodal.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像のモーダルウインドウ</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>画像のモーダルウインドウ</h1>
<ul>
<li>
<a href="images/pizza-large.jpg" class="js-modal">
<img src="images/pizza-thumb.jpg" alt="ピザ">
</a>
</li>
<li>
<a href="images/pasta-large.jpg" class="js-modal">
<img src="images/pasta-thumb.jpg" alt="パスタ">
</a>
</li>
<li>
<a href="images/hamburger-large.jpg" class="js-modal">
<img src="images/hamburger-thumb.jpg" alt="ハンバーガー">
</a>
</li>
<li>
<a href="images/onigiri-large.jpg" class="js-modal">
<img src="images/onigiri-thumb.jpg" alt="おにぎり">
</a>
</li>
</ul>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery.mymodal.js"></script>
<script>
$(function () {
$('.js-modal').mymodal();
});
</script>
</body>
</html>
オプジョンは、引数にオブジェクト型で設定値を渡すことで設定できる。
$.exted()メソッド ・・・ オブジェクトを結合するメソッド$.extend(元となるオブジェクト, 結合するオブジェクト)
$.fn.mymodal = function (options) {
// ここにプラグインの処理
// オプションの設定
var settings = $.extend({
speed: 300
}, options);
this.click(function () {
// body要素内の末尾にdiv要素を追加
$('body').append('<div class="overlay"></div>');
// .overlay をフェードイン
$('.overlay').fadeIn(settings.speed);
// イベントが発生した要素のhref属性の属性値を取得
var target = $(this).attr('href');
// console.log(target);
// 新たなimg要素を生成
var largeImg = '<img src="' + target + '" class="content">';
// .overlay の子要素として追加
$('.overlay').append(largeImg);
// body要素に is-active classを追加
$('body').addClass('is-active');
// リンク機能を無効化
return false;
});
// 非表示用のクリックイベント
$('body').on('click', '.overlay', function () {
// 自身をフェードアウトで非表示にし、コールバック関数発動
$(this).fadeOut(settings.speed, function () {
// フェードアウト完了後、自身を削除
$(this).remove();
// body要素の is-active classを外す
$('body').removeClass('is-active');
});
});
return this;
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像のモーダルウインドウ</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>画像のモーダルウインドウ</h1>
<ul>
<li>
<a href="images/pizza-large.jpg" class="js-modal">
<img src="images/pizza-thumb.jpg" alt="ピザ">
</a>
</li>
<li>
<a href="images/pasta-large.jpg" class="js-modal">
<img src="images/pasta-thumb.jpg" alt="パスタ">
</a>
</li>
<li>
<a href="images/hamburger-large.jpg" class="js-modal">
<img src="images/hamburger-thumb.jpg" alt="ハンバーガー">
</a>
</li>
<li>
<a href="images/onigiri-large.jpg" class="js-modal">
<img src="images/onigiri-thumb.jpg" alt="おにぎり">
</a>
</li>
</ul>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="jquery.mymodal.js"></script>
<script>
$(function () {
$('.js-modal').mymodal({
speed: 500
});
});
</script>
</body>
</html>
jQueryにはたくさんのプラグインが存在する。
よく見かけるサイト上の動きは、ネットを探せばプラグイン化されてるものが多い。