vue 自定义滚动条同步拖动(移动端)

news2024/9/20 18:30:15

实现效果,拖动左右箭头实现图片区域同步滚动,到边缘停止拖动。

在这里插入图片描述
在这里插入图片描述

HTML代码

<template>
  <div @touchstart="onClick">
	<!--使用draggable组件 图片列表区域-->
    <draggable
      v-model="select_list"
      @end="onEnd"
      class="display_flex_ac list_all"
      id="imageAssignment"
    >
    </draggable>
	
	<!--自定义拖动条-->
	<div
	  ref="container"
	  class="scroll_bar"
	  @touchend="endDrag"
	  @touchcancel="endDrag"
	  @touchstart="startDrag"
	  @touchmove.prevent="drag"
	>
	  <div
	    ref="draggable"
	    class="display_flex_ac_jc slide"
	    :style="{ transform: `translateX(${left}px)` }"
	  >
	    <a-icon type="double-left" /><a-icon type="double-right" />
	  </div>
	</div>
  </div>
</template>

JS代码

<script>
export default {
  data() {
	return {
	  dragging: false,
      left: 0,
      startX: 0,
      currentX: 0,
      scrollWidth: 0,
      rollingValue: 0,
      containerWidth: 0,
      draggableWidth: 0,
	}
  },
  methods: {
  	// 点击
    onClick(){
      this.containerWidth = this.$refs.container?.offsetWidth;
      this.draggableWidth = this.$refs.draggable?.offsetWidth;
      this.scrollWidth = document.getElementById("imageAssignment")?.scrollWidth;
    },
    // 拖动开始
    startDrag(e) {
      this.dragging = true;
      this.startX = e.touches[0].clientX - this.left;
    },
    // 拖动中
    drag(e) {
      if (this.dragging) {
        const minLeft = 0;
        const newX = e.touches[0].clientX - this.startX;
        const maxLeft = this.containerWidth - this.draggableWidth; // 去掉拖动元素宽度
        this.left = Math.max(minLeft, Math.min(maxLeft, newX)); // 当前拖动值

        const maxRight = this.scrollWidth - this.containerWidth; // 去掉当前屏幕
        this.rollingValue = this.onRolling(maxRight, maxLeft, this.left); // 计算滚动值
        document.getElementById("imageAssignment").scrollLeft = this.rollingValue;
      }
    },
    // 拖动结束
    endDrag() {
      this.dragging = false;
    },
    // 计算滚动条拖动值
    onRolling(maxRight, maxLeft, value) {

      // 计算比例关系
      const ratio = value / maxLeft;

      // 计算最终的值
      const finalValue = maxRight * ratio;

      // 返回最终值
      return finalValue;
    },
    // 拖动结束
    async onEnd(e) {
      // 同步滚动条位置
      let left = e.target.scrollLeft;
      const maxLeft = this.containerWidth - this.draggableWidth; // 去掉拖动元素宽度
      const maxRight = this.scrollWidth - this.containerWidth; // 去掉当前屏幕
      this.left = this.onRolling(maxLeft, maxRight, left); // 计算滚动条

      // 替换变化数据
      this.setImage_list(this.select_list);
    }
  }
}
</script>

CSS代码

.scroll_bar{
  width: 100%;
  overflow: auto;
  .slide{
    z-index: 1;
    height: 16px;
    bottom: -7px;
    opacity: 0.8;
    padding: 0 5px;
    position: absolute;
    border-radius: 5px;
    background: #fff;
    box-shadow: 0 0px 3px #999;
    .anticon{
      font-size: 12px;
    }
  }
}

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

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

相关文章

2024软件测试面试题汇总【备战金九银十】内容较长建议收藏

一、面试基础题 简述测试流程: 1、阅读相关技术文档&#xff08;如产品PRD、UI设计、产品流程图等&#xff09;。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例&#xff08;等价类划分法、边界值分析法等&#xff09;。 5、用例评审(…

鸿蒙语言基础类库:【@ohos.convertxml (xml转换JavaScript)】

xml转换JavaScript 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 …

【Python】日期和时间模块

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言时间元组datetime 模块datetime类获取当前日期和时间 timedelta类日期和时间运算 strftime()方法格式化时间日期格式化符号 strptime()方法 Time 模块Time 模块内置函数Time 模…

牛客小白月赛98 (个人题解)(待补完)

前言&#xff1a; 昨天晚上自己一个人打的小白月赛&#xff08;因为准备数学期末已经写烦了&#xff09;&#xff0c;题目难度感觉越来越简单了&#xff08;不在像以前一样根本写不了一点&#xff0c;现在看题解已经能看懂一点了&#xff09;&#xff0c;能感受到自己在不断进步…

LLM基础模型系列:Prompt-Tuning

------->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<------ 大型预训练语言模型的规模不断扩大&#xff0c;在许多自然语言处理 &#xff08;NLP&#xff09; 基准测试中取得了最先进的结果。自GPT和BERT开发以来&#xff0c;标准做法一直是在下游…

802.11ax RU - 传输的最小单元

