返回顶部
首页 > 资讯 > 精选 >怎么用vue轮播组件实现$children和$children
  • 912
分享到

怎么用vue轮播组件实现$children和$children

2023-07-04 14:07:50 912人浏览 独家记忆
摘要

这篇文章主要介绍了怎么用Vue轮播组件实现$children和$children的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue轮播组件实现$children和$children文章都会有所收获,下面

这篇文章主要介绍了怎么用Vue轮播组件实现$children和$children的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue轮播组件实现$children和$children文章都会有所收获,下面我们一起来看看吧。

一、知识点涉及

1、vue组件化开发

2、vue组件嵌套组,就是两个组件相互耦合,然后必须配合使用的那种。参考elementUI里面的表单组件(分为from组件,item组件)或者轮播组件。

vue的 $children和 $parent

3、CSS动画和形变

二、开始写组件

1、先写你的框,主组件

这个是容器,负责组件定位和组件的整体运作的

html部分

<div @mouseenter.stop="handleMouseEnter" @mouseleave.stop="handleMouseLeave" class="dht-swiper-side" :> <slot></slot></div>

主要两个鼠标事件: mouseenter和 mouseleave

第一个就是鼠标在元素上负责停止定时器,第二个就是鼠标离开重启定时器

对应的props和监听

