jQuery .click()関数について

このQ&Aのポイント
  • jQuery .click()関数を使用することで、アンカーへのリンク時に不要なURLの付加を回避することができます。
  • 特定のアンカーへのリンクをクリックした場合に、スムーズなスクロールで移動することができます。
  • ただし、現在のコードでは、現在のページ内のアンカーのみに対応しており、別のページのアンカーには対応していません。
回答を見る
  • ベストアンサー

jQuery .click()関数について

お世話になります。 アンカーにリンクする際URLに#example等が付いてしまうのを回避する為調べた所 $(function(){ // #で始まるアンカーをクリックした場合に処理 $('a[href^=#]').click(function() { // スクロールの速度 var speed = 400;// ミリ秒 // アンカーの値取得 var href= $(this).attr("href"); // 移動先を取得 var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール $($.browser.safari ? 'body' : 'html').animate({scrollTop:position}, speed, 'swing'); return false; }); }); と、大変参考になるJavaScriptコードがありました。 このコードをそのまま流用させて頂いた所ページ内リンクについては解決しましたが #から始まるアンカーのみのクリックイベントで記述されてますので 別ページのアンカーに対応できません。 (<a href="../test#example">とリンクを貼っています。) 別ページのアンカーも同じく#example等表示させたくないのですが その場合はどのような記述をすれば良いのでしょうか。 どうか知恵を貸して下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sanzero
  • ベストアンサー率56% (58/102)
回答No.2

#1さんの回答にもありますが、いったんsessionStorageに保存して 遷移先でその値を取得しスクロールさせます。 //遷移元のjavascript jQuery(function($){ $('a[href^=#]').click(function() { // アンカーの値取得 var href= $(this).attr("href"); smoothScroll(href); return false; }); $('a:not([href^=#])').click(function(e) { //通常の動作をストップ e.preventDefault(); // アンカーの値取得 var href = $(this).attr("href"); var tmp = href.split("#"); var url = tmp[0]; var hash = "#" + tmp[1]; //アンカーリンクを一時保存 sessionStorage.setItem("hash", hash); //遷移 location.href = url; }); }); function smoothScroll(href){ var speed = 400;//スクロール速度(ミリ秒) var target = $(href == "#" || href == "" ? 'html' : href);//移動先オブジェクト console.log(target); var position = target.offset().top;//移動先のY座標 /* スムーススクロール */ //$($.browser.safari ? 'body' : 'html').animate({scrollTop:position}, speed, 'swing'); var body = 'body'; if (navigator.userAgent.match(/MSIE/)) { /*IE6.7.8.9.10*/ body = 'html'; } $(body).animate({scrollTop:position}, speed, 'swing'); return false; } //遷移先 jQuery(function($){ var hash = sessionStorage.getItem("hash"); if(hash){ sessionStorage.removeItem("hash"); smoothScroll(hash); } }); function smoothScroll(href){ var speed = 400;//スクロール速度(ミリ秒) var target = $(href == "#" || href == "" ? 'html' : href);//移動先オブジェクト var position = target.offset().top;//移動先のY座標 /* スムーススクロール */ //$($.browser.safari ? 'body' : 'html').animate({scrollTop:position}, speed, 'swing'); var body = 'body'; if (navigator.userAgent.match(/MSIE/)) { /*IE6.7.8.9.10*/ body = 'html'; } $(body).animate({scrollTop:position}, speed, 'swing'); return false; }

mayomayo123
質問者

お礼

物の考えから実際のコードまで示して頂いて感謝の言葉もありません。 流用させて頂いた所、して欲しいと思った動きをそのまま再現してくれました。 もっと勉強しコードを理解できるよう努めます。本当にありがとうございます。

その他の回答 (1)

回答No.1

別ページの#xxxを消しちゃったら、その別ページで表示する際にどこだかわからなくなっちゃうからね。 ぱっと思いつくのは別ページのリンクだったらクッキーかなんかに選択された#xxxを保存して、 別ページでクッキーから#xxxを取得して、そこまでスクロールさせる動きかな?

mayomayo123
質問者

お礼

>別ページの#xxxを消しちゃったら、その別ページで表示する際にどこだかわからなくなっちゃうからね。 その考え方はありませんでした。 外ページに移動する際の参考サイトが中々見つからなくて苦戦してます。

