• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ページ全体をスクロールするAjaxで真ん中から)

ページ全体をスクロールするAjaxで真ん中から表示されるサイトを作成したい

このQ&Aのポイント
  • ページ全体をスクロールできるscrollsmoothly.jsを使用してサイトを構築していますが、表示が左上からしかされない問題があります。
  • scrollsmoothly.jsの設定では、スタートの位置を変更することができず、常にsection1から表示されます。
  • 理想的には、スタートの位置を任意のセクションに指定し、斜めに移動するような動作を実現したいです。biwako-koyo.comのサイトが参考になります。

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

どうせ前の質問で、「scrollsmoothly.js」改造してるんだから、 ついでに、場当たり的にいじっちゃえば、 「scrollsmoothly.js」のfunction init(){}の最後 48行目あたりに、    function init(){     // ページ内リンクにイベントを設定する     setOnClickHandler();     // 外部からページ内リンク付きで呼び出された場合     if(incomingHash){      if(window.attachEvent && !window.opera){       // IEの場合はちょっと待ってからスクロール       setTimeout(function(){scrollTo(0,0);setScroll('#'+incomingHash);},50);      }else{       // IE以外はそのままGO       scrollTo(0, 0);       setScroll('#'+incomingHash);      }     } //ここに追加か、------------------------------ setScroll("#section5"); setTimeout(function(){setScroll("#section1");},1000); //1秒後に移動    } このスクリプトをもっと汎用的にクラス化したいところだけど、あまり弄ると別物になっちゃう。

ritzkun
質問者

お礼

おぉぉぉぉ!! できました!! 前回の質問の際も教えていただいて 今回も解決に導いていただき誠にありがとうございます!! 場当たり的にいじってみたいのですが どこをどうやっていじればいいのかすら検討がつかないのです・・・。 ご面倒おかけします・・・。 もうひとつこの「scrollsmoothly.js」で質問がありますので またお時間があるときにご教授いただければ幸いです。

その他の回答 (2)

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

#1 です。 http://biwako-koyo.com/ が右下から左上へスクロールする形だったので、右下に存在する #section5 から 左上の #section1 にスクロールする動作を期待しているのだと思っていました。 「スタートの位置」と「最初」のニュアンスがわからなくて混同していたのですが、私が想定した動作ではなかったようですね…。 > #section5まで読み込んだ時点で移動したいという意味です。 イメージとしては、こういうことですか? document.getElementById('section5').addEventListener('load', function () { // #section5 が読み込み完了したら  // #section5 までスクロールする }, false); loadイベントハンドラはdiv要素に定義できないので、これは実際には動きません。 仕方ないので、window.setTimeout で一定時間置きに #section5 が読み込まれたかをチェックします。 --- (function () {  var elementId, timeId;  function isLoadedElement () {   if (document.getElementById(elementId)) {    clearTimeout(timeId);    console.log('#section5 is loaded'); // ここに #section5 までスクロールする処理を入れる   } else {    timeId = setTimeout(isLoadedElement, 100);   }  }  elementId = 'section5';  isLoadedElement(); })(); ---

ritzkun
質問者

補足

回答ありがとうございます☆ 申し訳ございません・・・。詳しく教えていただいているのですが どこにご教授いただいたコードをいれればいいのかわかりません。 試してみたのですが動きませんでした・・・。 試した方法としましては、 ------------------------------------------------------------ (function () {  var elementId, timeId;  function isLoadedElement () {   if (document.getElementById(elementId)) {    clearTimeout(timeId);    console.log('#section5 is loaded'); // ここに #section5 までスクロールする処理を入れる   } else {    timeId = setTimeout(isLoadedElement, 100);   }  }  elementId = 'section5';  isLoadedElement(); })(); を、scrollsmoothly.jsの中にある (function(){ var easing = 0.20; var interval = 100; の前にそのままコピペしました。 教えていただいた ------------------------------- document.getElementById('section5').addEventListener('load', function () { // #section5 が読み込み完了したら  // #section5 までスクロールする }, false); loadイベントハンドラはdiv要素に定義できないので、これは実際には動きません。 仕方ないので、window.setTimeout で一定時間置きに #section5 が読み込まれたかをチェックします。 ------------------------------- のあたりが、よくわかりません・・・。 初心者に毛が生えた程度ですので、初歩的な質問ばかりで申し訳ございません・・・。

  • think49
  • ベストアンサー率59% (285/482)
回答No.1

スタートが section5 で最初が section1 って…。 #section5 から #section1 にスクロールしたい、ってことでいいでしょうか? 1. body.style.display = 'none'; 2. window.onload 時に #section5 までスクロール 3. body.style.display = 'block'; 4. #section1 までスクロール

ritzkun
質問者

補足

回答ありがとうございます。 申し訳ないのですが、ご教授いただいた内容がわかりません・・・。 イメージしておりますのは、最初は#section1から読み込んでも #section5まで読み込んだ時点で移動したいという意味です。 hogehoge.com/#section5 でそれは可能なのですが hogehoge.com/でそれを実現させたいです・・・。

関連するQ&A