当前位置: 首页 > wzjs >正文

顺德龙江网站建设互联网销售怎么做

顺德龙江网站建设,互联网销售怎么做,泸州住房和城乡建设厅网站首页,有什么做vi设计的网站vue3elementPluscssjs 模拟liMarquee插件,实现无限滚动效果 功能:1、表格数据大于一定数量之后,开始向上滚动 2、当鼠标移入的时候,动画停止,鼠标移出,继续动画 3、滚动动画的速度可以自定义 4、表格的高度…

vue3+elementPlus+css+js 模拟liMarquee插件,实现无限滚动效果

功能:1、表格数据大于一定数量之后,开始向上滚动

           2、当鼠标移入的时候,动画停止,鼠标移出,继续动画

           3、滚动动画的速度可以自定义

           4、表格的高度固定

           5、向上滚动时,无限滚动,不存在卡顿

<template>

  <div

    class="scrolling-table-container"

    @mouseenter="pauseAnimation"

    @mouseleave="resumeAnimation"

  >

    <div class="table-wrapper" :style="{ height: tableHeight }">

      <el-table

        :data="displayData"

        :loading="loading"

        style="width: 100%"

        :show-header="showHeader"

        :row-key="rowKey"

        class="scrolling-table"

        :class="{

          'enable-scroll': needScroll,

          'is-paused': isPaused

        }"

      >

        <el-table-column

          v-for="column in columns"

          :key="column.prop"

          :prop="column.prop"

          :label="column.label"

          :width="column.width"

          :min-width="column.minWidth"

          :fixed="column.fixed"

        >

          <template #default="scope" v-if="column.hasSlot">

            <slot :name="column.prop" :row="scope.row" :index="scope.$index"></slot>

          </template>

        </el-table-column>

      </el-table>

    </div>

  </div>

</template>

<script setup lang="ts" name="ScrollingTable">

import { ref, computed, watch, onMounted, onBeforeUnmount } from 'vue'

import { ElTable, ElTableColumn } from 'element-plus'

interface TableColumn {

  prop: string

  label: string

  width?: string | number

  minWidth?: string | number

  fixed?: string | boolean

  hasSlot?: boolean

}

interface ScrollingTableProps {

  tableData: Record<string, unknown>[]

  columns: TableColumn[]

  loading?: boolean

  rowKey?: string

  showHeader?: boolean

  tableHeight?: string

  scrollThreshold?: number

  scrollSpeed?: number

  scrollDelay?: number

}

const props = withDefaults(defineProps<ScrollingTableProps>(), {

  loading: false,

  rowKey: 'id',

  showHeader: true,

  tableHeight: '250px',

  scrollThreshold: 8,

  scrollSpeed: 120,

  scrollDelay: 2000

})

const displayData = ref<Record<string, unknown>[]>([])

const isPaused = ref(false)

let delayTimer: number | null = null

// 计算是否需要滚动

const needScroll = computed(() => props.tableData.length > props.scrollThreshold)

// 计算动画持续时间

const animationDuration = computed(() => {

  if (!needScroll.value) return 0

  // 基于数据长度计算合适的动画时间,确保平滑滚动

  return Math.max(props.tableData.length * props.scrollSpeed, 3000)

})

// 初始化显示数据

const initDisplayData = () => {

  if (needScroll.value && props.tableData.length > 0) {

    // 为无缝滚动复制数据

    displayData.value = [

      ...props.tableData,

      ...props.tableData

    ]

  } else {

    displayData.value = [...props.tableData]

  }

}

// 启动动画(延迟)

const startAnimation = () => {

  if (!needScroll.value) return

  clearTimeout(delayTimer!)

  delayTimer = setTimeout(() => {

  }, props.scrollDelay)

}

// 停止所有定时器

const stopTimers = () => {

  if (delayTimer) {

    clearTimeout(delayTimer)

    delayTimer = null

  }

}

// 暂停动画

const pauseAnimation = () => {

  isPaused.value = true

}

// 恢复动画

const resumeAnimation = () => {

  isPaused.value = false

}

// 重新初始化

const reinitialize = () => {

  stopTimers()

  isPaused.value = false

  initDisplayData()

  startAnimation()

}

// 监听数据变化

