web制作勉強中です。

職業訓練校でweb制作を勉強しています。勉強のメモなど記録します。

【授業メモ】jQuery animateとスムーススクロール

独自のアニメーションを設定できるanimate
height,top,opacityのように、数値で指定できるものは全てアニメーションに設定できる。
※colorのように、数値以外で指定するものはアニメーションにはできない。
動きに設定できるのはlinear swingで設定する。
 
 
$(function(){
$('一枚目画像').on('click',function(){
$('画像が入っている要素:not(:animated)').animate({
'動かしたい方向':'動かしたい距離(次の画像が出てくるために必要な距離)'},'秒数','動き');
});
$('二枚目画像').on('click',function(){
$('画像が入っている要素:not(:animated)').animate({
'動かしたい方法':'一枚目が戻ってくる距離'},'秒数','動き');
});
});
 
 
 
★記述例
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>アニメーションを設定するanimate</title>
<style>
html,body,p {
  margin: 0;
  padding: 0;
  line-height: 1.0;
}
img {
  vertical-align: bottom;
  border: none;
}
 
 
img {
  width: 400px;
  height:267px;
}
p {
  width: 800px;
  height: 267px;
  margin: 0;/*pをぴったりにくっつけたいのでmargin0*/
}
div {
  width: 400px;
  height: 267px;
  overflow: hidden;
}
/*二枚の画像を横に並べてdivに入れるが、動かして表示したいので二枚目を隠す
そのためにdivの幅を画像一枚分にし、はみ出した二枚目が隠れるようにする
*/
</style>
<script src="js/jquery.min.js"></script>
<script>
$(function(){
$('#dog1').on('click',function(){
$('p:not(:animated)').animate({//一枚目のimgをクリック→pを左に400px(画像一枚分)動かす
'margin-left':'-400px'},'200','linear');//一枚目がずれるため、二枚目が見えるようになる
});
$('#dog2').on('click',function(){//左に一枚分-400pxしたのを戻すために0にすれば初期値に戻る
$('p:not(:animated)').animate({//そうすると一枚目が戻ってくる
'margin-left':'0'},'200','swing');
});
});
</script>
</head>
 
<body>
<div>
<p>
<img src="img/1.jpg" alt="" id="dog1"><img src="img/2.jpg" alt="" id="dog2">
</p>
</div>
</body>
</html>
 
 
 
★animateで作るページ内リンク スムーススクロール
トップに戻る場合
$(function() {
  $("#to_top").on('click'function () {
    $('html,body').animate({ scrollTop: 0 }'swing');
      return false;
    });
});
 
 
複数の場所を指定する場合
$(function(){
   // #で始まるアンカーをクリックした場合に処理
   $('a[href^="#"]').on('click',function() {
      // スクロールの速度
      var speed = 400; // ミリ秒
    // 移動先を取得
      var href= $(this).attr("href");
      var target = $(href == "#" || href == "" ? 'html' : href);
      // 移動先を数値で取得
      var position = target.offset().top;
      // スムーススクロール
      $('body,html').animate({scrollTop:position}, speed, 'swing');
      return false;
   });
});
 
 
★記述例
 
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>スムーススクロール ページ内リンクの作り方</title>
<style>
html,body,ul,li {
  margin: 0;
  padding: 0;
  line-height: 1.0;
}
ul {
  list-style: none;
}
a {
  text-decoration: none;
}
 
ul {
  padding: 20px;
  background: white;
  position: fixed;/*ナブを固定にすれば移動がラク*/
  top: 0;
  right:0;
}
li {
  display: inline-block;/*横並びにするための指示 これを使うとfloatさせずとも横に並べる*/
  margin-right: 20px;
}
div{
  width: 100%;
  height: 100vh;/*view port height 一画面分 今見ている画面分ということ*/
}
#one {
  background:#FFFF00;
}
#two {
  background:#F90;
}
#three {
  background:#F66;
}
#four {
  background:#6CF;
}
#five {
  background:#6C9;
}
</style>
<script src="js/jquery.min.js"></script>
<script>
//topに戻るだけの場合
//$(function(){
// $('#to-top a').on('click',function(){
// $('#top').animate({ scrollTop: 0 }, 'swing');
// return false;//アンカーのイベントに必須
// });
// });
 
//複数要素&TOPに戻る場合 このまま覚える
$(function(){
$('a[href^="#"]').on('click',function() {// #で始まるアンカーをクリックした場合に処理
var speed = 400; // スクロールの速度 ミリ秒
var href= $(this).attr("href"); // 移動先を取得
var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得
var position = target.offset().top; // スムーススクロール
$('#top').animate({
scrollTop:position}, speed, 'swing');
return false;
});
});
</script>
</head>
 
<body id="top">
<ul>
<li><a href="#one">一個目</a></li><!--div idにリンクさせるとページ内リンクができる-->
<li><a href="#two">二個目</a></li>
<li><a href="#three">三個目</a></li>
<li><a href="#four">四個目</a></li>
<li><a href="#five">五個目</a></li>
</ul>
<div id="one">一個目</div>
<div id="two">二個目</div>
<div id="three">三個目</div>
<div id="four">四個目</div>
<div id="five">五個目</div>
<p id="to-top"><a href="#top">トップに戻る</a></p><!--bodyにつけたid名を入れることでリンクできる-->
</body>
</html>
 
 
 
★応用編
jQueryCDNで入れる
・TOPに戻るボタンをスクロールにする
・TOPに戻るボタンを、300pxスクロールしたら表示、300未満だと非表示にする
<!--jQueryCDNで入れる キャッシュが残っていれば勝手に読んでくれるので軽くなる-->
<script>
//TOPに戻るボタンの動き
$(function(){
$('#to-top a').on('click',function(){
$('#top').animate({ scrollTop: 0 }, 'swing');
return false;//アンカーのイベントに必須
});
});
//TOPに戻るボタンを、300pxスクロールしたら表示させる
$(function(){
$('#to-top').hide();
$(window).scroll(function () {
if ($(this).scrollTop() > 300) {
$('#to-top').fadeIn();
} else {
$('#to-top').fadeOut();
}
});
});
</script>