• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ページ先頭にスムーズに移動(アンカータグ不使用))

ページ先頭にスムーズに移動する方法

このQ&Aのポイント
  • アンカータグを使わずにページ先頭にスムーズに移動する方法を教えてください。
  • 試したスクリプトではページごとにスクロール量が異なり、カチカチの動きになってしまいます。
  • アンカータグが使えない状況下で、スクロールを滑らかにする方法を教えてください。

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

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.5

>IE8の時に、「エラーガ発生しましたが... あらま。 こちらでは確認できませんでしたが、まぁその程度の者です。 <a href="javascript:pageTop()">TOP</a> この書き方はよろしくないという記事をあちこちで見かけますが どうしてもと言うなら function pageTop() { O().scrollUp({}, 0); } ------------------------------------------- とりあえずこちらも置いときます。 //id'top'のみ適用 function hoge (e) { var elm = e.target || e.srcElement; if (elm.id == 'top') { O().scrollUp(e, 0); //0までスクロール } } O(document).addEvent('click' ,hoge); //リスナ追加 html <a id="top" href="#">Back to top</a>

joy_28
質問者

お礼

my--さん、 早い、ご教授ありがとうございました。 function pageTop() { O().scrollUp({}, 0); } これで、アンカータグ使用しなくても、ページトップにスムーズに移動してくれました! Flashが一番長く、その次にPHPで、javascriptは、サブウィンドウ開く位しか使ったことなかったので、今回は、大変、勉強になり、javascriptの奥深さに気付かされました。 おかげ様で、javascriptをちゃんと勉強するように、決意できました。ありがとうございました。

その他の回答 (4)

  • my--
  • ベストアンサー率89% (91/102)
回答No.4