watch(() => props.tableData, () => {

  reinitialize()

}, { immediate: true })

// 监听配置变化

watch([

  () => props.scrollThreshold,

  () => props.scrollSpeed,

  () => props.scrollDelay

], () => {

  reinitialize()

})

onMounted(() => {

  startAnimation()

})

onBeforeUnmount(() => {

  stopTimers()

})

// 暴露方法

defineExpose({

  reinitialize,

  needScroll,

  pauseAnimation,

  resumeAnimation

})

</script>

<style lang="scss" scoped>

.scrolling-table-container {

  cursor: default;

  :deep(.el-table thead){

    color: #242933 !important;

    font-weight: 500;

  }

  .table-wrapper {

    overflow: hidden;

    position: relative;

     :deep(.el-table thead th.el-table__cell) {

        background: #F8F9FA !important;

      }

  }

  .scrolling-table {

    // 基本样式

    :deep(.el-table__body-wrapper) {

      overflow: hidden !important;

     

      &::-webkit-scrollbar {

        display: none;

      }

    }

   

    :deep(.el-table__header-wrapper) {

      overflow-x: hidden;

    }

    :deep(.el-table thead){

      color: #242933 !important;

      font-weight: 500;

    }

    :deep(.el-table__row) {

      transition: none;

    }

   

    :deep(.el-table__body) {

      transition: none;

    }

   

    // 鼠标悬停样式

    :deep(.el-table__row):hover {

      background-color: #f5f7fa;

    }

   

    // 启用滚动时的动画

    &.enable-scroll :deep(.el-table__body) {

      animation: scroll-up v-bind("animationDuration + 'ms'") linear infinite;

      animation-delay: v-bind("scrollDelay + 'ms'");

    }

   

    // 暂停状态

    &.is-paused :deep(.el-table__body) {

      animation-play-state: paused;

    }

  }

}

// 滚动动画关键帧 - 无限向上滚动

@keyframes scroll-up {

  0% {

    transform: translateY(0);

  }

  100% {

    transform: translateY(-50%);

  }

}

// 响应式优化

@media (prefers-reduced-motion: reduce) {

  .scrolling-table.enable-scroll :deep(.el-table__body) {

    animation: none;

  }

}

</style>

相比liMarquee,优点如下:

1、不用使用npm 安装liMarquee包

2、liMarquee是基于jquery的,使用liMarquee,还得安装jquery

3、使用js、css 实现动画效果,性能友好

http://www.dtcms.com/wzjs/390654.html

相关文章:

  • 电子商务网站建设与管理pdf下载国际十大市场营销公司
  • 建站63年来第一次闭站 北京站辟谣网络营销专业学校排名
  • 秦皇岛做网站的公司选汉狮网站关键词快速排名服务
  • 帝国cms做搜索网站如何查询关键词的搜索量
  • 做网站如何在百度快照上排名长沙优化官网服务
  • 网站关键字优化技巧网站建设品牌公司
  • 用帝国做网站好做吗seo投放是什么意思
  • java做网站合适吗网站广告制作
  • 东营科技官方网站怎么做一个自己的网页
  • 微网站是自己做可以不搜索引擎优化实训报告
  • 网站建设开发html百度网盘电脑版
  • 回龙观网站建设市场营销七大策略
  • 曲靖网站设计日本进口yamawa
  • 宣传类的网站惠州网络推广
  • 单位网站建设汇报材料品牌网站建设方案
  • 云购网站开发seo资源是什么意思
  • 佛山哪个做网站的好站外推广渠道有哪些
  • 网站首页ico怎么做网络营销与直播电商怎么样
  • 详细描述建设一个网站的具体步骤首页排名seo
  • 政府网站建设的流程因素市场seo是什么
  • 网站建设考虑因素游戏推广员招聘
  • wordpress短代码参数seo企业优化方案
  • 做网站(信科网络)营销渠道策略
  • php网站建设教程 电子书google权重查询
  • 营销单页网站模板长春百度关键词优化
  • 网页制作模板动物佛山做网络优化的公司
  • 网站如何做移动适配seo服务外包公司
  • 可以做免费的网站吗网络舆情处置的五个步骤
  • 阿里云做网站怎么样百度指数免费添加
  • 做网站卖资料上海专业的seo推广咨询电话