質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

スクロールに合わせて、divで囲んでいる部品も一緒に移動させたい。

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,840

sekayama

score 23

スクロールに合わせて、divで囲んでいる部品も一緒に移動させたい。 可能ならサンプルをご提示してほしいです。

フレームワークで使用可能なものとしては、Bootstrap v2.3、jQuery v1.8になります。

<div id="main">
  <div id="left_content">
  </div>
  <div id="right_content">
    スクロールに合わせてここが移動
  </div>
</div>

<script>
  $(function(){
    // ここで何か
  });
</script>

以下補足します。 right_contentにはログインフォームが入ります。 left_contentがサイトの説明になり、heightがとても長いです。 そのため下にスクロールする際に、ログインフォームが移動できればと考えております。

また、 「あるところまでスクロールされたら固定」にできたらと思います。 scroll開始位置と終了位置では、違和感ないように固定したいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rossi46hiro

    2015/12/14 15:13

    right_contentに入るのはサイドメニューのようなものですか?
    移動させる方法としては、最初から固定、あるところまでスクロールされたら固定、ぬるぬる追従して移動など、いくつかやり方があると思いますが、right_contentの内容によってどれが適切か決まるかと思います。

    キャンセル

回答 4

+1

仕組みとしてはhttp://www.html5-memo.com/jquery-tips/jquery07/と同じ理屈でできるんじゃないですかね?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

一緒にスクロールとは、画面のどこかに固定し、表示させ続けるという認識で良いですか?

このサイトを参考に(ほぼコピペ)作ったものですが。

以下を追加し、「// ここで何か」のところでstartFix()を呼び出せば、動きます。

var fixMy = 0;
var fixMx = 0;
var firstFlag = true;
function startFix(){
// 場所を固定したいものをここで指定する
// fixedLAYER(固定したい要素のid , 固定する場所 , x座標 , y座標)
// 固定する場所
// →rightTop:右上 rightBottom:右下 leftTop:左上 leftBottom:左下
// x(y)座標 両方0にするとはみ出るので座標をずらします。
// 固定する場所が起点で、座標を決める

//例:fixedLAYER('fixedLay0','rightTop',-350,20);
fixedLAYER(固定したい要素のid , 固定する場所 , x座標 , y座標);
}

function fixedLAYER(layName,posString,offSetX,offSetY){
if(!window.fixedLAYER[layName]){
//--ブラウザ判定
this.ie = !!document.all
this.n4 = !!document.layers
this.w3c = !!document.getElementById
this.ua = navigator.userAgent
this.mac45 = ua.indexOf('MSIE 4.5; Mac_PowerPC') != -1
this.mac5 = ua.indexOf('MSIE5.0;Mac_PowerPC') != -1
this.macie = ua.indexOf('Mac_PowerPC') !=-1 && ie
this.moz = ua.indexOf('Gecko') !=-1
this.opr = !!window.opera
if(this.ie&&!(this.mac45)){
window.onscroll = window.onresize = startFix
}

if(this.n4)
window.onresize = function(){ location.reload() }
window.fixedLAYER[layName] = true
}

offSetX = parseInt(offSetX,10)
offSetY = parseInt(offSetY,10)

if( posString == 'rightTop' ){

if(this.ie&&!this.opr)
offLeft = document.body.clientWidth + offSetX
else offLeft = window.innerWidth + offSetX
if(this.ie&&!this.opr)
offTop = offSetY
else offTop = offSetY

} else if( posString == 'rightBottom' ){

if(this.ie&&!this.opr)
offLeft = document.body.clientWidth + offSetX
else offLeft = window.innerWidth + offSetX
if(this.ie&&!this.opr)
offTop = document.body.clientHeight + offSetY
else offTop = window.innerHeight + offSetY

} else if( posString == 'leftBottom' ){

if(this.ie&&!this.opr)
offLeft = offSetX
else offLeft = offSetX
if(this.ie&&!this.opr)
offTop = document.body.clientHeight + offSetY
else offTop = window.innerHeight + offSetY

} else if( posString == 'center' ){

if(this.ie&&!this.opr)
offLeft = document.body.clientWidth/2 + offSetX
else offLeft = window.innerWidth/2 + offSetX
if(this.ie&&!this.opr)
offTop = document.body.clientHeight/2+ offSetY
else offTop = window.innerHeight/2 + offSetY

} else {

if(this.ie&&!this.opr)
offLeft = offSetX
else offLeft = offSetX
if(this.ie&&!this.opr)
offTop = offSetY
else offTop = offSetY

}

offLeft = parseInt(offLeft,10)
offTop = parseInt(offTop,10)

if(document.all&&!this.opr){
var mx = document.body.scrollLeft + offLeft
var my = document.body.scrollTop + offTop
} else {
var mx = self.pageXOffset + offLeft
var my = self.pageYOffset + offTop
}
if(this.ua.toLowerCase().indexOf('chrome') != -1){
    if(!firstFlag){
        mx = mx + "px";
        my = fixMy;
    }else{
        mx = mx + "px";
        my = my + "px";
    }
}
if(document.getElementById){ //e5,e6,n6,n7,m1,o6,o7,s1用
document.getElementById(layName).style.left = mx
document.getElementById(layName).style.top = my
} else if(document.all){ //e4用
document.all(layName).style.pixelLeft = mx
document.all(layName).style.pixelTop = my
} else if(document.layers) //n4用
document.layers[layName].moveTo(mx,my)

if(!(this.ie&&!this.mac45) || this.opr){
clearTimeout(fixedLAYER[layName])
fixedLAYER[layName]=setTimeout("fixedLAYER('"+layName+"','"+posString+"','" +offSetX+"','"+offSetY+"')",1000)
}
if(firstFlag){
    fixMy = my;
    firstFlag = !firstFlag;
}
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こういうことですか?

http://smileworks.biz/jquery/1866

Bootstrapを存じませんが。。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

「あるところまでスクロールされたら固定」であればこんな感じでしょうか。
ただ、フッターにかなり高さのあるデザインだと、下記のコードだと固定されたまま食い込んでしまうので調整が必要です。

function rightcontentMoving(){
  var scrollTop = $(window).scrollTop();
  if(scrollTop > fixedStartPoint - fixedTop){
    $("#right_content").css({"position":"fixed", "top":fixedTop + "px"});
  }else if(scrollTop < fixedStartPoint - fixedTop){
    $("#right_content").css({"position":"static", "top":0});
  }
}

var fixedStartPoint = //ここに#mainより上のコンテンツのheightを指定(margin-bottomなどが指定されている場合それも含める)
var fixedTop = 20 //固定したときのtop値
$(window).on("load scroll resize", rightcontentMoving);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる