在vue中手写一个文字的轮播功能

8 篇文章 0 订阅
5 篇文章 0 订阅

    最近在中控项目中遇到一个问题,就是需要轮播显示数据,网上给的教程都是定高的,所以就自己写了一个,效果如下:

对于这种轮播的功能,其实应该根据是否定高去分为两种情况用不同的方案去处理。

一、 不定高轮播

      我在看了很多博客之后发现他们给的方案都是定高的,这种你可能一搜一大把,我就只分享别人没有说过或者不容易找到的情况吧。我暂且将轮播的部分称为轮播区域,将轮播区域之外的地方成为外部吧。

定高的情况下我选择的是使用vue中的:style动态改变轮播区域的transform属性,如果你需要上下滚动就调整translateY,如果需要左右滚动就调整translateX属性,然后在你从后台拉取数据之后设置一个定时器,每隔多久去改变多少的translateY(或translateX)的值,这一部分可以控制滚动的速度。代码如下:

<div ref="scroll" :style="pos">
    <ul>
        <li class="fcd7e" v-for="item in list" :key="item.index">
            {{item}}
        </li>
    </ul>
</div>

// js部分
export default {
    data() {
        return: {
            list: ['周杰伦','蔡徐坤','李现','马蓉','马云','马化腾'],
            height: 0, // 轮播区域的高度
            yPos: 0,  // 轮播到了多少距离
        }
    },
    computed: {
        pos() {
          return { transform: `translateY(${this.yPos}px` }; // 计算属性改变style
        }
    },
    mounted() {
        this.initScroll()  // 通常不是在mounted中调用initScroll()这个方法,而是获取list后
    },
    methods: {
        initScroll() {
           this.$nextTick(() => {
                this.height = this.$refs.scroll.offsetHeight;
                setInterval(() => {
                    if (this.yPos > -this.height / 2) {
                        this.yPos = this.yPos - 1;
                    } else {
                    this.yPos = 0;
                    }
                }, 50);
           });
        }
    }
}

      然后你需要调整一下外部样式,给其一个宽高,overflow设为hidden; 当然你可以将上面的代码微调一下,让其变成左右滑动,还可以改变速度,也可以添加鼠标移动到轮播上面时停止定时器,然后鼠标移出时打开定时器,这样做出一个鼠标移到上面停止的效果。

二、 定高轮播

由于不定高轮播中,我们是需要一直改变transform的值,性能会不好。比如在我们公司的,为了图便宜买了一个配置很差的电视机,就感觉像滚不动一样。所以在定高轮播中,我们需要其他方案。这里我研究了三套方案,但其他作者可能都写过了,所以就简单记录一下吧。

      1. 使用<marquee>标签,性能很好,但会存在滚了之后存在大量留白的情况,所以不推荐。

      2.使用css原生动画

      3.使用vue动画

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要安装vue-awesome-swiper插件,可以使用以下命令安装: ``` npm install vue-awesome-swiper --save ``` 然后在你的Vue组件引入和使用它。假设你的表格数据是一个数组 `tableData`,每个数据行有三个字段:`id`、`name`和`age`。 ```html <template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="item in slideData" :key="item.id"> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr> <td>{{ item.id }}</td> <td>{{ item.name }}</td> <td>{{ item.age }}</td> </tr> </tbody> </table> </div> </div> <div class="swiper-pagination"></div> </div> </template> <script> import 'swiper/css/swiper.css' import Swiper from 'vue-awesome-swiper' export default { name: 'TableSlider', components: { Swiper, }, data() { return { tableData: [ { id: 1, name: 'Alice', age: 25 }, { id: 2, name: 'Bob', age: 30 }, { id: 3, name: 'Charlie', age: 35 }, { id: 4, name: 'David', age: 40 }, ], } }, computed: { slideData() { const slideCount = Math.ceil(this.tableData.length / 3) const slideData = [] for (let i = 0; i < slideCount; i++) { const start = i * 3 const end = start + 3 slideData.push(this.tableData.slice(start, end)) } return slideData }, }, mounted() { new Swiper('.swiper-container', { pagination: '.swiper-pagination', paginationClickable: true, spaceBetween: 30, loop: true, autoplay: { delay: 3000, }, }) }, } </script> ``` 在上面的代码,我们使用Swiper组件来实现轮播功能。Swiper组件需要一个包裹元素(`div.swiper-container`)和一些轮播内容元素(`div.swiper-slide`)。我们使用`v-for`指令来循环渲染表格数据,每三个数据行渲染为一个轮播内容元素。 在`computed`选项,我们使用`slice`方法来分割表格数据,每三个数据行为一组,最终得到一个二维数组`slideData`,其每个元素都是一个包含三个数据行的数组。 在`mounted`生命周期钩子,我们创建一个Swiper实例,并传入一些配置选项,例如分页器、轮播间距、循环播放和自动播放等。 最后,我们需要在组件的样式添加一些CSS规则来美化Swiper组件。例如,我们可以添加以下CSS规则来控制表格的样式: ```css .swiper-slide { display: flex; justify-content: center; align-items: center; } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } ``` 这样就完成了一个简单的表格轮播组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值