props: { // 时间间隔 interval: {  type: Number,  default: 8000 }, //是否自动播放 autoplay: {  type: Boolean,  default: true }, zIndex: {  type: Number,  default: 2000 }, // x轴变化 axisx: {  type: Number,  default: 1000 }},watch: { autoplay(val) {  val ? this.startTimer() : this.stopTimer(); }},data() { return {  // 计时器  timer: "",  //子元素  items: [],  // 当前显示的元素  active: 0 };},

2、写你的子组件

这里必须跳跃一下,为什么呢?

因为:主组件主要负责动画运作和容器的作用。定义好你要的参数之后,其实主组件你直接看代码是不不符合编写逻辑的

有了主组件之后,我需要有子元素才能动起来,所以先把子元素加载进来

html部分

<div class="dht-swiper-side-item" :> <slot></slot></div>

js核心部分

created() { //元素创建和需要更新父元素属性 this.$parent && this.$parent.updateItems();},beforeMount() {},mounted() {},destroyed() { //元素销毁和需要更新父元素属性 this.$parent && this.$parent.updateItems();},

这里主要是创建元素的时候需要把元素加入主组件的items中,销毁的时候同样进行更新

主组件的更新代码

// 更新元素updateItems() { this.items = this.$children.filter(  // 更新元素需要确认为指定的子元素  child => child.$options.name === "dhtSwiperSideItem" );},

css核心部分

css部分主要是定义动画效果,和基础css,主要是看动画部分

.dht-swiper-side-item { position: absolute; transition: all 1s ease; transfORM: translateX(1000px); // 抖动动画 @keyframes mymove {  0% {   left: 0;  }  50% {   left: 15px;  }  100% {   left: 0;  } }}

3、一般弹窗动画之类的编写原理讲解

1、不能用display:none,因为那样元素是直接显示出来的,动画是无法有的。

2、举例:下方弹窗划出

其实在写这些弹窗的时候元素已经在页面上面加载好了,只是被我们隐藏到显示器之外了。

所以我们要做的是在点击显示的时候把元素位移回来

3、所以其实页面上基本的动画都是先放在你看不到的地方,然后再通过 transform

形变css给移动回来的。我这次的组件也是一样的。

4、主组件操作

1、回顾一下,刚才我们先写了主组件,主组件加载子组件,子组件会调用主组件函数,让主组件去更新自己的items,提前存好。方便使用

2、既然我们主组件拿到了子组件了,那么就可以直接操作子组件进行操作,其实核心原理在于主组件之间操作子组件。

3、定时器部分

//开始计时器startTimer() { //预先执行一次,保证不会出现第一次运行延迟双倍实际 this.play(); // 拦截处理 if (this.interval <= 0 || !this.autoplay || this.timer) return; this.timer = setInterval(() => {  this.play(); }, this.interval);},

这块其实没啥,除了预先的拦截剩下的就是启动定时器,然后运行动画播放函数

4、核心播放函数部分

//播放实际运行函数play() { let len = this.items.length - 1; let now = this.active > len ? 0 : this.active; let old = this.active - 1 < 0 ? 0 : this.active - 1; //console.log("当前", now, "老的", old); //关闭老元素 this.items[old].show = false; this.items[old].itemStyle = {  transition: "all 1.5s ease",  transform: `translateX(${this.axisx}px)` }; //显示新元素 this.items[now].show = true; this.items[now].itemStyle = {  transition: "all 1.5s ease",  transform: "translateX(0)",  animation: "mymove 1.5s 2" }; //记录数据 this.active = now + 1;}

这个其实很简单,每次运行的时候处理一下数据,拿到当前要运行的子元素id和老的元素,当前的展示,老的移动回去。最后记录一下新的id

这里有一个坑点:就是animation部分,记得运行2次,不然只是一次会导致下面的元素看不到抖动效果。原因是在移动的时候就抖动完毕了。

5、主组件css部分

.dht-swiper-side { position: absolute; z-index: 2000; right: 0; display: flex; flex-flow: row; width: 100%;}

三、组件文档

dht-swiper-side侧边轮播组件intervalNumber5000时间间隔,默认5秒转换一次必须给该组件指定宽度,否则无法正常显示。内部子元素展示做最侧位置主要由该组件的宽度定义
autoplayBooleanTRUE是否自动播放,咱不支持false



zIndexNumber2000组件层级



axisxNumber1000隐藏的子元素位置,px单位,默认1000。当内部元素宽度过大时可以调节该参数



dht-swiper-side-itemdht-swiper-side




dht-swiper-side的子组件,用于存放内容

四、个人组件效果展示

<dht-swiper-side class="main"> <dht-swiper-side-item>  <div class="item">我是组件1</div> </dht-swiper-side-item> <dht-swiper-side-item>  <div class="item">我是组件2</div> </dht-swiper-side-item> <dht-swiper-side-item>  <div class="item">我是组件3</div> </dht-swiper-side-item> <dht-swiper-side-item>  <div class="item">我是组件4</div> </dht-swiper-side-item></dht-swiper-side>.main { width: 500px; .item {  width: 100px;  height: 100px;  background: #009966;  border: #409eff 1px solid;  text-align: center;  line-height: 100px; }}

主组件全部代码

<template> <div  @mouseenter.stop="handleMouseEnter"  @mouseleave.stop="handleMouseLeave"  class="dht-swiper-side"  : >  <slot></slot> </div></template><script>export default { name: "dhtSwiperSide", props: {  // 时间间隔  interval: {   type: Number,   default: 8000  },  //是否自动播放  autoplay: {   type: Boolean,   default: true  },  zIndex: {   type: Number,   default: 2000  },  // x轴变化  axisx: {   type: Number,   default: 1000  } }, watch: {  autoplay(val) {   val ? this.startTimer() : this.stopTimer();  } }, data() {  return {   // 计时器   timer: "",   //子元素   items: [],   // 当前显示的元素   active: 0  }; }, beforeCreate() {}, created() {  this.$nextTick(() => {   this.updateItems();   this.startTimer();   this.$children[0].show = true;  }); }, beforeMount() {}, mounted() {}, destroyed() {  clearInterval(this.timer); }, methods: {  handleMouseEnter() {   this.stopTimer();  },  handleMouseLeave() {   this.startTimer();  },  //开始计时器  startTimer() {   //预先执行一次,保证不会出现第一次运行延迟双倍实际   this.play();   // 拦截处理   if (this.interval <= 0 || !this.autoplay || this.timer) return;   this.timer = setInterval(() => {    this.play();   }, this.interval);  },  // 停止计时器  stopTimer() {   clearInterval(this.timer);  },  // 更新元素  updateItems() {   this.items = this.$children.filter(    // 更新元素需要确认为指定的子元素    child => child.$options.name === "dhtSwiperSideItem"   );  },  //播放实际运行函数  play() {   let len = this.items.length - 1;   let now = this.active > len ? 0 : this.active;   let old = this.active - 1 < 0 ? 0 : this.active - 1;   //console.log("当前", now, "老的", old);   //关闭老元素   this.items[old].show = false;   this.items[old].itemStyle = {    transition: "all 1.5s ease",    transform: `translateX(${this.axisx}px)`   };   //显示新元素   this.items[now].show = true;   this.items[now].itemStyle = {    transition: "all 1.5s ease",    transform: "translateX(0)",    animation: "mymove 1.5s 2"   };   //记录数据   this.active = now + 1;  } }};</script><style lang="scss">.dht-swiper-side { position: absolute; z-index: 2000; right: 0; display: flex; flex-flow: row; width: 100%;}</style>

子组件全部代码

<template> <div class="dht-swiper-side-item" :>  <slot></slot> </div></template><script>export default { name: "dhtSwiperSideItem", data() {  return {   show: false,   defaultStyle: {},   itemStyle: {}  }; }, watch: {}, beforeCreate() {}, created() {  //元素创建和需要更新父元素属性  this.$parent && this.$parent.updateItems(); }, beforeMount() {}, mounted() {}, destroyed() {  //元素销毁和需要更新父元素属性  this.$parent && this.$parent.updateItems(); }, methods: {}};</script><style lang="scss">.dht-swiper-side-item { position: absolute; transition: all 1s ease; transform: translateX(1000px); // 抖动动画 @keyframes mymove {  0% {   left: 0;  }  50% {   left: 15px;  }  100% {   left: 0;  } }}</style>

vue是什么

Vue是一套用于构建用户界面的渐进式javascript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

关于“怎么用vue轮播组件实现$children和$children”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用vue轮播组件实现$children和$children”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么用vue轮播组件实现$children和$children

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

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

猜你喜欢
  • 怎么用vue轮播组件实现$children和$children
    这篇文章主要介绍了怎么用vue轮播组件实现$children和$children的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用vue轮播组件实现$children和$children文章都会有所收获,下面...
    99+
    2023-07-04
  • vue轮播组件如何实现$children和$parent
    这篇文章主要为大家展示了“vue轮播组件如何实现$children和$parent”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue轮播组件如何实现$chil...
    99+
    2024-04-02
  • 怎么使用vue轮播组件vue-awesome-swiper实现轮播图
    这篇文章主要讲解了“怎么使用vue轮播组件vue-awesome-swiper实现轮播图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用vue轮播组件vue-awesome-swipe...
    99+
    2023-07-04
  • Vue实现轮播图组件的封装
    目录轮播图功能-获取数据轮播图-通用轮播图组件轮播图-数据渲染轮播图-逻辑封装轮播图功能-获取数据 目标: 基于pinia获取轮播图数据 核心代码: (1)在types/data.d...
    99+
    2023-05-16
    Vue轮播图组件封装 Vue组件封装
  • Vue实现可复用轮播组件的方法
    本文用vue简单的实现了一个轮播图的基础功能,并抽离出来作为一个公共组件,方便复用 html和js部分 <template>   <div     class="i...
    99+
    2024-04-02
  • Vue组件实现景深卡片轮播示例
    目录前言需求拆解开发思路(vue2)开发过程后记前言 朋友的朋友做了个首页,首页用到一个卡片轮播,大概就是这个样子的: 第一版他们是开发出来了,但是各种bug,希望我帮忙改一下。 ...
    99+
    2024-04-02
  • 基于vue.js轮播组件vue-awesome-swiper实现轮播图的示例分析
    这篇文章主要为大家展示了“基于vue.js轮播组件vue-awesome-swiper实现轮播图的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于vu...
    99+
    2024-04-02
  • vue中怎么实现一个无限轮播插件
    这篇文章给大家介绍vue中怎么实现一个无限轮播插件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。思路:要实现无限轮播,需要在轮播图前后各加一张图片,加在前面的是轮播图的最后一张图片(重...
    99+
    2024-04-02
  • 怎么用vue整合mint-ui实现轮播图
    这篇文章主要介绍“怎么用vue整合mint-ui实现轮播图”,在日常操作中,相信很多人在怎么用vue整合mint-ui实现轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用vue整合mint-ui实现...
    99+
    2023-07-04
  • vue使用swiper插件实现垂直轮播图
    目录使用swiper插件做垂直轮播图swiper轮播插件使用 一次显示多个slidesSwiper 动态加载数据遇到的坑总结使用swiper插件做垂直轮播图 1.下载安装 cnpm ...
    99+
    2023-01-14
    vue使用swiper插件 vue垂直轮播图 vue swiper插件
  • vue中怎么使用vue-awesome-swiper轮播图插件
    vue中怎么使用vue-awesome-swiper轮播图插件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步安装npm ins...
    99+
    2024-04-02
  • vue的vue-awesome-swiper轮播图插件怎么使用
    这篇文章主要讲解了“vue的vue-awesome-swiper轮播图插件怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的vue-awesome-swiper轮播图插件怎么使用...
    99+
    2023-07-04
  • vue使用swiper插件实现轮播图的示例
    目录vue - 使用swiper插件实现轮播图 使用watch与$nextTick解决轮播的Bug hello大家好,最近我在做一个仿饿了么的项目,我会将我的项目经验同步到这里,与大...
    99+
    2024-04-02
  • vue3+Pinia+TypeScript 实现封装轮播图组件
    目录为什么封装?静态结构 后面再进行更改请求数据都存放在pinia里面类型检测页面级组件全局组件为什么封装? 迎合es6模块化开发思想注册为全局组件,可以更好地复用,需要用到的地方,...
    99+
    2024-04-02
  • Angular2如何使用组件与指令实现图片轮播组件
    这篇文章主要介绍了Angular2如何使用组件与指令实现图片轮播组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、创建组件结束上文打的尴...
    99+
    2024-04-02
  • 使用JSX实现Carousel轮播组件的方法(前端组件化)
    在我们用 JSX 建立组件系统之前,我们先来用一个例子学习一下组件的实现原理和逻辑。这里我们就用一个轮播图的组件作为例子进行学习。轮播图的英文叫做 Carousel,它有一个旋转木马...
    99+
    2024-04-02
  • 如何使用vue实现轮播图片
    这篇“如何使用vue实现轮播图片”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用vue实现轮播图片”文章吧。效果图案例...
    99+
    2023-07-02
  • 怎么利用纯CSS实现文字轮播与图片轮播
    本文小编为大家详细介绍“怎么利用纯CSS实现文字轮播与图片轮播”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用纯CSS实现文字轮播与图片轮播”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • css轮播图怎么实现
    css轮播图实现方法:1、准备几张大小相同的图片。2、展示图片横排放在一个图片容器里。3、图片容器外再加一个展示容器。4、在图片容器上添加自定义动画。具体操作步骤:准备了3张大小相同的图片,将图片的文件名命名为1.png,2.png,3.p...
    99+
    2024-04-02
  • JavaScript怎么实现轮播图
    这篇文章主要介绍“JavaScript怎么实现轮播图”,在日常操作中,相信很多人在JavaScript怎么实现轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript怎么实现轮播图”的疑惑有所...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作