128 自定义滑块

1.自定义滑块

做法: 1.先定义好动画,暂停 2.使用动画的delay时间,来确定各个时间点位置 3.通过input:range来改变delay的css变量值,使用dom.style.setProperty('--delayTime',25s)来设置
<template> <!--智能环绕参数面板--> <pop-dialog width="368px" left="50%" top="35%" title="智能环绕设置" @close="onClose" > <div class="content"> <div class="explanation-box"> 说明:可通过键盘微调飞行位置,调整环绕高度或半径,请检查周边环境后再执行环绕操作。 </div> <div class="params-box"> <div class="params-box-item"> <div class="params-box-item-title">环绕高度</div> <div class="params-box-item-content"> <div class="params-btn" @click="handleSurround(-100)">-100</div> <div class="params-btn" @click="handleSurround(-10)">-10</div> <div class="params-btn" @click="handleSurround(-1)">-1</div> <a-input placeholder="请输入" addon-after="m" v-model:value="formData.surroundHeight" /> <div class="params-btn add" @click="handleSurround(1)">1</div> <div class="params-btn add" @click="handleSurround(10)">10</div> <div class="params-btn add" @click="handleSurround(100)">100</div> </div> </div> <div class="params-box-item"> <div class="params-box-item-title">环绕距离</div> <div class="params-box-item-content"> <div class="params-btn" @click="handleSurRadius(-100)">-100</div> <div class="params-btn" @click="handleSurRadius(-10)">-10</div> <div class="params-btn" @click="handleSurRadius(-1)">-1</div> <a-input placeholder="请输入" addon-after="m" v-model:value="formData.surroundRadius" /> <div class="params-btn add" @click="handleSurRadius(1)">1</div> <div class="params-btn add" @click="handleSurRadius(10)">10</div> <div class="params-btn add" @click="handleSurRadius(100)">100</div> </div> </div> <div class="params-box-item"> <div class="params-box-item-title">环绕速度</div> <div class="params-box-item-content column"> <div class="slider-box" ref="sliderBoxRef"> <input type="range" name="" id="" class="slider-input" :min="0" :max="50" ref="sliderInputRef" v-model="sliderValue" > <div class="slider-inner"> <img ref="sliderArrowRef" class="slider-arrow" :src="sliderArrow" alt="" /> </div> </div> <div class="slider-display"> <div class="slider-display-name"> {{ isClockwise ? '顺时钟' : '逆时针' }} </div> <div class="slider-display-name"> <span class="blue">{{ formData.surroundSpeed }}</span >m/s </div> <div class="slider-display-name">25m/s</div> </div> </div> </div> </div> </div> <template #footer> <a-button class="border-radius4" @click="onCancel">取消</a-button> <a-button class="border-radius4" type="primary" @click="onConfirm" >确定</a-button > </template> </pop-dialog> </template> <script setup lang="ts"> import { computed, onMounted, reactive, ref, nextTick } from 'vue' import popDialog from '@/components/pop-dialog.vue' import { message } from 'ant-design-vue' import sliderArrow from '@/components/cockpit/img/slider-arrow.png' const $emit = defineEmits(['close', 'confirm']) //顺时针 const isClockwise = ref(true) const formData = ref({ surroundHeight: 3, surroundRadius: 3, surroundSpeed: 3, }) //输入框速度 const sliderValue = ref(25) const handleSurround = (value: any) => { formData.value.surroundHeight = Number(formData.value.surroundHeight) + value } const handleSurRadius = (value: any) => { formData.value.surroundRadius = Number(formData.value.surroundRadius) + value } const sliderInputRef = ref() const sliderBoxRef = ref() onMounted(() => { if (isClockwise.value) {//顺时针 sliderValue.value = 25 - formData.value.surroundSpeed } else { sliderValue.value = formData.value.surroundSpeed + 25 } sliderInputRef.value.addEventListener('input', (e: any) => { if (e.target.value >= 25) { isClockwise.value = false formData.value.surroundSpeed= e.target.value - 25 } else { isClockwise.value = true formData.value.surroundSpeed=25 - e.target.value } const time = -50 + e.target.value; console.log(`${time}s` ); sliderBoxRef.value.style.setProperty('--delayTime',`${time}s` ) }) }) const onCancel = () => { $emit('close') } const onConfirm = () => { $emit('confirm') } //指点模式选择 const handleModelClick = (item: any) => {} const onClose = () => { $emit('close') } </script> <style lang="scss" scoped> @keyframes sliderInner { 0% { width: 45%; right: 50%; left: auto; //靠右居中 transform: translate(0%, -50%); } 50% { width: 0%; right: 50%; left: auto; transform: translate(0%, -50%); } 50.01% { width: 0%; right: auto; left: 50%; transform: translate(0%, -50%); } 100% { width: 45%; right: auto; left: 50%; transform: translate(0%, -50%); } } @keyframes sliderArrow { 0% { right: auto; left: 0; transform: translate(-50%, -50%); } 50% { right: auto; left: 0; transform: translate(-50%, -50%); } 50.01% { right: 0; left: auto; transform: translate(50%, -50%); } 100% { right: 0; left: auto; transform: translate(50%, -50%); } } $totalTime:50s; .popup { .popup-content { padding: 12px; } } .content { width: 100%; display: flex; flex-direction: column; gap: 8px; .explanation-box { width: 100%; /* 自动布局 */ display: flex; flex-direction: row; justify-content: center; align-items: center; padding: 8px; gap: 16px; background: rgba(255, 170, 0, 0.2); color: #ffaa00; } .params-box { display: flex; flex-direction: column; gap: 8px; .params-box-item { height: 90px; padding: 0px 12px; background: rgba(13, 21, 29, 0.6); display: flex; flex-direction: column; justify-content: center; gap: 8px; .params-box-item-title { } .params-box-item-content { display: flex; gap: 4px; .params-btn { cursor: pointer; user-select: none; width: auto; min-width: 30px; height: 30px; padding: 4px; border-radius: 4px; background: rgba(255, 255, 255, 0.16); // 添加以下属性确保flex行为正确 flex: 0 0 auto; // 不伸缩,根据内容自适应 box-sizing: border-box; // 确保padding不影响实际宽度计算 color: #a2a7b4; &.add { color: #fff; } &:hover { background: rgba(255, 255, 255, 0.24); } } &.column { flex-direction: column; } .slider-box { --delayTime: -50s; position: relative; width: 324px; height: 24px; background: url('@/components/cockpit/img/slider-bar.png') no-repeat center; background-size: 100% 100%; &::after { content: ''; z-index: 2; display: block; width: 10px; height: 20px; border-radius: 2px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #fff; } .slider-input{ opacity: 0; width: 90%; position: absolute; top: 50%; transform: translate(5%,-50%); z-index: 9; } .slider-inner { z-index: 1; position: absolute; width: 0%; height: 12px; top: 50%; left: 50%; // transform: translate(-100%, -50%); background-color: #1a71ff; animation: sliderInner $totalTime linear var(--delayTime,-25s) infinite; animation-play-state: paused; .slider-arrow { z-index: 9; // cursor: pointer; // pointer-events: all; position: absolute; top: 50%; left: 0; transform: translate(-50%, -50%); animation: sliderArrow $totalTime linear var(--delayTime,-25s) infinite; animation-play-state: paused; } } } .slider-display { display: flex; justify-content: space-between; font-size: 14px; color: #fff; .slider-display-name { .blue { color: #1a71ff; font-size: 14px; font-weight: 600; } } } } } } } </style>

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

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

