iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue组件实现景深卡片轮播示例
  • 584
分享到

Vue组件实现景深卡片轮播示例

2024-04-02 19:04:59 584人浏览 八月长安
摘要

目录前言需求拆解开发思路(Vue2)开发过程后记前言 朋友的朋友做了个首页,首页用到一个卡片轮播,大概就是这个样子的: 第一版他们是开发出来了,但是各种bug,希望我帮忙改一下。

前言

朋友的朋友做了个首页,首页用到一个卡片轮播,大概就是这个样子的:

第一版他们是开发出来了,但是各种bug,希望我帮忙改一下。

看完代码以后,发现他们整合了一个缝合怪出来,各个楼层都是从其他地方 CV 过来的,而且各个楼层引用了 n 多个jsCSS 文件,看了一下效果以后,觉得改他的东西确实比重新开发一个要麻烦的多得多,所以就重新写了一下。

在此记录一下,以便于后续复用。

需求拆解

  • 初始化渲染5个容器,用来承载图片和标题,按照景深的效果排列,越靠近自己越大。
  • 点击中间一块的左边的整体向右旋转一格,点击右边的向左旋转一格,点击中间的没有效果。
  • 中间一项显示 content 和 查看更多 按钮,其他不显示。

开发思路(vue2)

  • 景深效果可以选择使用 css3 的转换来制作,通过对每个容器进行不通比例的缩放来实现5个容器大小不一致的效果。
  • 因为使用到了css3的转换,就需要用到过渡,动画效果就使用 transition-group 来实现。
  • 至此就可以轮播就可以滚动起来了,只需要给5个容器循环赋值css样式,就可以实现缩放和位置转换,结合渐变,就成了一个循环动画效果。
  • 点击事件,一开始的思路是通过获取点击事件中的鼠标的坐标,如果在左半个屏幕就走左边的逻辑,但是页面有个最小宽度 1280,当分辨率被拖动的时候就不行了,所以pass掉了。最后选择的方案是,给容器一套下标(_id)的同时全局声明一个变量用来记录当前展示的容器的下标,每次点击都要和展示项作比较,通过比较结果来确定左右逻辑。
  • 思维发散:
    • 可以扩展为7个甚至更多容器的轮播
    • 扩展为n个容器,但是只显示5个的轮播
    • 景深效果以及动画效果改变
    • ...

开发过程

首先是html+css部分,这部分很简单,而且很普通。

  • 写 5 个div,每个都用绝对定位的方式铺满整个屏幕,每个宽度都是 20%。
  • 绑定各数据,并用 几个 状态值来控制 content 的显示隐藏,以及当前展示项。

代码如下:

<script>
// 引入图片资源
import loop1 from '@assets/images/loop1.png';
import loop2 from '@assets/images/loop2.png';
import loop3 from '@assets/images/loop3.png';
import loop4 from '@assets/images/loop4.png';
import loop5 from '@assets/images/loop5.png';

