手写 分页

news2024/11/16 7:28:05

子组件:TimePage.vue

效果图

在这里插入图片描述

<template>
  <div class="click-scroll-X">
    <!---->
    <!-- eslint-disable-next-line  -->
    <span class="left_btn" :disabled="pageNo == 1" @click="leftSlide"><</span>
    <!-- 中间 -->
    <div class="scroll_wrapper" ref="wrapperCon">
      <div class="scroll_list">![在这里插入图片描述](https://img-blog.csdnimg.cn/e75ad999561c4016bad4f13b9b447537.png)

        <div
          class="item"
          :class="{ active: pageNo == item.value }"
          @click="clickItem(item)"
          v-for="(item, index) in timeList"
          :key="index"
        >
          {{ item.label }}
        </div>
      </div>
    </div>

    <!---->
    <span
      class="right_btn"
      :disabled="clickValue.value == timeList.length"
      @click="rightSlide"
      :class="{ active: pageNo == clickValue.value + 1 }"
    >
      >
    </span>
    <button>前往</button>
    <button>00</button>: <button>30</button>
  </div>
</template>

<script>
export default {
  name: "TimePage",
  props: ["timeList", "pageNo"],
  data() {
    return {
      clickValue: {},
    };
  },
  methods: {
    clickItem(item) {
      console.log(item, "item-----");
      this.clickValue = item;
      // let timeLength = this.timeList.length; //时间段个数
      this.$emit("getPageNo", this.clickValue);
    },
    // 左箭头
    leftSlide() {
      // 保存滚动盒子左侧已滚动的距离
      let left = this.$refs.wrapperCon.scrollLeft;
      let num = 0;
      clearInterval(this.timer);
      this.timer = null;
      this.timer = setInterval(() => {
        //   !left:已经滚动到最左侧
        //   一次性滚动距离(可调节)
        if (!left || num >= 360) {
          // 停止滚动
          clearInterval(this.timer);
          this.timer = null;
          return;
        }
        // 给滚动盒子元素赋值向左滚动距离
        this.$refs.wrapperCon.scrollLeft = left -= 30;
        // 保存向左滚动距离(方便判断一次性滚动多少距离)
        num += 30;
      }, 20);
      // 20:速度(可调节)
    },
    // 右箭头
    rightSlide() {
      // 保存滚动盒子左侧已滚动的距离
      let left = this.$refs.wrapperCon.scrollLeft;

      // 保存元素的整体宽度
      let scrollWidth = this.$refs.wrapperCon.scrollWidth;
      // 保存元素的可见宽度
      let clientWidth = this.$refs.wrapperCon.clientWidth;
      console.log(left, scrollWidth, clientWidth, "left999999");
      let num = 0;
      clearInterval(this.timer);
      this.timer = setInterval(() => {
        // 已经滚动距离+可见宽度
        // left+clientWidth>=scrollWidth:滚动到最右侧
        // num>=300一次性滚动距离
        if (left + clientWidth >= scrollWidth || num >= 360) {
          clearInterval(this.timer);
          return;
        }
        // 给滚动盒子元素赋值向左滚动距离
        this.$refs.wrapperCon.scrollLeft = left += 30;
        console.log(
          this.$refs.wrapperCon.scrollLeft,
          " this.$refs.wrapperCon.scrollLeft----"
        );
        // 保存向左滚动距离(方便判断一次性滚动多少距离)
        num += 30;
      }, 20);
      // 20:速度(可调节)
    },
  },
  computed: {},
};
</script>

<style lang="less" scoped>
.click-scroll-X {
  // text-align: right;
  display: flex;
  align-items: center;
  justify-content: end;
  margin-right: 20px;
  margin-top: 20px;
  .left_btn {
    font-size: 20px;
    cursor: pointer;
    margin: 0px 15px 0;
  }
  .right_btn {
    font-size: 20px;
    cursor: pointer;
    margin: 0px 15px 0;
  }
  button {
    margin: 0 5px;
    background-color: #f4f4f5;
    color: #606266;
    outline: none;
    border-radius: 2px;
    // padding: 0 4px;
    vertical-align: top;
    display: inline-block;
    font-size: 13px;
    height: 28px;
    line-height: 28px;
    cursor: pointer;
    box-sizing: border-box;
    text-align: center;
    border: 0;
    &[disabled] {
      color: #c0c4cc;
      cursor: not-allowed;
    }

    &.active {
      cursor: not-allowed;
      background-color: #409eff;
      color: #fff;
    }
  }
  .scroll_wrapper {
    width: 480px;
    overflow-x: scroll;
    .scroll_list {
      display: flex;
      align-items: center;
      justify-content: space-between;
      .item {
        cursor: pointer;
        width: 60px;
        height: 30px;
        display: flex;
        align-items: center;
        justify-content: center;
        // border: 1px solid #ccc;
        // border-radius: 3px;
        // box-sizing: border-box;
        flex-shrink: 0;
      }
    }
  }
}
.active {
  color: skyblue;
}
/*隐藏滚动条*/
.scroll_wrapper::-webkit-scrollbar {
  display: none;
}
</style>

父组件: ParentTime.vue

<template>
  <div id="app">
    <TimePage
      :timeList="timeArray"
      :pageNo="page"
      @getPageNo="getPageNo"
    ></TimePage>
  </div>
</template>

<script>
import TimePage from "./components/TimePage.vue";
export default {
  name: "App",
  data() {
    return {
      // 初始化页数
      page: 1,
      timeArray: [
        { value: 0, label: "00:00" },
        { value: 1, label: "00:15" },
        { value: 2, label: "00:30" },
        { value: 3, label: "00:45" },
        { value: 4, label: "01:00" },
        { value: 5, label: "01:15" },
        { value: 6, label: "01:30" },
        { value: 7, label: "01:45" },
        { value: 8, label: "02:00" },
        { value: 9, label: "02:15" },
        { value: 10, label: "02:30" },
        { value: 11, label: "02:45" },
        { value: 12, label: "03:00" },
        { value: 13, label: "03:15" },
        { value: 14, label: "03:30" },
        { value: 15, label: "03:45" },
        { value: 16, label: "04:00" },
        { value: 17, label: "04:15" },
        { value: 18, label: "04:30" },
        { value: 19, label: "04:45" },
        { value: 20, label: "05:00" },
        { value: 21, label: "05:15" },
        { value: 22, label: "05:30" },
        { value: 23, label: "05:45" },
        { value: 24, label: "06:00" },
        { value: 25, label: "06:15" },
        { value: 26, label: "06:30" },
        { value: 27, label: "06:45" },
        { value: 28, label: "07:00" },
        { value: 29, label: "07:15" },
        { value: 30, label: "07:30" },
        { value: 31, label: "07:45" },
        { value: 32, label: "08:00" },
        { value: 33, label: "08:15" },
        { value: 34, label: "08:30" },
        { value: 35, label: "08:45" },
        { value: 36, label: "09:00" },
        { value: 37, label: "09:15" },
        { value: 38, label: "09:30" },
        { value: 39, label: "09:45" },
        { value: 40, label: "10:00" },
        { value: 41, label: "10:15" },
        { value: 42, label: "10:30" },
        { value: 43, label: "10:,45" },
        { value: 44, label: "11:00" },
        { value: 45, label: "11:15" },
        { value: 46, label: "11:30" },
        { value: 47, label: "11:45" },
        { value: 48, label: "12:00" },
        { value: 49, label: "12:15" },
        { value: 50, label: "12:30" },
        { value: 51, label: "12:45" },
        { value: 52, label: "13:00" },
        { value: 53, label: "13:15" },
        { value: 54, label: "13:30" },
        { value: 55, label: "13:45" },
        { value: 56, label: "14:00" },
        { value: 57, label: "14:15" },
        { value: 58, label: "14:30" },
        { value: 59, label: "14:45" },
        { value: 60, label: "15:00" },
        { value: 61, label: "15:15" },
        { value: 62, label: "15:30" },
        { value: 63, label: "15:45" },
        { value: 64, label: "16:00" },
        { value: 65, label: "16:15" },
        { value: 66, label: "16:30" },
        { value: 67, label: "16:45" },
        { value: 68, label: "17:00" },
        { value: 69, label: "17:15" },
        { value: 70, label: "17:30" },
        { value: 71, label: "17:45" },
        { value: 72, label: "18:00" },
        { value: 73, label: "18:15" },
        { value: 74, label: "18:30" },
        { value: 75, label: "18:45" },
        { value: 76, label: "19:00" },
        { value: 77, label: "19:15" },
        { value: 78, label: "19:30" },
        { value: 79, label: "19:45" },
        { value: 80, label: "20:00" },
        { value: 81, label: "20:15" },
        { value: 82, label: "20:30" },
        { value: 83, label: "20:45" },
        { value: 84, label: "21:00" },
        { value: 85, label: "21:15" },
        { value: 86, label: "21:30" },
        { value: 87, label: "21:45" },
        { value: 88, label: "22:00" },
        { value: 89, label: "22:15" },
        { value: 90, label: "22:30" },
        { value: 91, label: "22:45" },
        { value: 92, label: "23:00" },
        { value: 93, label: "23:15" },
        { value: 94, label: "23:30" },
        { value: 95, label: "23:45" },
      ],
    };
  },
  computed: {
   // timeLength() {
   //   return this.timeArray.length;
   // },
  },
  methods: {
    getPageNo(item) {
      this.page = item.value;
      console.log(this.page, item, "-----");
    },
  },
  components: {
    TimePage,
  },
};
</script>

<style scoped>

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一次线上fullgc问题排查过程

某天&#xff0c;接到测试部门反馈说线上项目突然很快&#xff0c;由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务&#xff0c;先关闭次任务后观察是否卡顿&#xff0c;并检查堆内存是否使用完造成频繁gc 1.通过jmap命令查看堆内存中的对象 2.生成当…

解决:uniapp项目中调用小程序的chooseAddress() API失效

目录 问题描述 解决方案 问题描述 使用 Hbuilder X 编辑器和 uni-app 框架开发小程序项目&#xff0c;在调用小程序提供的 uni.chooseAddress() API实现选择收货地址的功能时&#xff0c;点击选择收货地址没有反应&#xff0c;获取不到用户收货地址&#xff0c;API失效了 …

【python获取.doc内表格指定单元格数据】

python获取.doc内表格指定单元格数据 需求说明代码部分 需求说明 读取.doc内表格中指定数据并以对象形式输出 1、获取第一张表内&#xff1a;部门编码、物料编码、退库数量(数字型)、物料质量问题描述、物料来源、填写人数据 2、获取第二张表格内&#xff1a;采购人员ID案例表…

简单列举客户关系管理系统的核心功能

CRM客户关系管理系统能够帮助企业收集、管理、维护客户信息&#xff0c;轻松跟进客户全过程&#xff0c;提供高质量的客户服务&#xff0c;通过数据分析为管理数据赋能。CRM系统能够让企业以客户为中心&#xff0c;实现全维度管理。那么&#xff0c;CRM系统的核心功能有哪些&am…

如何实现全网采集

品牌在控价过程中&#xff0c;需要对产品链接的价格进行监测&#xff0c;监测就要先做采集&#xff0c;采集完成后&#xff0c;再对数据进行促销信息的汇总计算&#xff0c;得出到手价&#xff0c;输出低价报表&#xff0c;从过程中可以看出&#xff0c;采集是非常关键的一步&a…

简单理解JS回调函数(callback)

一、回调函数到底是什么&#xff1f; 其实回调函数&#xff08;没有调用也会执行&#xff09;就是一个参数&#xff0c;把这个参数传到另一个函数里面&#xff0c;也就是主函数里面&#xff0c;当主函数里面的事情干完再回头去执行当做参数传进去的回调函数&#xff0c;回头去调…

Kelper.js 笔记 python交互

1 加载Kepler 地图 KeplerGl() 1.1 主要参数 height 可选 默认值&#xff1a;400 地图显示的高度 data 数据集 字典&#xff0c;键是数据集的名称 config地图配置字典 1.2 举例 from keplergl import KeplerGlmap_KeplerGl() map_ 默认的位置 1.3 添加自己的图 1.3.1 读…

关键词搜索苏宁商品列表数据,苏宁商品列表数据接口,苏宁API接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取苏宁网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;苏宁网站…

试过GPT-4V后,微软写了个166页的测评报告,业内人士:高级用户必读

一周之前&#xff0c;ChatGPT迎来重大更新&#xff0c;不管是 GPT-4 还是 GPT-3.5 模型&#xff0c;都可以基于图像进行分析和对话。与之对应的&#xff0c;多模态版GPT-4V模型相关文档也一并放出。当时 OpenAI 放出的文档只有18页&#xff0c;很多内容都无从得知&#xff0c;对…

作战仿真试验理论体系研究

源自&#xff1a;装甲兵工程学院学报 作者&#xff1a;徐享忠&#xff0c;杨建东&#xff0c;郭齐胜 “人工智能技术与咨询” 发布 摘要 建立了作战仿真试验的概念框架&#xff0c;以预测论、作战仿真理论和试验理论为基础理论&#xff0c;以仿真试验目标、仿真试验模式、…

Java基于SpringBoot+Vue的汽车租赁系统

1 简介 致远汽车租赁管理方面的任务繁琐,以至于公司每年都在致远汽车租赁管理这方面投入较多的精力却效果甚微,致远汽车租赁系统的目标就是为了能够缓解致远汽车租赁管理工作方面面临的压力,让致远汽车租赁管理方面的工作变得更加高效准确。 文章首发地址 2 技术栈 开发语言…

Kubernetes核心组件Services

1. Kubernetes Service概念 Service是kubernetes最核心的概念&#xff0c;通过创建Service&#xff0c;可以为一组具有相同功能的POD&#xff08;容器&#xff09;应用提供统一的访问入口&#xff0c;并且将请求进行负载分发到后端的各个容器应用上。 在Kubernetes中&#xf…

vue项目打包后使用reverse-sourcemap反编译到源码(详解版)

首先得说一下&#xff0c;vue项目中productionSourceMap这个属性。该属性对应的值为true|false。 当productionSourceMap: true,时&#xff1a;   1、打包后能看到xxxx.js.map文件,map文件够通过反编译看到源码;   2、打包后会导致文件变大(因为多了很多map文件导致的)&…

智慧政务大屏建设方案

智慧政务大屏建设方案是为政府部门提供信息化展示和决策支持的重要工具。下面将提供一个详细的智慧政务大屏建设方案&#xff0c;包括硬件设备、软件平台和功能模块等。 **一、硬件设备** 智慧政务大屏的硬件设备需要满足以下基本要求&#xff1a; 1. 显示屏&#xff1a;选择…

网页游戏的开发流程

网页游戏的开发流程可以根据项目的规模和复杂性而有所不同&#xff0c;但通常包括以下一般步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.需求分析&#xff1a; 确定游戏的概念、目标受众和核…

关于信息安全软考的记录5

1、防火墙的概念 为了应对网络威胁&#xff0c;联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离。 网络的安全信息程度和需要保护的对象&#xff0c;人为地划分若干安全区域&#xff0c;这些安全区域有&#xff1a; 公共外部网络&#xff0c;如Intrenet内联网&…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)

七、华为云耀云服务器L实例评测包管理工具安装软件&#xff1a; 根据企业级项目架构图所示&#xff0c;本章主要是安装公司企业项目的基本环境LNMP&#xff0c;相关的包管理器Composer、Node、Npm、Yarn安装&#xff0c;评测一下包管理工具安装软件是否存在问题&#xff0c;如果…

【Tomcat】Apache发布两个新版本Tomcat修复多个Bug

Apache 官网发布了两个最新的 Tomcat 版本包&#xff0c;分别是&#xff1a;8.5.94、9.0.81 这两个最新版本修复了多个漏洞&#xff0c;统计信息如下表所示。有关漏洞的详细信息&#xff0c;请查阅官方相关文档&#xff08;见&#xff1a;参考&#xff09;。 严重等级漏洞说明…

Premiere Elements 2024(PR简化版)直装版

Adobe Premiere Elements 2024 是一款由Adobe Systems推出的视频编辑软件&#xff0c;它结合了易用性和专业级的功能&#xff0c;帮助用户对视频进行剪辑、特效、色彩校正等处理。 主要功能和特点&#xff1a; 导入和组织视频&#xff1a;Premiere Elements 2024允许用户快速导…

安装CentOS7.9操作系统

下面是安装CentOS7.9操作系统的步骤&#xff1a; 下载CentOS7.9镜像文件&#xff0c;可以到CentOS官网或者其他镜像站点下载。 创建一个可用的安装媒介&#xff0c;可以使用USB或者DVD。 插入安装媒介&#xff0c;启动计算机&#xff0c;进入BIOS设置&#xff0c;选择从外部设…