<div class="body">
<div class="box" id="itemA"></div>
<div class="box" id="itemB"></div>
<div class="box" id="itemC"></div>
<div class="box" id="itemD"></div>
<div class="box" id="itemE"></div>
<div class="box" id="itemF"></div>
</div>
.body{
display: flex;
width:6000px;
background: yellow;
height:50vh;
}
.box{
width: 100px;
height: 100px;
background: skyblue;
margin: 10px 100px;
}
#itemA{
width: 200px;
margin: 10px 200px;
}
#itemB{
height: 150px;
margin: 10px 50px;
background: red;
}
#itemC{
height: 50px;
width: 150px;
background: orange;
}
#itemD{
height: 70px;
width: 300px;
margin: 10px 200px;
opacity: .5;
}
#itemE{
height: 150px;
width: 150px;
margin: 10px 150px;
background: white;
}
#itemF{
height: 200px;
width: 100px;
background: black;
color: white;
}
const getElementRectX = (elem) => {
let elemRect = document.getElementById(elem).getBoundingClientRect()
return elemRect.left;
}
let RectData = {};
let idData = ["itemA","itemB","itemC","itemD","itemE","itemF"];
//TODO自動的にidを全件取得できる様にする
let result = idData.map((value) => {
let k = value;
let v = getElementRectX(value);
RectData[k] = v;
document.getElementById(k).innerHTML = "x:" + v;
})
console.log(RectData)
//スクロール系の関数で便利
//scrollToTop("itemB") を実行すると itemBまでスクロールできます
function scrollToTop(elem) {
let x = RectData[elem]
scrollTo(x, 0);
}
//要素を中央に持っていきたい時
const centeringRect = (elem) => {
let item = document.getElementById(elem).clientWidth;
let x = (window.innerWidth - item) / 2
return x
}
//scrollToTop("itemB") を実行すると itemBまでスクロールできます
function scrollToCenter(elem) {
let itemRect = RectData[elem]
console.log(itemRect)
let additionalCenteringRect = centeringRect(elem)
console.log(additionalCenteringRect)
let x = itemRect - additionalCenteringRect;
console.log(x)
scrollTo(x, 0);
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.