const findIdxById = (arr, id) => {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === id) {
      return i;
    }
  }
  return -1;
};
export default {
  data() {
    return {
      // 轮播数据
      baseData: [
        {
          desc:
            '可折叠式智能移动影院Royle-X展现了惊人的高科技技术和全球首创的可折叠设计,配备了柔宇科技自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折叠计自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折',
          title: '这里是标题',
          cover: loop1,
        },
        {
          desc:
            '可折叠式智能移动影院Royle-X展现了惊人的高科技技术和全球首创的可折叠设计,配备了柔宇科技自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折叠计自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折',
          title: '这里是标题',
          cover: loop2,
        },
        {
          desc:
            '可折叠式智能移动影院Royle-X展现了惊人的高科技技术和全球首创的可折叠设计,配备了柔宇科技自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折叠计自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折',
          title: '这里是标题',
          cover: loop3,
        },
        {
          desc:
            '可折叠式智能移动影院Royle-X展现了惊人的高科技技术和全球首创的可折叠设计,配备了柔宇科技自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折叠计自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折',
          title: '这里是标题',
          cover: loop4,
        },
        {
          desc:
            '可折叠式智能移动影院Royle-X展现了惊人的高科技技术和全球首创的可折叠设计,配备了柔宇科技自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折叠计自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折自助研发的首款智能移动显示操作系统,设计非常人性化。可能会可折',
          title: '这里是标题',
          cover: loop5,
        },
      ],
      // 当前展示项
      loopCenterIdx: 2,
      // 轮播样式模板,用来循环赋值给 容器
      loopModules: [
        {
          loopIdx: 0,
          style: {
            'z-index': 7,
            background: '#fff',
            transfORM: `scale(${1})`,
            left: 'calc(100% / 5 * 0)',
            height: '320px',
            opacity: 0.8,
          },
        },
        {
          loopIdx: 1,
          style: {
            'z-index': 8,
            transform: `scale(${1.4})`,
            background: '#fff',
            left: 'calc(100% / 5 * .9)',
            height: '320px',
            opacity: 0.9,
          },
        },
        {
          loopIdx: 2,
          style: {
            transform: `scale(${1.7})`,
            'z-index': 9,
            background: '#fff',
            left: 'calc(100% / 5 * 2)',
            opacity: 1,
            'box-shadow': '0 0 5px #ccc',
            height: '370px',
          },
        },
        {
          loopIdx: 3,
          style: {
            transform: `scale(${1.4})`,
            'z-index': 8,
            background: '#fff',
            left: 'calc(100% / 5 * 3.1)',
            opacity: 0.9,
            height: '320px',
          },
        },
        {
          loopIdx: 4,
          style: {
            'z-index': 7,
            transform: `scale(${1})`,
            background: '#fff',
            left: 'calc(100% / 5 * 4)',
            height: '320px',
            opacity: 0.8,
          },
        },
      ],
    };
  },
  created(){
    // todo ajax ...
  },  
  mounted() {
    // 初始化轮播
    this.initLoop();
    console.log('centerIdx = ', this.loopCenterIdx);
  },
  methods: {
    // 初始化轮播
    initLoop() {
      this.loopModules = this.loopModules.map((item, idx) => {
        item.desc = this.baseData[idx];
        return item;
      });
      console.log(this.loopModules);
    },
    // 下一张
    handleNext() {
      this.loopCenterIdx = this.loopCenterIdx + 1 > 4 ? 0 : this.loopCenterIdx + 1;
      this.loopModules = this.loopModules.map((item, idx) => {
        item.desc = this.baseData[idx];
        return item;
      });
      this.loopModules.unshift(this.loopModules.pop());
    },
    // 上一张
    handleLast() {
      this.loopCenterIdx = this.loopCenterIdx - 1 < 0 ? 4 : this.loopCenterIdx - 1;
      this.loopModules = this.loopModules.map((item, idx) => {
        item.desc = this.baseData[idx];
        return item;
      });
      this.loopModules.push(this.loopModules.shift());
    },
    // 点击容器
    handleLoop(checkId) {
      console.log('checkId = ', checkId, ', loopCenterIdx = ', this.loopCenterIdx);
      // 当前项
      if (checkId === this.loopCenterIdx) {
        return;
      }
      if (checkId > this.loopCenterIdx) {
        if (this.loopCenterIdx === 0 && checkId === 4) {
          return this.handleLast(checkId);
        } else {
          return this.handleNext(checkId);
        }
      }
      if (checkId < this.loopCenterIdx) {
        if (checkId === 0 && this.loopCenterIdx === 4) {
          return this.handleNext(checkId);
        } else {
          return this.handleLast(checkId);
        }
      }
    },
  },
};
</script>

js代码里面有两个地方需要注意的:

  • 可以看到在上一张和下一张对应的方法里面,有两个一行代码。其作用就是让5个容器转起来。
this.loopModules.unshift(this.loopModules.pop());
// [1,2,3,4] =&gt; [2,3,4,1]
this.loopModules.push(this.loopModules.shift());
// [1,2,3,4] =&gt; [4,1,2,3]
  • 在 handleLoop 方法中,需要注意展示项为 第一个 和 最后一个 的时候,和正常判断逻辑相反。

后记

轮播作为一个日常开发中最常见的组件,想必每一个前端都在学习js的时候将他作为一个很有意思的 demo 练过手,而景深卡片轮播算是比基础轮播稍微难一点的效果了。

这个组件值得记录下来的是把数据驱动视图的思路更好的进行了一次展示,这也是基于框架开发和原生开发的一个重要的转变。如果在 Jquery 中,可能会用 $(selector).animate() 去控制动画效果,原生 js 中也会封装一个类似 animate() 的方式去逐帧的实现一系列的动画,而在 vue 中,直接修改数据的顺序,或者修改数据值,就让 dom 动起来了。

数据驱动视图的思路下,我们就不必去关注视图的变化,也不用频繁的去操作dom元素,只需考虑清除一组可以控制视图变化的链路就好了。例如:分页组件只需要关注当前页码和每页显示数量,表格组件只需要关注列数据的变化等等。其他的部分框架已经做了很多。

路还很长,每走一步都有新感悟!

以上就是Vue组件实现景深卡片轮播示例的详细内容,更多关于Vue景深卡片轮播的资料请关注编程网其它相关文章!

--结束END--

本文标题: Vue组件实现景深卡片轮播示例