相关文章

[特殊字符]️_开发效率与运行性能的平衡艺术[20260107170447]

作为一名经历过无数项目开发的工程师&#xff0c;我深知开发效率与运行性能之间的平衡是多么重要。在快节奏的互联网行业&#xff0c;我们既需要快速交付功能&#xff0c;又需要保证系统性能。今天我要分享的是如何在开发效率和运行性能之间找到最佳平衡点的实战经验。 &#…

Agentic AI提示优化案例:提示工程架构师如何用“目标细化”让agents更聚焦?

Agentic AI提示优化实战&#xff1a;用“目标细化”让AI Agents从“摸鱼”到“专注”的秘密 关键词 Agentic AI、提示工程、目标细化、任务分解、LLM Agents、Prompt Optimization、聚焦性 摘要 你有没有遇到过这样的AI Agent&#xff1f;让它“写一篇技术博客”&#xff0…

[特殊字符]️_开发效率与运行性能的平衡艺术[20260107171443]

作为一名经历过无数项目开发的工程师&#xff0c;我深知开发效率与运行性能之间的平衡是多么重要。在快节奏的互联网行业&#xff0c;我们既需要快速交付功能&#xff0c;又需要保证系统性能。今天我要分享的是如何在开发效率和运行性能之间找到最佳平衡点的实战经验。 &#…