子载波 无线信号是加载在某个固定频率上进行传输的&#xff0c;这个频率被称为载波。802.11标准中&#xff0c;对传输频率有更新的划分&#xff0c;而这些划分的频率被称为子载波。Wi-Fi 6中&#xff0c;以20Mhz信道为例&#xff0c;20Mhz信道被划分成256个子载波&#xff0c;…

Go-知识测试-子测试

Go-知识测试-子测试 1. 介绍2. 例子3. 子测试命名规则4. 选择性执行5. 子测试并发6. testing.T.Run7. testing.T.Parallel8. 子测试适用于单元测试9. 子测试适用于性能测试10. 总结10.1 启动子测试 Run10.2 启动并发测试 Parallel 建议先看&#xff1a;https://blog.csdn.net/a…

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud【翻译与解读】

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud 摘要 特征提取和匹配是许多机器人视觉任务的基本组成部分&#xff0c;如 2D 或 3D 目标检测、识别和配准。2D 特征提取和匹配已取得巨大成功。然而&#xff0c;在 3D 领域&#xff0c;当前方法由于描述性差…

手机大模型能否撑起“全村的希望”?

2023年&#xff0c;ChatGPT、SD的火爆带火了AI赛道。但现有的AI痛点则是&#xff1a;操作复杂&#xff0c;需要网络&#xff0c;大家对本地AI的呼声越来越高。也因此产生了AI PC和手机上装上大模型。手机上装大模型&#xff0c;确实会对现在低迷的手机市场带来一些影响&#xf…

链路追踪系列-02.演示zipkin

当本机启动docker es zipkinServer之后&#xff1a; 启动3个项目&#xff1a;先eureka-server&#xff0c;再 PaymentMain8001,… 浏览器打开&#xff1a;http://localhost:9001/consumer/payment/zipkin consumer代码 &#xff1a; provider: 此时查询es:

安全防御----防火墙综合实验2

安全防御----防火墙综合实验2 一、题目 二、实验要求&#xff1a; 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问. 2&#xff0c;生产区不允许访…

微积分-导数7(关联变化率)

例一 空气被充入一个球形气球中&#xff0c;使其体积以每秒100立方厘米的速度增加。当气球的直径为50厘米时&#xff0c;气球半径的增加速度是多少&#xff1f; 解答&#xff1a;球体的体积公式为 V 4 3 π r 3 V \frac{4}{3}\pi r^3 V34​πr3 为了使用给定的信息&#x…

Java中标识符和关键字

1.标识符 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }上述代码中在public class 后面的HelloWorld称为类名&#xff0c;main称为方法名&#xff0c;也可以将其称为标识符&#xff0c;即&#xff1a;在程…

数组和对象的解构

1.解构的理解 解构是ES6提供的一种新提取数据的模式&#xff0c;它允许我们从数组或对象中有针对性拿到想要的数据。这种方式让数据访问和赋值变得更加简洁和直观。 2.数组的解构 数组解构允许直接从数组中提取值&#xff0c;并将这些值赋给声明的变量。这避免了使用索引来访…

802.11be MRU - 多资源单元

Wi-Fi 6中引入了OFDMA技术&#xff0c;频率资源以RU(Resource Unit)为粒度进行分配&#xff0c;Wi-Fi 6中支持26/52/106/242/484/996/2x996 Tone共计7种RU。Wi-Fi 7由于引入了320MHz 信道&#xff0c;则会多一种RU类型。不同信道带宽下&#xff0c;不同类型RU的数量如下图所示。…

通用型I2C接口的应用之综合应用(N32G45XVL-STB)

通用型I2C接口的应用之综合应用&#xff08;N32G45XVL-STB&#xff09; 目录 概述 1 软硬件接口 1.1 硬件接口 1.2 开发软硬件信息 1.3 SHT-20模块电路 1.4 0.9寸OLED模块介绍 2 驱动接口实现 2.1 SHT20驱动接口 2.2 OLED驱动接口 3 应用接口实现 3.1 软件框架 3.…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

SSM整合及使用

SSM整合 介绍 SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、MyBatis两个开源框架整合而成&#xff08;SpringMVC是Spring中的部分内容&#xff09;&#xff0c;常作为数据源较简单的web项目的框架。 步骤 SSM整合主要是将各个框架的核心组件都交给sprin…

【机器学习】和【人工智能】在航空航天中的应用

作者主页: 知孤云出岫 目录 引言机器学习和人工智能在航空航天中的应用1. 预测性维护2. 飞行路径优化3. 自动驾驶飞行器 未来展望1. 增强人机协作2. 更智能的空中交通管理3. 高效的航空制造 结论参考文献 引言 随着科技的迅猛发展&#xff0c;机器学习和人工智能&#xff08;…

Goland 通道

channel通道 目录 channel通道 channel介绍 channel基本使用 有缓存通道和无缓存通道的区别 通道的初始化&#xff0c;写入数据到通道&#xff0c;从通道读取数据及基本的注意事项 channel的关闭和遍历 channel的关闭 为什么关闭 如何优雅地关闭通道 channel的遍历 chan…