iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue怎么实现列表垂直无缝滚动
  • 472
分享到

vue怎么实现列表垂直无缝滚动

2023-06-29 22:06:08 472人浏览 安东尼
摘要

这篇文章主要介绍“Vue怎么实现列表垂直无缝滚动”,在日常操作中,相信很多人在vue怎么实现列表垂直无缝滚动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现列表垂直无缝滚动”的疑惑有所帮助!接下来

这篇文章主要介绍“Vue怎么实现列表垂直无缝滚动”,在日常操作中,相信很多人在vue怎么实现列表垂直无缝滚动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现列表垂直无缝滚动”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

实现新闻列表的轮播(如下图)

vue怎么实现列表垂直无缝滚动

上代码

封装的so-marquee.vue

<template>    <div        class="marquee-wrapper"        :    >        <div            class="marquee-container"            :            :class="className"        >            <ul                ref="marqueeCon"                :id="tooltipId"                class="marquee-content"                :class="{ anim: animate === true}"                @mouseenter="handleStop()"                @mouseleave="handleUp()"            >                <li                    v-for="(item,index) in realData"                    :key="`${tooltipId}-${item.id}-${index}`"                    class="marquee-item"                    :                    @click="handleClick(item)"                >                    <slot name="itemCon" :item="item"></slot>                </li>            </ul>        </div>    </div></template><script>import { parseToNum, generateId } from '@/utils/util'export default {    name: "so-marquee",    props: {                //列表数据        data: {            type: Array,            default: () => [],        },        //自定义类名        className: String,        //列表宽度,默认值:400        width: {            type: [Number, String],            default: 400        },        //列表高度,默认值:200        height: {            type: [Number, String],            default: 200        },        //可视的条目数,默认值:5        showNumber: {            type: [Number, String],            default: 5        },        //轮播速度,默认值:1000        speed: {            type: [Number, String],            default: 1000        }    },    data() {        return {            intnum: undefined,            animate: false        };    },    computed: {        tooltipId() {            return `marquee-con-${ generateId() }`;        },        realWidth() {            return parseToNum(this.width)        },        realHeight() {            return parseToNum(this.height)        },        realShowNumber() {            return parseToNum(this.showNumber)        },        realSpeed() {            return parseToNum(this.speed) < 1000 ? 1000 : parseToNum(this.speed)        },        itemHeigth() {            return this.realHeight / this.realShowNumber        },        realData() {            return JSON.parse(jsON.stringify(this.data))        }    },    mounted() {        if (this.realData.length > this.realShowNumber) {            this.scrollUp();        }    },    methods: {        scrollUp() {            // eslint-disable-next-line no-unused-vars            this.intnum = setInterval(_ => {                this.animate = true;                setTimeout(() => {                    this.realData.push(this.realData[0]);   // 将数组的第一个元素添加到数组的                    this.realData.shift();               //删除数组的第一个元素                    this.animate = false;           // margin-top 为0 的时候取消过渡动画,实现无缝滚动                }, this.realSpeed / 2)                this.$once('hook:beforeDestroy', () => {                    this.cleanup()                })            }, this.realSpeed);        },        handleStop() {            this.cleanup()        },        handleUp() {            this.scrollUp();        },        handleClick(row) {            this.$emit('handleClick', row)        },        cleanup() {            if (this.intnum) {                clearInterval(this.intnum);                this.intnum = null;            }        }    },    beforeDestroy() {        this.cleanup();    },    deactivated() {        this.cleanup();    },    watch: {        animate(flag) {            this.marqueeCon = this.$refs.marqueeCon            if (flag) {                this.marqueeCon.style.marginTop = `-${ this.itemHeigth }px`            } else {                this.marqueeCon.style.marginTop = 0            }        },    }};</script><style scoped lang="sCSS">    .marquee-container {        overflow: hidden;    }    .marquee-content {        position: relative;    }    .anim {        transition: all 0.5s;    }    .marquee-item {        display: flex;        align-items: center;        justify-content: space-around;    }</style>

parseToNum方法

export function parseToNum(value) {    if (value !== undefined) {        value = parseInt(value, 10)        if (isNaN(value)) {            value = null;        }    }    return value}

generateId 方法

export const generateId = function() {    return Math.floor(Math.random() * 10000);};

父组件调用

<template>    <div id="app">        <so-marquee            :data="jsonData"            :height="200"            :showNumber="4"            :speed="500"            class="my-ui-marquee"            @handleClick="handleMarqueeClick"        >            <template v-slot:itemCon="{item}">                <div>{{ item.id }}</div>                <div>{{ item.name }}</div>                <div>{{ item.date }}</div>            </template>        </so-marquee>    </div></template><script>import soMarquee from './components/so-marquee'export default {    name: 'App',    data() {        return {            jsonData: [                {                    id: 1,                    name: "开会通知",                    date: "2020-02-01"                },                {                    id: 2,                    name: "放假通知",                    date: "2020-02-02"                },                {                    id: 3,                    name: "停水通知",                    date: "2020-02-03"                },                {                    id: 4,                    name: "停电通知",                    date: "2020-02-04"                },                {                    id: 5,                    name: "停车通知",                    date: "2020-02-05"                },                {                    id: 6,                    name: "奖励通知",                    date: "2020-02-06"                },                {                    id: 7,                    name: "处分通知",                    date: "2020-02-07"                },                {                    id: 8,                    name: "处分8通知",                    date: "2020-02-08"                },                {                    id: 9,                    name: "处分9通知",                    date: "2020-02-09"                },                {                    id: 10,                    name: "处分10通知",                    date: "2020-02-10"                },            ]        }    },    components: {        soMarquee    },    methods: {        handleMarqueeClick(row) {            alert(`当前点击的第${row.id}行`)        }    }}</script><style scoped lang="scss">.my-ui-marquee {    ::v-deep.marquee-item {        cursor: pointer;    }}</style>

到此,关于“vue怎么实现列表垂直无缝滚动”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: vue怎么实现列表垂直无缝滚动

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

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

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

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

下载Word文档
猜你喜欢
  • vue实现列表垂直无缝滚动
    本文实例为大家分享了vue实现列表垂直无缝滚动的具体代码,供大家参考,具体内容如下 实现新闻列表的轮播(如下图) 上代码 封装的so-marquee.vue <templat...
    99+
    2024-04-02
  • vue怎么实现列表垂直无缝滚动
    这篇文章主要介绍“vue怎么实现列表垂直无缝滚动”,在日常操作中,相信很多人在vue怎么实现列表垂直无缝滚动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现列表垂直无缝滚动”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • vue实现列表无缝滚动
    本文实例为大家分享了vue实现列表无缝滚动的具体代码,供大家参考,具体内容如下 HTML部分代码 <template> <div id="box" clas...
    99+
    2024-04-02
  • vue实现列表无缝滚动效果
    本文实例为大家分享了vue实现列表无缝滚动效果的具体代码,供大家参考,具体内容如下 1.安装 npm install vue-seamless-scroll --save 2.在需要...
    99+
    2024-04-02
  • vue或css怎么实现列表向上无缝滚动动画
    本篇内容主要讲解“vue或css怎么实现列表向上无缝滚动动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue或css怎么实现列表向上无缝滚动动画”吧!效果如下:方法一:vue的实现方法<...
    99+
    2023-06-29
  • vue或css动画实现列表向上无缝滚动
    本文实例为大家分享了vue或css动画实现列表向上无缝滚动的具体代码,供大家参考,具体内容如下 方法一:vue的实现方法 <div id="publishMain" clas...
    99+
    2024-04-02
  • vue怎么实现无限消息无缝滚动
    本篇内容主要讲解“vue怎么实现无限消息无缝滚动”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现无限消息无缝滚动”吧!一、html<div class="t...
    99+
    2023-06-29
  • vue中使用vue-seamless-scroll插件实现列表无缝滚动效果
    需求:使用vue-seamless-scroll插件实现列表无缝滚动,也可以添加相应的点击跳转,点击事件会存在点击失效的问题。支持上下左右无缝滚动,单步滚动停留时间,以及水平方向的手...
    99+
    2024-04-02
  • 怎么用vue实现无缝滚动效果
    今天小编给大家分享一下怎么用vue实现无缝滚动效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装NPMnpm insta...
    99+
    2023-07-04
  • jquery实现表格无缝滚动
    本文实例为大家分享了jquery实现表格无缝滚动的具体代码,供大家参考,具体内容如下 css部分我是用的弹性布局 *{ margin:0; ...
    99+
    2024-04-02
  • vue实现无限消息无缝滚动
    本文实例为大家分享了vue实现无限消息无缝滚动的具体代码,供大家参考,具体内容如下 一、html <div class="table_box">    <div c...
    99+
    2024-04-02
  • vue怎么实现简单无缝滚动效果
    本篇内容介绍了“vue怎么实现简单无缝滚动效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果实现思路在vue中如何复制一份列表出来呢且不...
    99+
    2023-06-29
  • vue实现消息无缝滚动效果
    本文实例为大家分享了vue实现消息无缝滚动效果的具体代码,供大家参考,具体内容如下 JS export default { data() { return { ani...
    99+
    2024-04-02
  • vue实现简单无缝滚动效果
    本文实例为大家分享了vue实现简单无缝滚动的具体代码,供大家参考,具体内容如下 效果 实现思路 在vue中如何复制一份列表出来呢且不能丢失绑定的事件,很简单使用slot插槽,使用...
    99+
    2024-04-02
  • vue怎么实现消息向上无缝滚动效果
    这篇文章主要讲解了“vue怎么实现消息向上无缝滚动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现消息向上无缝滚动效果”吧!效果如下代码:<ul class=...
    99+
    2023-06-29
  • 基于vue-seamless-scroll怎么实现无缝滚动效果
    这篇文章主要介绍了基于vue-seamless-scroll怎么实现无缝滚动效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于vue-seamless-scroll怎么实现无缝滚动效果文章都会有所收获,下面...
    99+
    2023-06-29
  • vue实现无缝滚动手摸手教程
    目录开发背景需求分析实现思路实现需求一实现需求二实现需求三实现需求四撸起袖子开始干目录规划父组件的实现子组件的实现使用方法结语开发背景 之前在Vue2项目中使用vue-seamle...
    99+
    2023-03-06
    vue无缝滚动 vue滚动
  • Vue怎么优化无限滚动列表
    这篇文章主要介绍“Vue怎么优化无限滚动列表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么优化无限滚动列表”文章能帮助大家解决问题。问题大家都知道,Web 页面修改 DOM 是开销较大的操...
    99+
    2023-07-04
  • vue通过定时器实现垂直滚动公告
    前言 最近项目有个需求是做一个垂直滚动的公告,其中也涉及到了设置定时器和清除定时器方面的知识点,在这里记录下过程,不对的地方欢迎大家指正,一起共同进步! 思路 1. 写好样式,把滚动...
    99+
    2024-04-02
  • vue怎么实现垂直无限滑动日历组件
    这篇文章主要介绍“vue怎么实现垂直无限滑动日历组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现垂直无限滑动日历组件”文章能帮助大家解决问题。效果组件verticalCalendar...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作