(vue)js平移动画

完成效果

首先来上图看看效果,主要利用css配合js代码完成,主要利用dom元素的margin值来进行移动

 

 body代码

给了两张图来进行移动,绑定了一个ref属性,主要是为了在onMouted中取得这个dom元素

  <div >
          <img
            class="top_img3" ref="top_i"
            src="https://pic1.58cdn.com.cn/nowater/fangfe/n_v2010c079db1d642bfb2ceb387ec15726c.png"
            alt=""
          />
          <img
          ref="top_i"
            class="top_img4"
            src="	https://pic7.58cdn.com.cn/nowater/fangfe/n_v27f88c22e100a4724a3140b7c90f070b2.jpg"
            alt=""
          />
        </div>

css代码

.top_img3 {
      float: left;
      width: 295px;
      height: 113px;
      margin: 262px 0px 262px 19px;
      opacity: 1;
    }
    .top_img4 {
      float: right;
      width: 767px;
      height: 571px;
      margin: 32px -221px 0px;
      opacity: 1;
    }

js代码

let intanseHeight=ref(0)
// 获取元素
onMounted(()=>{
    // 获取当前dom
  const instance = getCurrentInstance()
//   获取当前元素距离顶部的高度,加上200这个margin
  intanseHeight=instance?.refs.top_i.offsetTop+200;
      // 监听滚动事件
      window.addEventListener('scroll', handleScroll)
})
let flag2=ref(true)
const handleScroll = () => {
    if(flag2.value){
        let img3=document.getElementsByClassName("top_img3")[0];
    let img4=document.getElementsByClassName("top_img4")[0]
    // 获取滚动条的高度
      const scrollTop = window.scrollY || document.documentElement.scrollTop || document.body.scrollTop;
    //   判断滚动条的高度加上dom元素的高度是不是大于等于窗口的实际高
      if((scrollTop+intanseHeight)>=window.document.documentElement.offsetHeight){
        flag2.value=false;
        console.log('高度达到了');
        let time1=null;
        let begin=19;
        let begin2=-221;
        time1=setInterval(()=>{
            begin+=20;
            begin2+=40;
            if(begin==119||begin2==0){
                clearInterval(time1)
                time1=null;
            }
            img3.style.marginLeft=begin+'px'
            img4.style.marginRight=begin2+'px'
        },50)
      }
    }else {
        return false
    }
   
    }

分析代码:

在vue3中的生命周期函数中,触发监听事件,封装一个handleScroll函数来监听滚动条的滚动

 // 监听滚动事件

     window.addEventListener('scroll', handleScroll)

在封装的handleScroll函数中,主要用定时器要完成平移的平滑度

flag2判断是否执行过,页面加载完成后只执行一次

if(flag2.value){

获取dom元素

        let img3=document.getElementsByClassName("top_img3")[0];

    let img4=document.getElementsByClassName("top_img4")[0]

    // 获取滚动条的高度

      const scrollTop = window.scrollY || document.documentElement.scrollTop || document.body.scrollTop;

    //   判断滚动条的高度加上dom元素的高度是不是大于等于窗口的实际高

      if((scrollTop+intanseHeight)>=window.document.documentElement.offsetHeight){

        flag2.value=false;

        console.log('高度达到了');

        let time1=null;

        let begin=19;

        let begin2=-221;

        time1=setInterval(()=>{

            begin+=20;

            begin2+=40;

判断margin是不是要移动到的那个位置,是的话就清楚定时器

            if(begin==119||begin2==0){

                clearInterval(time1)

                time1=null;

            }

            img3.style.marginLeft=begin+'px'

            img4.style.marginRight=begin2+'px'

        },50)

      }

    }else {

        return false

    }

   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值