読者です 読者をやめる 読者になる 読者になる

【javascript】要素が画面に何%見えているか判定する

2度と使わないかもしれないけどメモしておく。
ある要素が画面の何%見えているか判定する処理。
あんまりやる機会ないと思うけど、特定の要素が100%見えたら何らかの処理するとかそんなイメージ。

f:id:yoppy0066:20170405012226g:plain

<script>
var target = document.getElementById("contents");
var viewportHeight = getViewportHeight();
var style = target.currentStyle || document.defaultView.getComputedStyle(target, "");
var height = parseInt(style.height);
var debug = document.getElementById("debug");
setInterval(function() {
  var offsetY = target.getBoundingClientRect().top;
  var per;
  if (0 < offsetY) {
    var visible = offsetY + height - viewportHeight;
    if (visible < 0) {
      per = 1;
    } else {
      per = (height - visible) / height;
      if (per < 0) {
        per = 0;
      }
    }
  } else {
    var visible = offsetY + height;
    if (visible < 0) {
      per = 0;
    } else {
      per = visible / height;
    }
  }
  per = per * 100;
  per = Math.round(per);
  debug.innerText = per + "%見えてるよ";
 }, 200);
function getViewportHeight() {
  var height = window.innerHeight;
  if (!height) {
    var mode = document.compatMode;
    if (mode) {
      var domObject = mode == "CSS1Compat" ? document.documentElement : document.body;
      height = domObject.clientHeight;
    }
  }
  return height;
 }
</script>

以上です