问答

vue如何修改js中的getBoundingClientRect方法

作者:admin 2021-08-20 我要评论

我想在vue项目里加一个滚动时间轴,找到一个好看的JavaScript版本的,想自己动手修改成vue的,但是出来这个报错。 script export default { name: 'info',data()...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我想在vue项目里加一个滚动时间轴,找到一个好看的JavaScript版本的,想自己动手修改成vue的,但是出来这个报错。image.png

<script>
export default {

name: 'info',
data(){
    return{
        el:null
    }
},
mounted() {
                this.isElementInViewport(this.el)
                this.callbackFunc()
                this.addEvent()
            },
methods :{
isElementInViewport(el) {
    let obj = el.target
        let rect = obj.getBoundingClientRect();

return (

rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
},
callbackFunc() {
       let items = document.querySelectorAll(".timeline li");
       for (let i = 0; i < items.length; i++) {
if (this.isElementInViewport(items[i])) {
  if(!items[i].classList.contains("in-view")){
    items[i].classList.add("in-view");
  }
} else if(items[i].classList.contains("in-view")) {
    items[i].classList.remove("in-view");
}
 }

},
addEvent(){

  window.addEventListener("load", this.callbackFunc);
  window.addEventListener("scroll", this.callbackFunc);

}

}

}
</script>

上面是我自己修改的,下面是源码

<script>
var items = document.querySelectorAll(".timeline li");

function isElementInViewport(el) {
  var rect = el.getBoundingClientRect();
  return (
    rect.top >= 0 &&
    rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.right <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

function callbackFunc() {
  for (var i = 0; i < items.length; i++) {
    if (isElementInViewport(items[i])) {
      if(!items[i].classList.contains("in-view")){
        items[i].classList.add("in-view");
      }
    } else if(items[i].classList.contains("in-view")) {
        items[i].classList.remove("in-view");
    }
  }
}
 
window.addEventListener("load", callbackFunc);
window.addEventListener("scroll", callbackFunc);
</script>

问题出现的环境背景及自己尝试过哪些方法

相关代码

粘贴代码文本(请勿用截图)

你期待的结果是什么?实际看到的错误信息又是什么?

###

this.el -> this.$el

细心哇少侠!

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用箭头函数return数据不能实现

    使用箭头函数return数据不能实现

  • 个人小程序号能接入小程序3D地图吗?

    个人小程序号能接入小程序3D地图吗?

  • vue 移动端项目中,使用了better-scrol

    vue 移动端项目中,使用了better-scrol

  • css如何做出区域平均划分为四列

    css如何做出区域平均划分为四列

腾讯云代理商
海外云服务器