• 締切済み

ページの先頭へスクロールして戻るには

こんにちは。 HTMLでボディタグ直後に<a name=pagetop"></a>などとしておき、ページの下部において「ページの先頭へ」とか「ページトップ」とか「PAGETOP」とかというリンクを設け、そのリンクをクリックすればページの一番上に戻らせるというHTMLのみでできる方法がありますが、そうでなくて、これをスクロールさせながら戻らせるようにしたいんです。 例えば以下のホームページが実例としてあります。 「ページトップ」という文字をクリックすると上記のようになります。 http://www.yamaha.co.jp/siteusage/index.html もちろん、このサイトのやり方と同じでなくても構いません。よりスマートなソース・やり方で出来ればそれが一番と思います。 JavaScriptは初心者でお恥ずかしいですが、これはぜひとも出来るようになりたいです。頑張ります。 どなたかどうぞ教えてください! 宜しくお願いいたします。

みんなの回答

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.5

BlueRayです。 もう、ほぼ結果は出揃っているかもしれませんが chuparkさんがNo3で回答されているソースをIEのみで動作するように最小限に抜粋した物が、No2で回答したソースです。 あとは、jsソースを参考にIE以外での現在位置を取得する分岐をつければ結局は同じようなものになります。 ※これは、chuparkさんがNo4で説明されていますね。 chuparkさんがすでに説明済みなので当方の回答の補足をさせていただきました。

acidend
質問者

お礼

BlueRayさん、再度有難うございました。 「IE以外での現在位置を取得する分岐」というのが必要ということですね。 一つ前のchuparkさんの投稿に書かせて頂いたように、ここから先は自分でやってみようと思います。 色々と教えて頂き有難うございました。

  • chupark
  • ベストアンサー率41% (90/218)
回答No.4

 何度も登場して恐縮ですが。  #1にものすごく単純に書かせていただいた window.scrollTo() は一応 e4/N4 以上で使用できるはずです。  あとは、それをタイマーなりループなりで繰り返してスクロールしていくのだと思うのですが、あのサイトを見るとトップに近づくにつれてスピードが落ちるんですね?  現在のスクロール位置などをスクリプト内で  document.body.scrollLeft  document.body.scrollTop  などで取得してスクロールの到達地点までの相対位置に合わせた移動幅でスクロールをすればいいのかと思います。  あのサイトのソースをそのまま使うのが忍びなければ要所要所を参考に組んでみてはいかがでしょう?  

acidend
質問者

お礼

chuparkさん、返事遅くなり申し訳ないです。 その間色々と試してきたのですが、おっしゃるとおりIE4とNN4以上で動作するようにできました。 私の方でよくわかっていなくて動かないように思っていました。ごめんなさい。 あとのことですが、スクロールスピードがページトップに近づくほどに遅くなるという動きですが、これは初心者の私がこのサイトでご教授頂く方とやりとりして完成させようと思ったら、とても時間がかかり、またお手間過ぎると感じましたので、とりあえずここから先は自分で考えていこうと思います。 色々と有難うございました。

  • chupark
  • ベストアンサー率41% (90/218)
回答No.3

再挑戦です^^; var Mac = navigator.appVersion.indexOf('Mac',0) != -1; var Win = navigator.appVersion.indexOf('Win',0) != -1; var IE = getBrouwserName() == 'Explorer'; var NN = getBrouwserName() == 'Netscape'; var Moz = navigator.userAgent.indexOf("Gecko") != -1; var VER = parseInt(navigator.appVersion); var ver = navigator.appVersion; var Vmajor = parseInt(navigator.appVersion); // ex. 3 var Vminor = parseFloat(navigator.appVersion); // ex. 3.01 var MacIE5 = ((Mac && navigator.appVersion.indexOf('MSIE 5',0) != -1) || (Mac && IE && VER > 4)); var MacIE4 = ((Mac && navigator.appVersion.indexOf('MSIE 4.',0) != -1)); var MacIE3 = ((Mac && navigator.appVersion.indexOf('MSIE 3.',0) != -1)); var MIE4 = (Mac && IE && VER == 4); var WinIE = (Win && IE); var IE6 = (ver.indexOf("MSIE 6")>-1); var IE55 = (ver.indexOf("MSIE 5.5")>-1); var IE5 = (ver.indexOf("MSIE 5")>-1); var IE56 = (IE6||IE55||IE5); var NN40 = (NN && navigator.appVersion.indexOf('4.0',0) != -1); var pageScrollTimer; function pageScroll(toX,toY,frms,cuX,cuY) { // 020301 if (pageScrollTimer) clearTimeout(pageScrollTimer); if (!toX || toX < 0) toX = 0; if (!toY || toY < 0) toY = 0; if (!cuX) cuX = 0 + getScrollLeft(); if (!cuY) cuY = 0 + getScrollTop(); if (!frms) frms = 6; cuX += (toX - getScrollLeft()) / frms; if (cuX < 0) cuX = 0; cuY += (toY - getScrollTop()) / frms; if (cuY < 0) cuY = 0; var posX = Math.floor(cuX); var posY = Math.floor(cuY); window.scrollTo(posX, posY); if (posX != toX || posY != toY) { pageScrollTimer = setTimeout("pageScroll("+toX+","+toY+","+frms+","+cuX+","+cuY+")",16); } } function jumpToPageTop() { // 020301 if (!MacIE3 && !MacIE4 && !NN && window.scrollTo || NN && (Vminor >= 4.75) && window.scrollTo) { pageScroll(0,0,6); } else { location.hash = "top"; } } function getScrollLeft() { // 020225 if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) { return document.body.scrollLeft; } else if (window.pageXOffset) { return window.pageXOffset; } else { return 0; } } function getScrollTop() { // 020225 if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) { return document.body.scrollTop; } else if (window.pageYOffset) { return window.pageYOffset; } else { return 0; } } function getScrollWidth() { // 010317 if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) { return document.body.scrollWidth; } else if (window.innerWidth) { return window.innerWidth; } return 0; } function getScrollHeight() { // 010317 if ((navigator.appName.indexOf("Microsoft Internet Explorer",0) != -1)) { return document.body.scrollHeight; } else if (window.innerHeight) { return window.innerHeight; } return 0; } このサイトのやり方です。