>No.3 if (window.event) { //ココ event.cancelBubble = true; event.returnValue = false; } さっそくだけど、バグあったorz 失礼しやした。

joy_28
質問者

補足

my--さん、 コードまで書いて頂き、本当にありがとうございます! ササッと、javascriptのコードをお書きになられて、凄いですね。 頂いたコードを外部scriptの、my--.jsとし、普通に、<a herf="#top">Top</a>と記載すると、IE8、FireFox,GoogleChromeで、一瞬ではなく、スムーズに移動しました。この動きが欲しかったのです! 少し気になるのは、IE8の時に、「エラーガ発生しましたが、処理しました」とメッセージが出ますが、稼働してます。 但し、本当に申し訳ないですが、今回は、アンカータグが使えないので、<a href="#top">TOP</a>と記載できないのです。 それで、<a href="javascript:window.scroll(0,0)">TOP</a>の代わりに、<a href="javascript:pageTop()">TOP</a>と記載すれば、Y座標の0に、自動的にスムーズに移動してくれるカスタム関数 pageTop()の中身をどうしたらいいのかということで、質問させて頂いている次第です。 引き続き、ご教授頂ければ、幸いです。

  • my--
  • ベストアンサー率89% (91/102)
回答No.3

探せばありそな気はしますが。。。 上方向スクロールしか対応できてませんです。 function O(elmId) {  function Const() {   this.element = document.getElementById(elmId) || elmId;  }  Const.prototype = {   scrollUp: function (e, p) {    var end = !isNaN(p) ? p : 0;    var sTop = document.body.scrollTop || document.documentElement.scrollTop;    var dist = sTop - end;    var tId = setInterval(     function () {      var r = document.body.scrollTop || document.documentElement.scrollTop;      if (end + dist < r) clearInterval(tId);      if (parseInt(end + dist) > end)       scrollTo(0, end + (dist -= (dist > 20) ? dist * 0.08 : dist / dist));      else clearInterval(tId);     }, 10    );    if (event) {     event.cancelBubble = true;     event.returnValue = false;    }    if (e && e.preventDefault && e.stopPropagation) {     e.preventDefault();     e.stopPropagation();    }   },   setScrollUp: function (name, num) {    var self = this;    this.addEvent(name, function (e) { self.scrollUp(e, num); });    return this;   },   addEvent: function (name, func, cap) {    if (this.element.addEventListener)     this.element.addEventListener(name, func, (cap || false));    else     this.element.attachEvent('on' + name, func);    return this;   }  };  return new Const; } //3つのメソッドを使ってみる //普通にhref'#top'からid/name'top'アンカーへ function hoge (e) {  var elm = e.target || e.srcElement;  if (elm.tagName != 'A') return;  else if (elm.href.indexOf('#top') < 0) return;  var links = document.getElementsByTagName('a');  var n = links.length, pos = 0;  for (var i = 0; i < n; i++) {   if (links[i].id == 'top' || links[i].name == 'top') {    pos = links[i].offsetTop;    if (pos >= elm.offsetTop) return;    break;   }  }  O().scrollUp(e, pos); //posまでスクロール } O(document).addEvent('click' ,hoge); //リスナ追加 O('id').setScrollUp('click', 100); //位置指定してscrollUpを設置 バグがあったら勘弁。

回答No.2

> for(i=500;i>=0;i--){//決め打ちで、500pxlから開始して、0まで > window.scroll(0,i); > n=i;//500→0まで変化し、最後は、0となる > } を使う限り、スピードをコントロールするのは不可能です。他の方のは、ENDを無制限にするだけです。S_・・は間違いで、削除しても問題ありません。と言うより、そのまま使用しても、意味ないですね。 FLASHを使うか、位置情報把握して、仮想領域+表示領域の高さで止めるか、止めることを無視してほっておくてもあります。<-つまり100mmsで2、3ドットづつスクロールを繰り返す。 でなければ、IE固有(今は他のブラウザでも動くものも)を使用するてですね。アニメーション機能とかあります。 http://msdn.microsoft.com/en-us/library/ms533050(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms533112(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms535872(VS.85).aspx

joy_28
質問者

お礼

始めての質問で、サイトの使い方が不慣れで、お礼が遅れました。このたびは、ありがとうごさいました。

joy_28
質問者

補足

bakakyatapさん、 回答ありがとうございます。 1.スピードをコントロールするのは不可能です → その通りだと思います。 2.FLASHを使うか、 → Flashが使えれば、元々、Flashの出なので、簡単なのですが、使えないです。(後出しじゃんけんみたいで、すみません) 3.位置情報把握して、仮想領域+表示領域の高さで止めるか、止めることを無視してほっておくてもあります。<-つまり100mmsで2、3ドットづつスクロールを繰り返す。 → この位置情報の取得方法が理解出来てないのです。例えば、pageTopボタンとして配置した、GIFのブラウザーwindow上の位置情報をどうやって取得すれば、いいのかが理解出来てないのが問題だと思ってます。Flash/AS2.0の場合ですと、フレームに、 mc.onEnterFrame=function():Void{ this._y+=(0-this._y)/10;//目標接近スクリプト } とかなんとか書けば、現在位置から0に向かって、縦にスムーズに移動するのですが、javascriptの具体的な記載方法を、理解してないのです。引き続き、ご教授頂ければ、助かります。

  • k0021
  • ベストアンサー率26% (32/120)
回答No.1

javascriptの指定 function ptop(){scrollTo(0,0);s_ct=0;} ■html側: <a href="javascript:ptop()">Top</a> Topをクリックするとページ先頭にスムーズに移動しますが。 scrollTo(0,99999) 99999等大きな数字を指定するとページの最後に飛びますが

joy_28
質問者

お礼

始めて質問したので、サイトの使い方が不慣れで、すみません。ありがとうございました。

joy_28
質問者

補足

k0021さん、 早速のご回答ありがとうございます。 頂いた、scriptをそのまま使用し、IE8、Firefox、GoogleChromeの3つで試しました。 【結果】 いずれも、トップに移動はしますが、、<a href="javascript:window.scroll(0,0)">Top</a>と変わらず、一瞬のうちに、ページトップに移動します。 【追加の質問】 ・s_cnt=0;は何かのカウンタだと思うのですが、これは、このスクリプトの中で、どういう役割を持っているのでしょうか? ・頂いたスクリプトに、何を追加すれば、ページトップへスムーズに移動するのか、まだ、理解出来てませんので、引き続き、ご教授をお願い申し上げます。

関連するQ&A