[√] カーソルがちらつく
やりたいこと
ページ内リンクをクリックしたときに,URLに「#s0」が付くのを消す.
(index.html#s0 → index.html という想定)
html
1<a href="#s0" onclick=" 2setInterval( function(){ 3window.history.replaceState('','','index.html') 4}, 1000); 5">押しほしい</a>
単にonclick="window.history.replaceState('','','index.html');"と書くだけでは,URL書き換え結果が持続しないので,setIntervalで対応したところ,マウスカーソルがちらついてしまいます.
状況としては**cly7796.netさんのDEMOと同じ状況になっています.しかし,単に「history.replaceState('','','URL1');」と書くだけ,と言っているkipureさんのDEMO**はちらつきが発生していません.
両者の違いと言えば,VanillaJSかjQueryかぐらいでしょうか?
jQueryで出来るなら,多少コードが長くなったとしてもVanillaJSでも出来るはずだと思うのですが...
##現状
こうなってました(setInterval無し版)
画面左中央のボタンが本件の<a>です。
ボタンを押した瞬間とhistory.replaceState終了後にそれぞれ現在のURLをalertで出力させています。
1回目のalertで、#付きのURLが表示され、2回目のalertで、#無しのURLが表示されますが、alertを閉じると(処理が終わると)URLが戻ってしまいます。
そして、morisobaさんの提案通りsetTimeoutを指定したものが**こちら**です。
見事にうまくいきました!
###ということで
そもそも何故、history.replaceState
を単体で書くと処理が持続しないのか、**kipureさんのDEMO**はhistory.replaceState
を単体で書いていました。
jQueryを使っていると、勝手にsetTimeoutが設定されるのでしょうか?
kipreさんのソース
あと、いちいちfunction(){}と書かなければならないのはなぜでしょうか
この辺りについて教えてもらえるとうれしいです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/24 08:28