PointerEvent实现拖动滑块效果(支持左右吸附)

效果展示:

在这里插入图片描述

参数说明:

adsorbLen :为0则不吸附,不为0则为左右吸附的距离。也可以自己修改左右的吸附长度。

代码:

<template><div class="slider-box" ref="sliderBoxRef"><div ref="sliderRef" id="slider" @pointerdown="pointerdown" @pointerup="pointerup">滑块</div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'const sliderRef = ref()
const sliderBoxRef = ref()
const adsorbLen = 0 // 吸附效果,吸附长度,为0不吸附const pointerdown = (e: PointerEvent) => {document.addEventListener('pointermove', sliderMove)sliderRef.value.setPointerCapture(e.pointerId) // 用于将特定元素指定为未来指针事件的捕获目标。
}
const pointerup = (e: PointerEvent) => {document.removeEventListener('pointermove', sliderMove)sliderRef.value.releasePointerCapture(e.pointerId) // 用来将鼠标指针从先前通过 setPointerCapture() 绑定的元素身上释放出来,还给鼠标指针自由。
}
const sliderMove = (e: PointerEvent) => {const { right: boxRight } = sliderBoxRef.value.getBoundingClientRect()// 滑块距起点位置const startX = e.clientX - 290 // 220(220是容器距离左边视口区的位置)+70(元素宽度的一半,让鼠标处于中心)// 滑块终点const endX = boxRight - 360 // 220+140(140是滑块的宽度)// 滑块移动距离const transformX = startX < adsorbLen ? 0 : (endX - startX < adsorbLen ? endX : startX)if (transformX >= 0) {sliderRef.value.style.transform = `translate(${transformX}px)`}
}</script><style lang="scss" scoped>
.slider-box {background-color: skyblue;border-radius: 10px;
}#slider {width: 140px;height: 50px;display: flex;align-items: center;justify-content: center;background-color: palevioletred;cursor: move;user-select: none;border-radius: 10px;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷100题DAY8

36.P1416 攻击火星 此题找出规律即可 #include<bits/stdc.h> using namespace std; int n; int main() {cin >> n;cout << max(0, n - 2);return 0; } 37.P1551 亲戚 并查集模板题目 两个人如果使亲戚就合并建立联系&#xff0c;最后进行查找即可 #incl…

【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库&#xff1a;decimal类型与decimal长度用法详解&#xff0c;主要是个人学习期间遇到的mysql中关于decimal字段的详解&#xff0c;最近在群里遇到一个小伙伴提出的问题&#xff0c;也有部分涉及&#xff0c;今天就再大致总结一下Java和MySQL数据库…

一个00后女生在csdn创作1095的创作纪念日

大家好&#xff0c;我是你们熟悉的微枫奶糖 肥晨&#xff0c;今天收到私信&#xff0c;突然发现&#xff0c;我来到CSDN已经1095天了。让我来分享一下吧~ 机缘 不知不觉来csdn已经1095天了&#xff0c;祝贺我在CSDN的创作纪念日&#xff01; 这是一个非常值得纪念的日子&…

PlantUML语法(全)及使用教程-类图

目录 1. 类图1.1、什么是类图1.2、元素声明1.3、类之间的关系1.4、关系上的标签1.5、在元素名称和关系标签中使用非字母1.6、添加方法 1. 类图 类图的设计语法与编程语言的传统语法相似。这种相似性为开发人员提供了一个熟悉的环境&#xff0c;从而使创建图表的过程更简单、更直…

编程实现bf算法

BF算法&#xff08;Brute Force算法&#xff09;是一种朴素的字符串匹配算法&#xff0c;其基本思想是在文本串中不断地比较模式串和文本串中的子串&#xff0c;直到找到匹配的位置或者搜索完整个文本串。 下面是用Python实现BF算法的代码&#xff1a; def bf_search(text, p…

【Openstack Train安装】十、Neutron安装

Neutron&#xff0c;是Openstack中的一大核心组件&#xff0c;设计目标是实现“网络即服务&#xff08;Networking as a Service&#xff09;”。为了达到这一目标&#xff0c;在设计上遵循了基于 SDN 实现网络虚拟化的原则&#xff0c;在实现上充分利用了 Linux 系统上的各种网…

【LeetCode】每日一题 2023_11_29 无限集中的最小数字(哈希/堆)

文章目录 刷题前唠嗑题目&#xff1a;无限集中的最小数字题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 今天的题目也比较的简单&#xff0c;因为数据量不大&#xff0c;所以什么做法都能过的去 题目&a…

Django快速搭建静态网页

Django的快速搭建 这个是例子 这个是一个目录 项目名称&#xff1a;项目似乎被命名为DJ0928&#xff0c;这是Django项目的根目录。 文件都是Django项目的核心配置文件。 settings.py 包含了项目的配置设置。urls.py 定义了项目的URL路由。wsgi.py 和 asgi.py 分别用于Web服务器…

Java实现通过经纬度求两个任意地点在球面上的距离

我们在实际开发中会获取对应的经纬度&#xff0c;可以使用ES大数据搜索引擎进行计算对应区域的数据&#xff0c;那我们在如何根据两个经纬度获取对应的球面距离&#xff0c;就是在地球上从一个地点到另一个地点的直线距离 工具类如下: public class GeoUtils {// 地球半径&am…

AI视频智能分析识别技术的发展与EasyCVR智慧安防视频监控方案

随着科技的不断进步&#xff0c;基于AI神经网络的视频智能分析技术已经成为了当今社会的一个重要组成部分。这项技术通过利用计算机视觉和深度学习等技术&#xff0c;实现对视频数据的智能分析和处理&#xff0c;从而为各个领域提供了广泛的应用。今天我们就来介绍下视频智能分…

利用kibana 快照备份es数据库

环境 主机名ip地址组件ambari-hadoop1192.168.10.101ambari-hadoop2192.168.10.102kibanaambari-hadoop3192.168.10.103es 这里我们利用共享文件系统&#xff0c;存储快照&#xff0c;所以需要利用到nfs&#xff08;NFS&#xff08;Network File System&#xff09;是一种分布…

自动化测试工具——Monkey

前言&#xff1a; 最近开始研究Android自动化测试方法&#xff0c;整理了一些工具、方法和框架&#xff0c;其中包括android测试框架&#xff0c;CTS、Monkey、Monkeyrunner、benchmark&#xff0c;以及其它test tool等等。 一、 什么是Monkey Monkey是Android中的一个命令…