CSSのoverflowがスクロール可能に設定されているオブジェクト内の指定したNodeまでスクロールさせる。
スクロール方向の判別は、CSSのoverflowの設定を見て行うため、スクロールさせるオブジェクトには「overflow-x」と「overflow-y」を明示的に設定する必要がある。
※この2つを一括で指定する「overflow: auto;」は不可。どちらかは「hidden」に設定すること。
スクロールバックの値にPC用(px)とスマホ用(vw)を渡した場合、スマホかどうかの判定は、klib独自変数の cellPhone で行っているので、実機で動作確認をする必要がある。
なお、PC上で動作確認をしたい場合は、klib.jsを読み込んだあとにJavascriptで一時的に「cellPhone = true」として上書きすることで可能となる。
スクロールさせるNodeにはCSSで「position: relative;」を設定する。スクロールNode内での、対象Nodeの位置関係を取得するために必要。
シンプルな囲い構造のスクロール内にあるNodeを対象とするサンプル。
HTML :
<div id="sample1">
<div>BOX</div>
<div>BOX</div>
<div id="target_box">TARGET BOX</div>
<div>BOX</div>
<div>BOX</div>
</div>
Sass :
#sample1 {
position: relative;
display: flex;
width: 600px;
overflow-x: scroll;
overflow-y: hidden;
& > div {
flex: none;
width: 250px;
}
}
Javascript :
$scrToNodeInObj($id('target_box'),0);
$scrToNodeInObj($id('target_box'),0,'center');
$scrToNodeInObj($id('target_box'),new Array(40,'5vw'),'end');
複数層の囲いの中にあるNodeを対象とする。内部のNodeにはCSSでmarginも設定されている例。
HTML :
<div id="sample2">
<div>
<div>BOX</div>
<div>BOX</div>
<div id="target_1">TARGET 1</div>
<div>BOX</div>
<div>BOX</div>
<div id="target_2">TARGET 2</div>
</div>
</div>
Sass :
#sample2 {
position: relative;
width: 250px;
overflow-x: hidden;
overflow-y: scroll;
& > div {
display: flex;
flex-wrap: wrap;
& > div {
flex: none;
width: 250px;
margin: 30px 0 0;
}
}
}
Javascript :
$scrToNodeInObj($id('target_1'),0);
$scrToNodeInObj($id('target_1'),new Array(30,'5vw'));
$scrToNodeInObj($id('target_1'),0,'center');
$scrToNodeInObj($id('target_1'),0,'end');
$scrToNodeInObj($id('target_2'),50,'end');