acidend
質問者

お礼

chuparkさん、有難うございます。 はい、確かにYAMAHAのjsファイルを見るとこうなっていますが、これは制作会社がつくったものですからダメだと思っていましたが、これをこのまま使わずアレンジするとしても、そんなんで使っていいのですかね。 どう考えればいいのかなぁ・・・。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

多分、ほぼ同じような動きだと思います。 以下のソースをコピペして、動作して見てください。 <SCRIPT Language="Javascript"> <!-- var pTmr; function scrTop() {   scrTop_sub(6,0,0); } function scrTop_sub(fmz,X1,Y1,X2,Y2) {   var vLeft = document.body.scrollLeft;   var vTop =document.body.scrollTop;      if (pTmr) clearTimeout(pTmr);   if (!fmz) fmz = 6;   if (!X1 || X1 < 0) X1 = 0;   if (!Y1 || Y1 < 0) Y1 = 0;   if (!X2) X2 = 0 + vLeft;   if (!Y2) Y2 = 0 + vTop;   X2 += (X1 - vLeft) / fmz;   if (X2 < 0) X2 = 0;      Y2 += (Y1 - vTop) / fmz;   if (Y2 < 0) Y2 = 0;      var posX = Math.floor(X2);   var posY = Math.floor(Y2);      window.scrollTo(posX, posY);      if (posX != X1 || posY != Y1) {     pTmr = setTimeout("scrTop("+X1+","+Y1+","+fmz+","+X2+","+Y2+")",16);   } } --> </SCRIPT> <TABLE WIDTH="100%" HEIGHT="200%"> <TR><TD></TD></TR> </TABLE> <BR> <DIV ALIGN="center"><A HREF="#top" onClick="scrTop();return false;">Goto TOP</A></DIV>

acidend
質問者

お礼

BlueRayさん、有難うございます! 早速試してみました! が、私が伝えたいことを伝えきれていず、申し訳なかったのですが、WinのIE5以上、同ネスケ4.0以上、MacのIE4.5以上、同ネスケ4.7以上で動作するのが目標です。伝えていずに済みません。 このスクリプトだとWinのIE5.5ならOKでした。おそらく6以上でも大丈夫な気がします。が、たの動作条件ではどれも動きませんでした。せっかく教えてもらったのに済みません。

  • chupark
  • ベストアンサー率41% (90/218)
回答No.1

 たとえばこういうのでどうでしょう? function sc(){ var i; for(i=500;i>0;i--){ window.scrollTo(0,i); } } 数値は適当です^^;

acidend
質問者

お礼

chuparkさん、有難う御座います。 でも、スクリプトがどう考えてもえらく少ないなと思いました。 実際試したのですが、やはり動作しませんでした。 せっかくお答え頂いたのに済みません。