3.6-Web后端基础(java操作数据库)

目录 前言 JDBC 介绍 查询数据 需求 准备工作 代码实现 代码剖析 ResultSet 预编译SQL SQL注入 SQL注入解决 性能更高 增删改数据 需求 代码实现 Mybatis 介绍 快速入门 辅助配置 配置SQL提示 配置Mybatis日志输出 JDBC VS Mybatis 数据库连接池 介绍…

[特殊字符]_内存管理深度解析:如何避免GC导致的性能陷阱[20260107172234]

作为一名经历过无数性能调优案例的工程师&#xff0c;我深知内存管理对Web应用性能的影响有多大。在最近的一个项目中&#xff0c;我们遇到了一个棘手的性能问题&#xff1a;系统在高并发下会出现周期性的延迟飙升&#xff0c;经过深入分析&#xff0c;发现问题根源竟然是垃圾回…

我为什么狠狠爱上这些“新 CSS 函数”:它终于开始像个聪明人了

我有一支技术全面、经验丰富的小型团队&#xff0c;专注高效交付中等规模外包项目&#xff0c;有需要外包项目的可以联系我这些年&#xff0c;我眼看着 CSS 一点点变。 有的变化小到像“换了个标点”&#xff0c;你用不用都无所谓&#xff1b;也有的变化大到能改写你整套写法。…

告别 Discuz!:我用这个 14.9k Star 的开源项目,3分钟搭了个“小红书”风格的论坛

想为自己的产品或者兴趣小组建一个交流社区&#xff0c;但一看现在主流的论坛软件&#xff0c;要么像 Discuz! 那样界面老旧&#xff0c;要么像 WordPress 插件那样臃肿笨重。我真的只是想要一个简洁、现代、专注于讨论的论坛而已。直到我发现了 Flarum&#xff0c;一个在 Git…

iOS 26.3 公测版来了:苹果的“假期惊喜”更新,表面小,暗地里很狠

我有一支技术全面、经验丰富的小型团队&#xff0c;专注高效交付中等规模外包项目&#xff0c;有需要外包项目的可以联系我时间来到 12 月中旬。大多数人不是在盘算假期购物&#xff0c;就是终于准备从工作里喘口气。按惯例&#xff0c;苹果这个时候通常很安静——然而最近&…

c++ 17的std::variant对标c#的哪个类型

C# 的 System.Object、dynamic 和 C# 7.0 引入的 System.ValueTuple 以及 System.OneOf 等都可以实现类似功能&#xff0c;但最接近 C std::variant 语义的是&#xff1a;1. 官方方案&#xff1a;System.Object 和模式匹配&#xff08;最接近&#xff09;基础用法csharp// 类似…

国抽对接规则

1、国抽可以同步下来 待填报之前的样品信息&#xff08;包括正在接样状态&#xff09;。 2、国抽可以同步下来 待填报且已维护基础表的项目信息&#xff08;基础表维护按照报送分类B及细类维护&#xff0c;或特殊样品的项目维护&#xff09;。

神经网络架构搜索在模型优化中的应用

