編集 - preventDefault() はすべてのデフォルトの動作をキャンセルするようです (実際には意味があります) - 私が提示した最初の解決策は、まったく解決策ではないことが判明しました。
したがって、これは実際には非常に難しいことがわかります。
いくつかの検索の後、リンクのデフォルトの動作をキャンセルせずにスクロールをキャンセルすることはできないという結論に達しました(したがって、 のデフォルト.preventDefault()
)。
あなたができることは、リンクのスクロールが完了した後にスクロールして元の場所に戻ることですが、できるだけ早くスクロールしたとしても、ブラウザでスクロールが起こっているのを見ることができるので、見苦しいです.解決。(とにかくここで見ることができます - http://jsfiddle.net/joplomacedo/RpDyc/)。
それで、代替品は?あなたがやっているように(ここでは:target疑似クラスを使用していると仮定します)、まだjavascriptが必要なので、:targetのものを忘れて、javascriptだけに頼ってください。それはよりシンプルで、よりクリーンで、「ハッキー」ではありません。
これが私がそれを行う方法です(jquery)-> http://jsfiddle.net/joplomacedo/AfzJY/
ただし、CSS を使用することを主張する場合は、Chris Coyier がここで提案しているように、:target ではなく :checked を利用することをお勧めします。彼の記事はかなりうまくいっているので、ここではこれ以上説明しません。
編集前
jqueryを使っていますか?もしそうなら、必要なのはこれだけです:
$('a[href="#accordion1"]').on('click', function (e) {
e.preventDefault();
});
jquery を使用していない場合は、純粋な JavaScript で行う方法を次に示します。
var cancels_links = document.getElementsByClassName('cancels-link');
var cancel = function cancel(e) {
e.preventDefault();
};
for (var i = 0, max = cancels_links.length; i < max; i++) {
cancels_links[i].addEventListener('click', cancel, false );
}
class="cancels-link"
...これは、キャンセルしたいデフォルトの動作である各「a」要素に追加する必要があります。
これが2つのソリューションのフィドルです-> http://jsfiddle.net/cBQnv/3/