本文链接: https://www.lsjlt.com/news/165143.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue组件实现景深卡片轮播示例
    目录前言需求拆解开发思路(vue2)开发过程后记前言 朋友的朋友做了个首页,首页用到一个卡片轮播,大概就是这个样子的: 第一版他们是开发出来了,但是各种bug,希望我帮忙改一下。 ...
    99+
    2024-04-02
  • vue实现卡片翻转轮播展示
    vue卡片翻转轮播展示,同时在翻转时切换数据,供大家参考,具体内容如下 效果及代码 代码: <template> <div class="list-con...
    99+
    2024-04-02
  • 基于vue.js轮播组件vue-awesome-swiper实现轮播图的示例分析
    这篇文章主要为大家展示了“基于vue.js轮播组件vue-awesome-swiper实现轮播图的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于vu...
    99+
    2024-04-02
  • 怎么使用vue轮播组件vue-awesome-swiper实现轮播图
    这篇文章主要讲解了“怎么使用vue轮播组件vue-awesome-swiper实现轮播图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用vue轮播组件vue-awesome-swipe...
    99+
    2023-07-04
  • uniapp vue与nvue轮播图之轮播图组件的示例代码
    vue部分如下: <template> <view class=""> <!-- 轮播图组件 --> <swiper :ind...
    99+
    2024-04-02
  • react组件实现无缝轮播示例详解
    目录正文无缝轮播实现思路构思使用时代码结构Carousel组件CarouselItem组件完善组件完成小圆点正文 需求是做一个无缝轮播图,我说这不是有很多现成的轮子吗?后来了解到他有...
    99+
    2022-11-13
    react 组件无缝轮播 react 无缝轮播
  • vue使用swiper插件实现轮播图的示例
    目录vue - 使用swiper插件实现轮播图 使用watch与$nextTick解决轮播的Bug hello大家好,最近我在做一个仿饿了么的项目,我会将我的项目经验同步到这里,与大...
    99+
    2024-04-02
  • Vue实现轮播图组件的封装
    目录轮播图功能-获取数据轮播图-通用轮播图组件轮播图-数据渲染轮播图-逻辑封装轮播图功能-获取数据 目标: 基于pinia获取轮播图数据 核心代码: (1)在types/data.d...
    99+
    2023-05-16
    Vue轮播图组件封装 Vue组件封装
  • Vue组件实现卡片动画倒计时示例详解
    目录前言需求拆解组件设计思路具体开发animate-clock.vueanimate-card项目中使用后记前言 最近有朋友在做投票的项目,里面有用到一个倒计时的组件,还想要个动画效...
    99+
    2024-04-02
  • js+css实现卡片轮播图效果
    本文实例为大家分享了js+css实现卡片轮播图效果的具体代码,供大家参考,具体内容如下 实现点击的时候切换卡片,自动轮播,鼠标移入暂停,移出继续轮播,有动画事件效果就是这样 下面是...
    99+
    2024-04-02
  • ReactHooks+ts(函数组件)实现原生轮播的示例
    目录1.下载依赖(第一个是js依赖,第二个是ts依赖)2.创建tsx文件3.创建less文件1.下载依赖(第一个是js依赖,第二个是ts依赖) npm install smooths...
    99+
    2024-04-02
  • vue轮播组件如何实现$children和$parent
    这篇文章主要为大家展示了“vue轮播组件如何实现$children和$parent”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue轮播组件如何实现$chil...
    99+
    2024-04-02
  • 怎么用vue轮播组件实现$children和$children
    这篇文章主要介绍了怎么用vue轮播组件实现$children和$children的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue轮播组件实现$children和$children文章都会有所收获,下面...
    99+
    2023-07-04
  • C#实现图片轮播功能的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-19
    C#图片轮播功能 C#图片轮播 C# 轮播
  • 如何使用vue实现轮播图片
    这篇“如何使用vue实现轮播图片”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用vue实现轮播图片”文章吧。效果图案例...
    99+
    2023-07-02
  • vue实现自动滑动轮播图片
    本文实例为大家分享了vue实现自动滑动轮播图片的具体代码,供大家参考,具体内容如下 效果如图:(悬浮时暂停,移出后自动轮播) ①创建图片滑动轮播组件ImageSlider.vue...
    99+
    2024-04-02
  • Angular2如何使用组件与指令实现图片轮播组件
    这篇文章主要介绍了Angular2如何使用组件与指令实现图片轮播组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、创建组件结束上文打的尴...
    99+
    2024-04-02
  • vue选项卡Tabs组件实现示例详解
    目录概述效果图实现过程组件分析所需的前置知识项目组件文件夹Tabs.vueTabPane.vuerender.jsindex.js使用总结概述 前端项目中,多数页面涉及到选项卡切换,...
    99+
    2022-11-13
    vue选项卡Tabs组件 vue Tabs
  • vue实现无缝轮播效果的示例代码
    小编给大家分享一下vue实现无缝轮播效果的示例代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下首先创建两个vue组件Sweiper.vue和Swei...
    99+
    2023-06-15
  • Android开发使用Handler实现图片轮播功能示例
    本文实例讲述了Android使用Handler实现图片轮播功能。分享给大家供大家参考,具体如下:提前定义好一个Runnable接口,然后用handler调用。Mainactivity代码如下:package com.example.hand...
    99+
    2023-05-30
    android handler 图片轮播
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作