神经网络架构搜索在模型优化中的应用 关键词:神经网络架构搜索、模型优化、自动化机器学习、深度学习、搜索算法、架构表示 摘要:本文深入探讨了神经网络架构搜索(NAS)在模型优化中的应用。首先介绍了NAS的背景,包括其目的、预期读者和文档结构等。接着阐述了NAS的核心概念…

优雅的汉堡菜单动画实现

在前端开发中,如何创建一个既美观又实用的汉堡菜单是很多设计师和开发者常常面对的问题。今天我们将探讨如何实现一个既简单又优雅的汉堡菜单动画,确保动画过程中菜单的三条线条能准确地形成“X”形。 问题背景 通常,当我们点击汉堡菜单按钮时,希望上、中、下三条线条能够…

Matlab CEEMDAN-CPO-VMD-Transformer多变量时序预测

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 [独家首发原创](双分解)CEEMDAN-CPO-VMD-Transformer多变量时序预测 (多输入单输出) Matlab代码 CEEMDAN分解&#xff0c;计算样本熵&#xff0c;根据样本熵进行kmeans聚类&#xff0c;调用CPO-VMD对高频分…

狂揽23.5k Star!我用这个开源神器,拖拉拽3分钟就撸好一个AI Agent

AI 时代&#xff0c;谁都想构建一个自己的 AI 应用&#xff0c;比如一个能读取 PDF 内容并回答问题的机器人&#xff0c;或者一个自动生成营销文案的工具。但一想到要跟 LangChain、API 接口和复杂的 Python 代码打交道&#xff0c;我就头皮发麻。难道不懂代码&#xff0c;就注…

再见 Typeform!我用这个开源平替,3分钟搞定无限问卷和数据私有化

无论是做用户满意度调研&#xff0c;还是收集活动报名信息&#xff0c;我都离不开在线问卷。Typeform、问卷星这类工具虽然好用&#xff0c;但它们的商业版价格不菲&#xff0c;而且免费版总是在“回复数量”或“问题数量”上处处受限。更重要的是&#xff0c;所有宝贵的用户数…

基于IWOA-CNN-BiLSTM-Attention多变量时序预测 Matlab代码

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 [独家原创]基于IWOA-CNN-BiLSTM-Attention多变量时序预测 Matlab代码 改进点&#xff1a;三个(附赠参考文献)--------【如需优化算法(IWOA)测试函数&#xff0c;额外加20】 1、准反向学习---来初始化种群 …

【毕业设计】SpringBoot+Vue+MySQL 企业客户管理系统平台源码+数据库+论文+部署文档

摘要 随着信息技术的快速发展&#xff0c;企业客户管理系统的需求日益增长。传统的手工记录和纸质化管理方式效率低下&#xff0c;难以满足现代企业对客户信息的高效管理和数据分析需求。企业客户管理系统通过信息化手段整合客户数据&#xff0c;优化业务流程&#xff0c;提升客…

基于贝叶斯算法优化BP神经网络(BO-BP/Bayes-BP)的数据单变量时序预测 Matlab

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 基于贝叶斯算法优化BP神经网络(BO-BP/Bayes-BP)的数据单变量时序预测 Matlab代码 程序已经调试好&#xff0c;无需更改代码替换数据集即可运行&#xff01;&#xff01;&#xff01;数据为电力数据&#xf…

狂揽77k Star!我用3分钟,给本地服务安上了公网域名

我经常需要在外面访问家里的 NAS&#xff0c;或者给客户演示我电脑上一个还没上线的项目。每次都被内网穿透搞得头疼不已&#xff0c;不是要研究复杂的路由器设置&#xff0c;就是要忍受那些又慢又不稳定的免费服务。传统内网穿透&#xff0c;太折腾了想靠自己搞定内网穿透&…

RESTful API 设计的最佳实践

在设计RESTful API时,我们经常会遇到如何优化数据获取的问题,特别是在处理相关实体数据时。让我们通过一个实际的例子来探讨如何实现RESTful API的最佳实践。 背景 假设我们有一个博客系统,API的基本结构如下: GET /api/v1/posts/1/ {"id": 1,"title&quo…