bata's log

フロントエンド系のTipsとかメモ

要素の位置を取得する

縦長スクロール型のページでナビゲーションに現在位置を表示したり、ある特定の位置までスクロールしたらイベントが発火したりするコンテンツを作る場合、該当の要素の位置を取得するという工程が必要になります。

この部分だけを切り出してユーティリティ的に使えるようにしてみました。

HTML

<div id="hoge">hoge</div>
<div id="fuga">fuga</div>
<div id="fugo">fugo</div>

JavaScript

function GetElementsPosition(idAry,adjustPosition){
    this.idAry = idAry;
    this.len = this.idAry.length;
    this.adjustPosition = adjustPosition || 0;
    this.hashTable = this.generateObj();
}

GetElementsPosition.prototype = {

    //連想配列を生成
    generateObj: function(){
        var hashObj = {};
        for(var i = 0; i < this.len; i++){
            hashObj[this.idAry[i]] = this.getPosition(i) + this.adjustPosition;
        }
        return hashObj;
    },

    //要素の位置を取得
    getPosition: function(i){
        var el = document.getElementById(this.idAry[i]);
        if(el){
            return el.offsetTop;
        }
    }

}

取得したい要素を引数から受け取り、[要素名]:[位置の値]の形の連想配列を生成します。

実行

window.onload = function(){
    //初期化
    var hoge = new GetElementsPosition(['hoge','fuga','fugo']);
    //配列の呼び出し
    console.log(hoge.hashTable);
}

引数に取得したい要素名(id名)を入力して初期化します。 生成した配列を呼び出す時は[インスタンス名].hashTable

データが返ってきます。

{hoge: 8, fuga: 24, fugo: 40}