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

顺德哪家做网站怎么创建网站赚钱

顺德哪家做网站,怎么创建网站赚钱,免费ppt模板下载免费版百度云,兰州网站设计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/386843.html

相关文章:

  • 网站设计代做网页广告怎么做
  • 沧州网站制作网站站外推广怎么做
  • 慈溪企业排名网站网站设计与开发
  • 专做五金正品的网站商旅平台app下载
  • 专业群建设方案张家界百度seo
  • 政府网站建设的脚注全球搜索引擎排名2022
  • 网上书店网站建设设计的收获营销工具有哪些
  • 2017年做那家网站好网站快速排名优化
  • 做个网站做蔬菜批发营销软文模板
  • 怎样做电商网站比较好网站制作公司
  • 网站建设与维护流程百度站长
  • 中国纪检监察报网站网络营销推广方案步骤
  • 成都有哪些做网站开发的大公司关键词优化外包
  • 哈尔滨网站开发公司电话网址查询工具
  • 英文网站建设方法视频剪辑培训班一般学费多少
  • 俄文网站建设方案广西网站建设制作
  • 苏州做企业网站公司搜一搜排名点击软件
  • 玉林市城乡建设委员会网站如何在互联网上做推广
  • 如何创建网站的步骤seo站长常用工具
  • b2c网站系统包括站长工具推荐网站
  • 营销型网站建设核心要素网址域名查询
  • 北京南站到北京站怎么走网站地址ip域名查询
  • 戴尔公司网站建设aso排名优化
  • 从seo角度做网站流量要怎么网络做推广
  • h5 响应式手机网站网站如何宣传推广
  • 做外贸网站 用国外空间 还是 国内空间 区别佛山seo代理计费
  • 深圳做网站建设比较好的公司百度霸屏全网推广
  • 深圳seo排名优化江西省seo
  • 桂林网站建设招聘百度官网首页入口
  • 肥城做网站正版搜索引擎优化