忍者ブログ

からすまる日誌

20200312pm02 スムーススクロール

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

20200312pm02 スムーススクロール

スムーススクロール
 
aタグでかつhrefの中身が#からはじまっているものに対してと指定したい
属性セレクタ
 
/* title 属性を持つ <a> 要素 */
a[title] {
  color: purple;
}
/* href が "https://example.org" と一致する <a> 要素 */
a[href="https://example.org"] {
  color: green;
}
/* href に "example" を含む <a> 要素 */
a[href*="example"] {
  font-size: 2em;
}
/* href が "org" で終わる <a> 要素 */
a[href$=".org"] {
  font-style: italic;
}
 
 

今回はこのページのこれを使う
 
[attr^=value]
>attr という名前の属性の値が value で始まる要素を表します。
 
こうなる
「べき」記号をつかう
 
  $(function(){
   $('a[href^="#"]').on('click',function(){
    
   });
  });
 

<!DOCTYPE html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>スムーススクロール</title>
 <link rel="stylesheet" href="smooth.css">
 <script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
 <header id="top">
  <h1>スムーススクロール</h1>
 </header>
 
 <div>
  <a class="green" href="#top">トップへ戻る</a>
 </div>
 
 <script>
  $(function(){//するする戻る
   $('a[href^="#"]').on('click',function(){
    $('html,body').animate({scrollTop:0},500,"swing");
    return false;
   });
  });
 </script>
 
</body>
</html>
 
windowではだめで'html,body'と指定するらしい
 
だけどこれだとトップに戻るボタンにしか使えない
ちゃんとターゲットの位置にくるようにしてやりたい
 
 
--->smooth.html
 
<!DOCTYPE html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>スムーススクロール</title>
 <link rel="stylesheet" href="smooth.css">
 <script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
 <header id="top">
  <h1>スムーススクロール</h1>
  <p><a href="#conta">goto h2</a></p>
 </header>
 <container id="conta">
  <h2>スムーススクロール</h2>
 </container>
 
 <div>
  <a class="green" href="#top">トップへ戻る</a>
 </div>
 
 <script>
  $(function(){//するする戻る
   $('a[href^="#"]').on('click',function(){
    var href= $(this).attr("href");//いまクリックされたthisのアトリ(属性)であるhrefの中身を入れている(今回は#top)
    var target = $(href == "#" || href=="" ? "href":href);//var target = $(href);がやりたい
    var pos = target.offset().top;
    
    $('html,body').animate({scrollTop:pos},500,"swing");
    return false;
   });
  });
 </script>
 
</body>
</html>

解説
var href= $(this).attr("href");
いまクリックされたthisのアトリ(属性)であるhrefの中身を入れている(今回は#top)
 
var target = $(href == "#" || href=="" ? "href":href);
var target = $(href);がやりたい
つまり
var target = #topとなってほしい
 
var pos = target.offset().top; 
targetでheaderをえらんでいる
headerの要素が上から何ピクセルにいるんですか
を格納
先ほど0にしていたのを「その要素の位置にしてね」
 
return false;
aタグのなんとかがなんとかしないように
つけておくと無難らしい
 
var target = $(href == "#" || href=="" ? "href":href);
三項演算子
条件式  ? true : false
|| href==""はなくても大丈夫
おまじない的らしい
 
ただうっかりリンク先をダミーで#のままにしてるとこういうの通すとエラーがでるので
それ防止でこの前半があるらしい
さっぱりわからないな
 
このへんは「後で使いまわす」ことを考え変数にvarをつけておくといいらしい。
 

animationの引数を変数にしておくのも手。
 
  $(function(){//するする戻る
   $('a[href^="#"]').on('click',function(){
    var speed = 500;
    var hogemove = "swing";
    var href= $(this).attr("href");//いまクリックされたthisのアトリ(属性)であるhrefの中身を入れている(今回は#top)
    var target = $(href == "#" || href=="" ? "href":href);//var target = $(href);がやりたい
    var pos = target.offset().top;
    
    $('html,body').animate({scrollTop:pos},speed,hogemove);
    return false;
   });
  });
 

三項演算子部分はここだけ
href == "#" || href=="" ? "href":href
 
それを
$()のなかに入れている形
 
 
if(href="#" || href=""){
}
というのと同じ
 
PR

コメント

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30