関連するQ&A

  • ページトップへスクロール

    webページをスクロールしていくと最後に「ページトップへ」のようなリンクがあって、クリックするとスクロールしてページトップでゆっくり止まるjavaを使用しているんですが、javaをオフにしているユーザーのために、同じリンクボタンで普通のアンカーでトップページに切り替わる(name属性を使った方法)のも併用したいのですがどうすれば良いのでしょうか。 リンク部分のソースはこれです。 <a href="javascript:pageup()">pagetop</a>

  • スクロールしてページトップへ

    「ページトップへ」のようなリンクがあって、クリックするとスクロールしてページトップでゆっくり止まるような(参考:http://www.endoritsuco.com/disc.html、http://www.mienai.com/about_orthodontics/index.html等)javacsriptを探しています。 javascriptは初心者なので、どこかでスクリプトを配布してたりすると嬉しいのですが。 書籍でも構いませんので情報をいただければと思います。

  • javascriptでスクロール

    下記のhtmlソースでjavascriptでスクロールしてトップに戻るリンクを作ったんですが、WinのIEではスクリプトが効かずnoscript内の通常のアンカーが有効になってしまいます。 Firefoxではjavascriptの有効無効を判断して思った通りに動きます。WinIEでもjavascriptが有効のときはスクロールし、無効の時は通常のアンカーになるようにするにはどうすればいいのでしょうか? WinIEはセキュリティの設定でjavascriptを有効にしてあります。 <script language=javascript> <!-- document.write('<a href="javascript:pageup()">pagetop</a>'); //--> </script> <noscript> <a href="#pagetop">pagetop</a> </noscript>

  • 同一ページの先頭へのリンク

    縦長のページの下に ▲topへ というリンクを作って、ページの先頭に戻れるようにしたいと思っています。 <a href="#top">▲topへ</a>としていますが、IE以外ではページの頭に飛んでくれません。 ▲topへ の文字の指定や枠を作るため<div><span>で囲んでいますが、それが影響しているのでしょうか? 本文はHTML4.01です。 色々見て、考えているのですが、どうしても分りません。 どうしたらページ先頭へ飛ぶように直せるでしょうか。 教えてください。よろしくお願いします。

    • ベストアンサー
    • HTML
  • <a href="#pagetop">以外での移動方法

    <a href="#pagetop">ページトップ</a>以外での、同一ページ内の移動方法を教えてください。 ページの先頭に、 <a name="pagetop"></a> を置いておいて、ページの下のほうに、 <FORM> <INPUT TYPE=button value="ページトップ" onclick="JavaScript:location.hash='#pagetop'"> </FORM> これで、移動できるのですが、これですとボタンになってしまいます。 普通のテキスト、もしくは画像にしたいのですが、どのようにしたら良いでしょうか? よろしくお願いします。

  • iframe内からのリンク

    少々複雑ですいませんがお願いします。 ・index.htmlにname="contents"でiframeを設置 ・iframe内に先頭に戻るリンクを最下部に設置したい(ここでいう先頭はページ全体のトップ) ・上記リンクを押した際にiframe内は現時点のページのまま index.html ------------- <body> ヘッダー内容 <iframe src="フレーム内ページ.html"></iframe> + + + フレーム内ページ ----------- <body> <a name="top"></top> ページの内容 + + + このままだとフレーム内ページの先頭に飛ぶのは周知なので。 条件として、 ・CSSは使用可能。 ・javascriptは使えるが、使わないですむならその方が良い。 ・環境上jQueryは不可。 ・flash他は考えない。 カテゴリが異なるのかもしれませんが;よろしくお願いします。

    • ベストアンサー
    • HTML
  • クリックするとするするとスクロールさせたい(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; }

  • 小窓を表示するとページの先頭に戻る

    ホームページビルダー9で小窓を作成しました。 縦に長いページで、ページの下部にクリックすると小窓が表示できるようになっております。 しかし、小窓が表示されるとページが先頭に戻ってしまいます。(スクロールダウンしていたのが勝手に戻ってしまう) これを防止する方法はありますか?

  • ページ内リンク アンカー

    ページ内リンクの記述について教えてください。 <A href="#top">このページの先頭へ</A>ですが <A name="top"></A>をHTML中に記述するとページ最上部の余白がなくなります。 記述しないと最上部の余白があり正常表示されます。 <A name="top"></A>を記述しなくてもよいのでしょうか。 該当ページhttp://www.geocities.jp/sinsaku102578/01/fujikawa.html よろしくお願いします。

  • x軸にはスクロールしない、ページ内リンクをスムーズにスクロールするスク

    x軸にはスクロールしない、ページ内リンクをスムーズにスクロールするスクリプトを探しています。 こだわりのページ内リンクスムーズスクロール scrollsmoothly.js http://d.hatena.ne.jp/KAZUMiX/20080418/scrollsmoothly などを色々試しまして、同ページ内のリンクはきれいに動くのを確認しました。 サイトはグローバルメニューが左にあり、横幅が広めのデザインです。 問題は、小さい画面閲覧する際、別ページからページ下部のアンカーへ飛んだ場合です。 一旦ページの最上部左に移動してからアンカーへスクロールするため、 斜め下方向へスクロールし、そこからページの先頭へ戻る場合斜め上にスクロールする 動きになります。 クライアントから動きが気持ち悪いというクレームがあったので、 x軸にはスクロールしない方法を探したのですがなかなかうまくいきません。 jQueryのサンプルなど有りましたら教えてください。