domObserver.js 808 B

1234567891011121314151617181920212223242526272829
  1. import Vue from "vue";
  2. // function getElementToPageTop(el) {
  3. // if (el.parentElement) {
  4. // return getElementToPageTop(el.parentElement) + el.offsetTop;
  5. // }
  6. // return el.offsetTop;
  7. // }
  8. Vue.directive("domObserver", {
  9. bind(el, binding) {
  10. let top = "";
  11. let height = "";
  12. function isResize() {
  13. // let toPageTop = getElementToPageTop(el);
  14. let toPageTop = el.getBoundingClientRect().top;
  15. let elHeight = el.getBoundingClientRect().height;
  16. if (toPageTop != top || elHeight != height) {
  17. binding.value({ top: toPageTop, height: elHeight });
  18. }
  19. top = toPageTop;
  20. height = elHeight;
  21. }
  22. el.__vueSetInterval__ = setInterval(isResize, 300);
  23. },
  24. unbind(el) {
  25. console.log(el, "解绑");
  26. clearInterval(el.__vueSetInterval__);
  27. },
  28. });