概要と目標
アニメーションやイベントの種類を
学習しよう。
jQueryを使ったアニメーションやイベントの指定方法を学習しましょう。
jQueryを使ったアニメーションやイベントの指定方法を学習しましょう。
表示 (display: block) 、非表示 (display: none)をフェードで切り替えたり、
スライドで切り替えたりできる。
$(セレクタ).slideDown(スピード, コールバック関数); // スライドで表示
省略可
$(セレクタ).slideUp(スピード, コールバック関数); // スライドで非表示
省略可
$(セレクタ).slideToggle(スピード, コールバック関数); // 上記2つを自動で判別
省略可
【スピード】は、ミリ秒(1秒 = 1000[初期値: 400])または、 'fast'(早い)、'normal'(普通)、'slow'(遅い)で指定
詳細はjQuery API DocumentationのslideDown()、slideUp()、slideToggle()を参照
$(セレクタ).fadeIn(スピード, コールバック関数); // フェードで表示
省略可
$(セレクタ).fadeOut(スピード, コールバック関数); // フェードで非表示
省略可
$(セレクタ).fadeToggle(スピード, コールバック関数); // 上記2つを自動で判別
省略可
【スピード】は、ミリ秒(1秒 = 1000[初期値: 400])または、 'fast'(早い)、'normal'(普通)、'slow'(遅い)で指定
詳細はjQuery API DocumentationのfadeIn()、fadeOut()、fadeToggle()を参照
$(function () {
/*
表示/非表示
--------------------------------------- */
// show ・・・ 表示
$('.js-show').click(function () {
$('#box1').show(300);
});
// hide ・・・ 非表示
$('.js-hide').click(function () {
$('#box1').hide(300);
});
// toggle ・・・ 表示/非表示
$('.js-toggle').click(function () {
$('#box1').toggle(300);
});
/*
スライド
--------------------------------------- */
// slideDown ・・・ スライドで表示
$('.js-slideDown').click(function () {
$('#box2').slideDown(300);
});
// slideUp ・・・ スライドで非表示
$('.js-slideUp').click(function () {
$('#box2').slideUp(300);
});
// slideToggle ・・・ スライドトグル
$('.js-slideToggle').click(function () {
$('#box2').slideToggle(300);
});
/*
フェード
--------------------------------------- */
// fadeIn ・・・ フェードイン
$('.js-fadeIn').click(function () {
$('#box3').fadeIn(300);
});
// fadeOut ・・・ フェードアウト
$('.js-fadeOut').click(function () {
$('#box3').fadeOut(300);
});
// fadeToggle ・・・ フェードトグル
$('.js-fadeToggle').click(function () {
$('#box3').fadeToggle(300);
});
});
:animated()を、:not()と組み合わせることで解決できる。
$('.js-toggle').click(function () {
$('#box1:not(:animated)').toggle(300);
});
任意のCSSの値などをアニメーションで変化させることができる。
animate () ・・・ アニメーション$(セレクタ).animate(変更内容, スピード, 動き方, コールバック関数);
省略可
【スピード】は、ミリ秒(1秒 = 1000[初期値: 400])または、 'fast'(早い)、'normal'(普通)、'slow'(遅い)で指定
【動き方】は、'swing'(加速と減速[初期値])、 'linear'(一定の速度)で指定
詳細はjQuery API Documentationを参照
$(function () {
// animate() ・・・ 独自のアニメーション
$('.js-button').click(function () {
$('#box1').animate({
'margin-left': '500px',
'margin-top': '500px'
}, 500, 'linear');
});
});
clickイベントを使って様々なサイトで見かける、アコーディオンメニューを作ってみる。
複数の設置にも対応できるように、便利な$(this)というキーワードや、それに関連してよく使うメソッドも使う。
$(function () {
$('.js-button').click(function () {
$('ul').slideToggle(300);
});
});
セレクタで指定した要素が、複数ヒットする場合は、今回のように全ての要素で処理が行われる。
イベントが発生した要素自身を使いたい場合は、$(this)という特殊なキーワードのセレクターを使う。
$(セレクタ).click(function() {
$(this).メソッド(パラメータ);
});
また、このイベントが発生した要素の次の要素や、親要素など、セレクタを指定(移動)するためのメソッドもある。
| 指定する要素 | メソッド名 | 書式 |
|---|---|---|
| 直近の親要素 | parent() |
$(セレクタ).parent(セレクタ[省略可]) |
| 祖先の親要素 | parents() |
$(セレクタ).parents(セレクタ[省略可]) |
| 直近の子要素 | children() |
$(セレクタ).children(セレクタ[省略可]) |
| 子孫の要素 | find() |
$(セレクタ).find(セレクタ[省略可]) |
| 兄弟要素 | siblings() |
$(セレクタ).siblings(セレクタ[省略可]) |
| 次の要素 | next() |
$(セレクタ).next(セレクタ[省略可]) |
| 前の要素 | prev() |
$(セレクタ).prev(セレクタ[省略可]) |
$(function () {
$('.js-button').click(function () {
// イベントが発生した要素の次の要素
$(this).next().slideToggle(300);
});
});
clickイベントは、注意が必要href 属性に指定された リンク先にジャンプする機能がある。clickイベントを指定しても、イベントは発生するが、すぐにリンク先に移動してしまいます。return false;を追加するか、preventDefault()メソッドを使って、リンク機能を無効にするなどの方法があります。
return false; を使う方法$('a').click(function() {
$('img').attr('src', $(this).attr('href'));
return false;
});
preventDefault() メソッドを使う方法$('a').click(function(e) {
e.preventDefault();
$('img').attr('src', $(this).attr('href'));
});
マウスに関するイベントも様々なものがある。
mouseenter () ・・・ マウスが乗った時$(セレクタ).mouseenter(function() {
// マウスが乗った時の処理
});
詳細はjQuery API Documentationを参照
mouseleave () ・・・ マウスが離れた時$(セレクタ).mouseleave(function() {
// マウスが離れた時の処理
});
詳細はjQuery API Documentationを参照
hover () ・・・ マウスが乗った時と離れた時$(セレクタ).hover(function() {
// マウスが乗った時の処理
}, function() {
// マウスが離れた時の処理
});
詳細はjQuery API Documentationを参照
mousemove () ・・・ マウスが動いた時$(セレクタ).mousemove(function() {
// マウスが動いた時の処理
});
詳細はjQuery API Documentationを参照
$(function () {
// mouseenter() ・・・ マウスが乗った時
$('#photo1').mouseenter(function () {
$(this).attr('src', 'images/onigiri.jpg').attr('alt', 'おにぎり');
});
// mouseleave() ・・・ マウスが離れた時
$('#photo1').mouseleave(function () {
$(this).attr('src', 'images/pasta.jpg').attr('alt', 'パスタ');
});
// hover() ・・・ マウスが乗った時と離れた時
$('#photo2').hover(function () {
$(this).attr('src', 'images/onigiri.jpg').attr('alt', 'おにぎり');
}, function () {
$(this).attr('src', 'images/pasta.jpg').attr('alt', 'パスタ');
});
// mousemove() ・・・ マウスが動いた時
$('#box1').mousemove(function (e) {
$(this).text('X:' + e.pageX + 'Y:' + e.pageY);
});
});
jQueryで append() などを使って追加した要素にはイベントが設定できない。
その場合、on()というメソッドを使用するとイベントが付けれる。
on () ・・・ jQueryオブジェクトにイベントバインドする$(親要素のセレクタ).on(イベント名, イベントを設定するセレクタ, function() {
// イベントが発生した時の処理
});
詳細はjQuery API Documentationを参照
on()メソッドを使ってみよう$(function () {
$('.js-button').click(function () {
$('ul').append('<li>jQueryで追加したぜ!</li>');
});
// $('li').click(function () {
// $(this).remove();
// });
// on() ・・・ jQueryオブジェクトにイベント設定
$('ul').on('click', 'li', function () {
$(this).remove();
});
});
「chapter03」 › 「training」フォルダ内の「index.html」を開き、
下記の問題を解いて下さい。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>練習問題3</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<div class="container">
<h1>練習問題3</h1>
<nav>
<ul class="js-dropdown global-nav">
<li><a href="#">Home</a></li>
<li>
<a href="#">Company</a>
<ul class="js-dropdown-child">
<li><a href="#">会社概要</a></li>
<li><a href="#">代表あいさつ</a></li>
</ul>
</li>
<li>
<a href="#">Service</a>
<ul class="js-dropdown-child">
<li><a href="#">取扱商品</a></li>
<li><a href="#">納品スケジュール</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</div>
<!-- /.l-container -->
</header>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="app.js"></script>
</body>
</html>
$(function () {
// 「.js-dropdown-child」を非表示に
$('.js-dropdown-child').hide();
$('.js-dropdown > li').hover(function () {
// マウスが乗った時
$(this).find('.js-dropdown-child:not(:animated)').slideDown(300);
}, function () {
// マウスが離れた時
$(this).find('.js-dropdown-child:not(:animated)').slideUp(300);
});
});
解答例は全問題のチェックボックスが on になるとご覧いただけます。
jQueryには、手軽に使える様々な種類のアニメーションや イベントがある。
on()メソッドでイベントを付ける