gotin blog

Whatever gotin wanna write

画面を一時的に消す

//けす
Array.prototype.forEach.call(document.body.childNodes, function(e){if(e.style)e.style.visibility="hidden";});
//もどす
Array.prototype.forEach.call(document.body.childNodes, function(e){if(e.style)e.style.visibility="visible";});

とすれば、消してから何かを表示、表示を終えたらもどす、というようなことができると思ったんですが、それだともともとhiddenにしていたものまでvisibleにしてしまうことになってしまいます。

で代わりに考えたのが↓これ

var toggleView = (function(){
  var tmp = document.createElement("div");
  function toggle(){
    tmp.firstChild ? show():hide();
    function hide(){
      while(document.body.firstChild){
        tmp.appendChild(document.body.firstChild);
      }
    }
    function show(){
      while(tmp.firstChild){
        document.body.appendChild(tmp.firstChild);
      }
    }
  }
  return toggle;
})();

toggleView()の呼び出しで消す、もどすを繰り返せるようになります。もとのvisibilityもキープできて便利。
いやいや、

document.body.style.visibility="hidden"

でいいじゃん、って思うところですが、それだと消したあとに「別の何か」を表示できなくなってしまうのでダメなのです。
で、なんでこんなことをしてるかというと、
スライドショーのようにテキストを読むGreasemonkeyスクリプト、YHC
↑これがとてもすばらしいんですが、なぜか私の環境だとスライドショー中に元のページ要素がチラっと一部だけ顔をのぞかせたりすることがあったので、元の要素を一旦消してしまえばこのチラツキも消えるだろうと考えたからなのです。
結果、うまくチラツキが消えるようになりました。
このチラツキ現象は gmacsでプレゼンテーション でも発生していたので、ずっと直したかったのですが、ようやっと直せることとなりました。
以上、ページ内に未挿入のElementを使うと一時的にどかす処理ができるんだ、という発見でした。