関連するQ&A

  • jQueryで困っています。教えてください。

    スムーススクロールを導入しようと、いろいろ調べて以下のものを参考にさせていただこうと考えています。どうゆう流れになっているのかを調べて分からないことがあったので投稿させていただきました。var target = jQuery(href == "#" || href == "" ? 'html' : href);この行の意味がわかりません。また、targetに何が代入されているのか分かりません。回答よろしくお願いします。 jQuery-------------------------------------------- //スムーズスクロール jQuery(function(){ // #で始まるアンカーをクリックした場合に処理 jQuery('a[href^=#]').click(function() { // スクロールの速度 var speed = 1000; // ミリ秒 // アンカーの値取得 var href= jQuery(this).attr("href"); // 移動先を取得 var target = jQuery(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール jQuery('body,html').animate({scrollTop:position}, speed); return false; }); });

  • クリックするとするするとスクロールさせたい(JS)

    Javascript勉強中です。 画像のリンクをクリックすると、同一ページ内の任意の場所までするすると、 スクロールするような機能を作成したいのです。 現状、通常のaタグでくくったリンクであれば、実現できています。 ■HTML <a href="#top"><div><img src="./img/naviHome.png" name="home"></div></a> <a href="#recruit"><div><img src="./img/naviRecruit.png" name="recruit"></div></a> <a href="#priceList"><div><img src="./img/naviPriceList.png" name="priceList"></div></a> ■javascript <script type="text/javascript"> <!-- //aリンクをクリックすると、同一ページ内の任意のnameタグまでするするとスクロールする $('a[href^=#]').click(function() { // スクロールの速度 var speed = 800; // アンカーの値取得 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; }); --> </script> ここから、画像が選択されたことを示すために色をかえた画像に切り替えたいため、 下記のJavascriptを実行させたいのです。 //選択されたことを明示するため画像をいれかえる// document.home.src="./img/selectedHome.png" aリンクをなくして、以下のようにしてしまうと、「$('a[href^=#]').click(function() 」が動作しません。 うまく、するするとスクロールさせながら、画像を入れ替える処理ができないものでしょうか? <a href="javascript: fncNaviLink('#top');"><div><img src="./img/naviHome.png" name="home"></div></a> function fncNaviLink(link) { document.home.src="./img/selectedHome.png" location.href = link; }

  • jqueryの$()について

    貴重な場を借りて質問させていただきます。下記のコードはページ内リンクをさせるコードなのですが、※他のサイトからコピペしてます。 2点ほどお聞きしたいことがあります。 一点目はfunction()の()内に$をいれているのはなぜでしょうか。私が書く際にはつけたことがなくて気になりました。 二点目は、targetという変数を作りったのにも関わらず、それをまた$()内 にいれ、$(target)としている理由がわからず、おしえていただけませんでしょうか。 jQuery(document).ready(function($) { $('a[href^=#]').click(function() { if ($(this).hasClass('scroller')) { var target = $(this).attr('href'); if (target != '#') { target = $(target).offset().top; $('html,body').animate({ scrollTop:target },1500,'quart'); } else { $('html,body').animate({ scrollTop:0 },1500,'quart');

  • クリックファンクションがうまくいかない

    class="link-block"のついたliつまりリストをクリックした時、.removeClass('active');でactiveというクラスを削除するようにしたかったのですが、 なぜかリストをクリックしても反応せずに削除されません。 id="maware"のliだけは、反応して削除されます。 CSSにとしてもだめでした。どうもclass="link-block"のついたリストをクリックできていないのかと思っているのですが、上下の順番でクリックできていないのでしょうか? .link-block { display: block; z-index: 99999; } ・ソースコード <div class="kuruttosuru">aaa</div> <!-- drawermenu --> <!-- drawermenu-button --> <div class="modal-button-wrap"> <a class="animation-hover action-hover modal-button-wrap__button"> <span class="modal-button-wrap__border"></span><!-- border --> <span class="modal-button-wrap__border"></span><!-- border --> <span class="modal-button-wrap__border"></span><!-- border --> </a> </div> <!-- drawermenu --> <nav> <div id="nav__drawermenu-wrap"> <ul> <li id="maware"><a class="link-block" href="#js-about-me">ABOUTME</a></li> <li><a class="link-block" href="#js-about-me"><span class="gotootherpage"><img class="top-gnav__link-sixth__goto-other-page" src="img/common-img/goto-other-page.svg" alt="goto-other-page-image"></span>ABOUTME</a></li> <li><a class="link-block" href="#js-gallary">GALLARY</a></li> <li><a class="link-block" href="#js-gmap">MAP</a></li> <li><a class="link-block" href="#js-contact">CONTACT</a></li> <li><a class="link-block" href="http:///index.html">TOP</a></li> <li><a class="link-block" href="http:///index.html">BLOG</a></li> </ul> </div> </nav> <!-- /drawermenu --> ・JS <script> $(function(){ $('.kuruttosuru').on('click', function() { $(this).addClass('active'); return false; }); }); </script> <!-- drawermenu-button-three-whiteline-クリックした際にクルット回るアクション --> <script> $(function(){ $('.modal-button-wrap__button, .link-block').on('click', function() { $(this).removeClass('active'); return false; }); }); </script> ・下記のJSがあると、うまくいかず下記をコメントアウトするとうまくいきます。 下記に何かおかしくなる要素があるのでしょうか? <!-- ページ内遷移 --> <script> $(function(){ // #で始まるアンカーすべてをクリックした場合に処理 $('a[href^=#]').click(function() { // スクロールの速度 var speed = 1000; // ミリ秒 // アンカーの値取得 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; }); }); </script> _____________

  • jqueryの変数を関数の外に出す方法

    すみません非常に困っております。 setMove()の中のspeedを関数の外に出したいのですが、 どのようにすればよろしいでしょうか。 引数などを使用すればいいのだとおもいますが、 やり方がわからず。申し訳ございませんがご教示のほど よろしくお願いいたします。 var target = $('ul#mainNavi li').find('.light'); var speed = 1000; var t = setInterval(setMove() , speed); function setMove(){ target.animate({left:600} , 1000 , 'swing' , function(){ $(this).css('left' , -118) ; speed = 3000; }); }

  • jqueryでリンクを無効にしたあとに有効にする方法

    jqueryで下記のコードでページ内のリンクを全て無効にしましたが、有効にする方法がわからずに困っております。 どなたかご教授ください。宜しくお願いいたします。 ↓コード↓ $("a[href]").click(function(e){e.preventDefault()}).attr("href","#");

    • ベストアンサー
    • AJAX
  • jqueryについて【初歩】

    見ていただきありがとうございます。 jqueryについて初歩的な質問です。 下記の記述は ひとつのボックスに対して内包するaタグのリンクを指定してボックスごとリンクにしているスクリプトになりますが、これにtargetの属性を付加させたいです。 しかしいろいろ試しましたがうまくいかず、ツンでます… jqueryに精通している方宜しければご回答いただけませんでしょうか? よろしくお願いいたします。 $(function(){ $(".sampleBox").click(function(){ window.location=$(this).find("a").attr("href"); return false; }); });

  • jqueryの質問です

    jqueryで .tes01と.tes02は同じ番目をセットと考え .tes01 の画像をクリックした時に .tes02のリンクをクリックした状態にしたいと思っています。 .tes02のURLの取得は出来たのですがそれ以降が出来ないので教えてもらえますでしょうか。 $(function(){ $("ul.tes01 li").click(function(){ var tes01li = $(this).index(); var tes02li = $(".tes02 li").find("a").eq(tes01li).attr("href"); tes02li.click(); }); }); <ul class="tes01"> <li><img src="img01"></li> <li><img src="img02"></li> <li><img src="img03"></li> <li><img src="img04"></li> </ul> <ul class="tes02"> <li><a href="#link01">link01</a></li> <li><a href="#link02">link02</a></li> <li><a href="#link03">link03</a></li> <li><a href="#link04">link04</a></li> </ul>

  • 【jQuery】領域外をクリックでメニューを閉じる

    質問させて頂きます。 現在、webサイトを制作しておりまして、 メニューボタンを押すとメニューが開閉されるものを作ろうとしております。 色々調べて試行錯誤しているのですが、なかなかうまくいきません。 下に記述のものは、現在の状態です。 メニューの開閉はできるのですが、閉じるためには再度メニューボタンを押さなければなりません。(メニューの中のリンクを押しても表示されたままです) これをどこかしらクリックで閉じる様にしたいのですが、 どうすればいいでしょうか。 ちなみにメニューボタンで動作を行うのはスマホ用で、 PC版は通常のスティッキーヘッダーメニューのレスポンシブでの切り替えです。 [ html ] <header id="top-head"> <div class="inner"> <span class="menu-toggle">メニュー</span> <nav id="global-nav"> <ul> <li><a href="#1へのリンク">メニュー1</a></li> <li><a href="#2へのリンク">メニュー2</a></li> <li><a href="#3へのリンク">メニュー3</a></li> <li><a href="#4へのリンク">メニュー4</a></li> <li><a href="#5へのリンク">メニュー5</a></li> <li><a href="#6へのリンク">メニュー6</a></li> </ul> </nav> </div> </header> [ script ] $(function(){ $(".menu-toggle").on("click", function() { $(this).next().slideToggle(); }); }); $(window).resize(function(){ var win = $(window).width(); var p = 768; if(win > p){ $("#global-nav").show(); } else { $("#global-nav").hide(); } }); こちらに手をくわえるのでもよいですし、 別のいいやり方があるのであればそちらでも構いません。 ご教示の程、よろしくお願い致します。

  • jQueryのclickイベントハンドラ

    最近jQueryを勉強中でして、練習の意味で自分で以下のようなページを作ってみました。 【ページの内容】 犬、猫、鳥の画像ボタンを配置して、クリックすると各ボタンのalt属性をアラート表示する 【実際のhtml】 <div class="header"> <ul class="menu"> <li><a href="index.html" id="btn1"><img src="dog.png" alt="Dog"></a></li> <li><a href="index.html" id="btn2"><img src="cat.png" alt="Cat"></a></li> <li><a href="index.html" id="btn3"><img src="bird.png" alt="Bird"></a></li> </ul> </div> 【実際のscript】 $(function(){ var btn1 = $('#btn1'); var photo1 = btn1.find('img'); var name1 = photo1.attr('alt'); btn1.click(function(){ alert(name1); }); var btn2 = $('#btn2'); var photo2 = btn2.find('img'); var name2 = photo2.attr('alt'); btn2.click(function(){ alert(name2); }); var btn3 = $('#btn3'); var photo3 = btn3.find('img'); var name3 = photo3.attr('alt'); btn3.click(function(){ alert(name3); }); }); 上記で一応やりたいことは再現はできるのですが、scriptが冗長なのでもっと短くしたいです。 しかしどんなスクリプトにすればよいかわかりません。 宜しければアドバイスお願いいたします。

専門家に質問してみよう