143

非常によくある質問があります。問題は、明示的な解決策がどこにも見つからないことです。

アンカーに関して 2 つの問題があります。

主な目標は、アンカーを使用してページにジャンプするときに、ハッシュのないきれいな URL を取得することです。

したがって、アンカーの構造は次のとおりです。

<ul>
    <li><a href="#one">One</a></li>
    <li><a href="#two">Two</a></li>
    <li><a href="#three">Three</a></li>
</ul>

<div class="wrap">
    <a name="one">text 1</a>
    <a name="two">text 2</a>
    <a name="three" class="box">text 3</a>
</div>

リンクの 1 つをクリックすると、URL が自動的に次のように変わります。

www.domain.com/page#1

最後に、これは次のようになります。

www.domain.com/page

ここまでは順調ですね。2 つ目は、インターネットでその問題を検索するjavascriptと、解決策が見つかるということです。

私はこの機能を見つけました:

function jumpto(anchor){
    window.location.href = "#"+anchor;
}

そしてその関数を次のように呼び出します:

<a onclick="jumpto('one');">One</a>

以前と同じものになります。URLにハッシュを追加します。私も追加しました

<a onclick="jumpto('one'); return false;">

成功せずに。ですから、これを解決する方法を教えてくれる人がいれば、本当に感謝しています。

どうもありがとう。

4

5 に答える 5

234

対象要素の座標を取得し、スクロール位置を設定できます。しかし、これはとても複雑です。

これを行うための怠惰な方法を次に示します。

function jump(h){
    var url = location.href;               //Save down the URL without hash.
    location.href = "#"+h;                 //Go to the target element.
    history.replaceState(null,null,url);   //Don't like hashes. Changing it back.
}

これはreplaceState、URL の操作に使用されます。IE のサポートも必要な場合は、複雑な方法で行う必要があります。

function jump(h){
    var top = document.getElementById(h).offsetTop; //Getting Y of target element
    window.scrollTo(0, top);                        //Go there directly or some transition
}​

デモ: http://jsfiddle.net/DerekL/rEpPA/
別のトランジション: http://jsfiddle.net/DerekL/x3edvp4t/

次のものも使用できます.scrollIntoView

document.getElementById(h).scrollIntoView();   //Even IE6 supports this

(うそです。まったく複雑ではありません。)

于 2012-12-06T02:53:03.773 に答える
17

私はそれがはるかに簡単な解決策だと思います:

window.location = (""+window.location).replace(/#[A-Za-z0-9_]*$/,'')+"#myAnchor"

このメソッドはWeb サイトをリロードせず、スクリーン リーダーに必要なアンカーにフォーカスを設定します。

于 2016-01-13T12:06:25.640 に答える
2

なぜなら、あなたがするとき

window.location.href = "#"+anchor;

新しいページをロードすると、次のことができます。

<a href="#" onclick="jumpTo('one');">One</a>
<a href="#" id="one"></a>

<script>

    function getPosition(element){
        var e = document.getElementById(element);
        var left = 0;
        var top = 0;

        do{
            left += e.offsetLeft;
            top += e.offsetTop;
        }while(e = e.offsetParent);

        return [left, top];
    }

    function jumpTo(id){    
        window.scrollTo(getPosition(id));
    }

</script>
于 2012-12-06T02:42:51.567 に答える