vue实现伪3D切换滚动(附代码)

今天写项目,遇到一个点击切换的滚动需求,贴出来,做一个记录

在这里插入图片描述

这个是最终的一个效果,点击左右小箭头,实现滚动效果,但是只是简单滚动,没有动画之类的
实现思路:
  • css中,正常写一个divdisplay:flex来平铺图片
  • 然后中间位置定位一个框,框大小比外面的大,中间图片随意取列表中的一个就行
  • js中,使用v-for循环列表
  • 点击右侧时,将循环列表中的第一个图片删除,然后添加到列表最后一个,点击左侧时同理,这样,就能简单实现一个无缝循环的效果了
  • 最重要的一点,因为中间时梯形,要么就是让UI给一个框,前端设置超出隐藏属性,达到梯形效果,要么就是自己用polygon这个css属性调出一个多边形出来
贴一下代码,看看
// html
// <!-- 滚动 -->
    <div class="rolling">
      <div class="rolling-container">
        <div
          class="rolling-wraper"
          v-for="(v, i) in imgList"
          :key="i"
          @click="handleImg(v)"
        >
          <img
            :src="require(`@/assets/images/home/company/${v.img}.jpg`)"
            class="img"
          />
        </div>
        <!-- 左侧渐变阴影 -->
        <div class="gradient-left"></div>
        <div class="rolling-shadow"></div>
        <!-- 右侧渐变阴影 -->
        <div class="gradient-right"></div>
      </div>
      <!-- 中间放大层 -->
      <div class="photo-bg"></div>
      <img
        :src="
          require(`@/assets/images/home/company/${this.imgList[1].img}.jpg`)
        "
        class="img-large"
      />
      <img
        :src="require(`@/assets/images/home/company/photo-bg.png`)"
        class="trapezoidal"
      />
      <!-- 底部切换 -->
      <div class="top-botton">
        <div class="btn-left" @click="previous"></div>
        <div class="center-text">{{ this.imgList[1].text }}</div>
        <div class="btn-right" @click="next"></div>
      </div>
    </div>
// js
data () {
	return {
		imgList: [
	        {
	          img: 'activity-01',
	          text: '2020年职称宣传活动',
	        },
	        {
	          img: 'activity-02',
	          text: '2020年职称宣传活动1',
	        },
	        {
	          img: 'activity-03',
	          text: '2020年职称宣传活动2',
	        },
	      ],
	}
}

methdos: {
	// 点击左侧
	previous() {
      const direction = 'left';
      this.scrollImg(direction);
    },
    // 点击右侧
    next() {
      const direction = 'right';
      this.scrollImg(direction);
    },

    // 处理滚动列表图片
    scrollImg(direction) {
      if (direction === 'left') {
        const first = this.imgList.shift();
        this.imgList.push(first);
      } else {
        const last = this.imgList.pop();
        this.imgList.unshift(last);
      }
      console.log();
    },
}
// css重点代码
// 绘制多边形
// 这几个属性为逆时针旋转
 clip-path: polygon(4% 4%, 1% 90%, 95% 90%, 92% 4%);

在这里插入图片描述
具体就根据设计稿慢慢调整把~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值