uniapp结合movable-area与movable-view实现拖拽功能

uniapp 可拖拽进度条、滑动条、评分条、movable-area uniapp movable-area简单应用 sliderBar组件 <template> <view> <view class="slider-box"> <view class="flex"></view> <movable-area class="sliderBar" :style="{width: (100 - minScore)+'%'}"> <view class="gone" :styl 阅读详情

前言

因为公司业务开发需要拖拽功能。

ps:该功能只能针对高度一致的,如果高度不一致需要另外二开

演示

开始

<template>
  <view style="height: 100%;">
    <movable-area :style="{'width': '100%', 'height': allHeight + 'px'}">
      <movable-view
        v-for="(item, index) in list"
        :key="item.id"
        :x="0"
        :y="item.y"
		:style="{'height': itemHeight + 'px', 'width': '100%',}"
        direction="all"
        @touchstart="handleDragStart(index)"
	   @change="handleMoving(index, $event)"
	   @touchend="handleDragEnd"
        class="movable-view"
      >
        <!-- 这里可以放置步骤的详细内容 -->
        <view style="background-color: aqua; padding: 20rpx 0;">{{ item.desc }}</view>
      </movable-view>
    </movable-area>
  </view>
</template>

<script>
export default {
  data() {
    return {
		list: [],
		cloneList: [],
	  
		activeIndex: -1, // 选中
		oldIndex: -1,
	  
		moveToIndex: -1, // 移动
	  
		allHeight: 300,
	  
		itemHeight: 50
    };
  },
  
  created() {
		for(let i = 0; i < 12; i ++) {
			let info = {
				  id: i,
				  desc: '测试' + i
			}
			this.list.push(info)
		}
		this.allHeight = 12 * this.itemHeight
		this.initList(this.list)
  },
  
  methods: {
    deepCopy(source) {
    	return JSON.parse(JSON.stringify(source));
    },
	
	initList(list=[]){
        const newList = this.deepCopy(list);
        this.list = newList.map((item, index) => {
            return {
                ...item,
                y: index * this.itemHeight,
                key: Math.random() + index
            };
        });
        //拷贝一份初始list值
        this.cloneList = this.deepCopy(this.list);
    },
	
	// 拖拽开始
	handleDragStart(index) {
		this.activeIndex = index;
		this.oldIndex = index;
	},
	handleMoving(index, e){
		if (e.detail.source !== 'touch') return;
		const { x, y } = e.detail;
		const currentY = Math.floor((y + this.itemHeight / 2) / this.itemHeight);

	  
		this.moveToIndex = Math.min(currentY, this.list.length - 1);
	
	  //更新移动后的位置
	  if (this.oldIndex !== this.moveToIndex && this.oldIndex !== -1 && this.moveToIndex !== -1) {
	    const newList = this.deepCopy(this.cloneList);
	    //交换位置
	    newList.splice(this.moveToIndex, 0, ...newList.splice(this.activeIndex, 1));
	
	    this.list.forEach((item, index) => {
	       if (index !== this.activeIndex) {
	         const itemIndex = newList.findIndex(val => val.id === item.id);
	         item.y = itemIndex*this.itemHeight
	       }
	    });
	    this.oldIndex = this.moveToIndex;
	  }
	},
	handleDragEnd(e) {
		if (this.moveToIndex !== -1 && this.activeIndex !== -1 && this.moveToIndex !== this.activeIndex) {
			  this.cloneList.splice(this.moveToIndex, 0, ...this.cloneList.splice(this.activeIndex, 1));
		}
	
		// 重新排序下更新后的位置。
		this.initList(this.cloneList);
		
		this.activeIndex = -1;
		this.oldIndex = -1;
		this.moveToIndex = -1;
	},
  },
};
</script>

<style>
.movable-area {

}

.movable-view {

}
</style>

uniapp中movable-view与movable-area实现图片自由缩放与边界控制 本文详细介绍了在uniapp中使用movable-view与movable-area组件实现图片自由缩放与边界控制的方法。通过基础实现、边界控制、性能优化及高级技巧的讲解,帮助开发者快速掌握这一功能,提升用户体验。特别适合需要实现图片拖拽和缩放功能的uniapp开发者参考。 阅读详情

相关推荐

uniapp自定义按钮/文字页面任意位置拖动(movable-area)

movable-area自定义页面位置拖拽

高桥留de博客 731

小程序开发之组件movable-view(移动的视图容器)

movable-view 可移动的视图容器,在页面中可以拖拽滑动 movable-view属性 注意:movable-view必须在组件中,并且必须是直接子节点,否则不能移动。 movable-area movable-view 的可移动区域 注意:movable-area 必须设置width和height属性,不设置默认为10px 当movable-view小于movable-area时,m...

M.Siebel 4760

Uniapp 视图容器 随机拖拽滑动 放大缩小 movable-view movable-area

可移动的视图容器,在页面中可以拖拽滑动或双指缩放。 movable-view必须在movable-area组件中,并且必须是直接子节点,否则不能移动。

特创数字 940

uni-app移动端图片预览组件 movable-area 、movable-view (支持缩放,拖动效果、替换部分代码图片可直接使用)

uni-app移动端图片预览组件 movable-area 、movable-view (支持缩放,拖动效果、替换部分代码图片可直接使用)

qq_44776454的博客 3268

Windows防火墙服务异常修复指南:0x80070422与0x6D9报错实战处理

本文针对Windows防火墙服务异常导致的0x80070422与0x6D9报错,提供了从基础到进阶的实战修复指南。核心是通过services.msc服务管理器检查并修复Windows Firewall服务,包括设置启动类型、检查依赖服务等关键步骤。同时介绍了当基础方法失效时,如何使用命令行工具、系统文件检查器(SFC/DISM)以及排查组策略与第三方软件冲突等深度解决方案,帮助用户彻底解决防火墙服务无法启动或访问的问题。

m9n0o的博客 542

基于PCA的故障诊断方法(matlab)

1. PCA原理分析 PCA的原理主要是将原始数据进行降维。其具体工作原理参照:CodingLabs - PCA的数学原理 2. 数据预处理 训练数据集(只有正样本)为维数据,即有n个采样值,每个采样值有m个特征。 2.1 数据归一化 将数据X针对每个特征归一化为均值为0,均方根为1的数据。 其中: 3. PCA降维 3.1 首先求取协方差矩阵 协方差矩阵的公式为: 计算出来的协方差矩阵为特征m*m维矩阵。 3.2 求取特征值和特征向量 求取协方差矩阵R的特征值.

tangxianyu的博客 1万+

uniapp组件学习

https://uniapp.dcloud.io/component/ 视图容器 <view> 基本属性——主要用于指示按钮效果,经常用到的有hover-class="自定义css样式",点击之后则可将view渲染为自定义样式放开之后再自动复原。 属性名 类型 默认值 说明 hover-class String none 指定按下去的样式类。当 hover-class="none" 时,没有点击态效果 hover-stop-propag

qq_43391694的博客 1373

从C-EPS到DP-EPS:手把手图解不同EPS类型怎么选,对你的车操控感影响有多大?

方向盘转动时那股细腻的阻尼感,高速过弯时令人安心的沉稳,或是狭窄车位里一根手指就能拨动的轻盈——这些看似微妙的差异,其实都源自转向系统电机那几厘米的安装位置变化。当我们谈论驾驶乐趣时,发动机参数和悬架调校总是占据C位,但真正连接驾驶者与车辆的神经末梢,恰恰是那套默默工作的电动助力转向系统(EPS)。不同EPS类型带来的操控特性差异,可能比马力数字更能定义一辆车的性格。

weixin_30920513的博客 531

uniapp movable-area组件使用

uniapp movable-area组件使用

m0_61672533的博客 582

【正点原子STM32连载】第六十章 串口IAP实战:从Bootloader到APP的无缝升级

本文以正点原子STM32F103开发板为例,详细讲解了串口IAP(在应用编程)技术的实现原理与实战步骤。内容涵盖Bootloader与APP的分工、FLASH空间规划、核心代码解析以及Ymodem协议的应用,旨在帮助开发者掌握通过串口为嵌入式设备实现远程固件升级的关键技术,提升产品维护与迭代效率。

weixin_29161719的博客 445

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用!Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。Gemini Pro的表现超越了其他同类模型,当前版本配备了 32K 文本上下文窗口,可免费使用,且其定价将十分有竞争力。Gemini Pro具备丰富的功能:函数调用、数据嵌入、语义检索、自定义知识嵌入以及聊天功能。

HJ_blog 1246

uniapp结合movable-area与movable-view实现拖拽功能2

上篇我们写了,固定高度的拖拽,这篇我们将进行不固定高度的拖拽模块编写完成。

echo_Ae的博客 889

激光雷达点云配准:ICP与NDT算法详解

激光雷达点云配准:ICP与NDT算法详解​ ,人工智能,计算机视觉,大模型,AI,本文深入解析激光雷达点云配准的ICP与NDT算法。阐述了点云配准基础概念与评价指标,详解ICP算法原理、流程、最优变换矩阵计算、优缺点及改进版,给出Python代码示例;同样解析NDT算法的原理、流程、模型构建、优缺点、参数选择与代码示例。还对比两者在精度、效率、鲁棒性和适用场景的差异,提供算法选择建议,介绍实际应用案例、常见问题及解决方法,探讨算法发展趋势。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

uni-app + vue3 + ts + unocss 使用movable-area和movable-view实现菜单拖拽功能

本文介绍了在uni-app中使用Vue3、TypeScript和UnoCSS实现拖拽菜单功能的方法。核心实现基于微信小程序的movable-area和movable-view组件,详细展示了组件结构、数据类型定义、样式配置和边界限制等关键技术点。文章还提供了高级功能实现方案,包括吸附边缘效果和性能优化技巧,并给出了完整代码示例和注意事项。该方案适用于需要实现可拖拽菜单的微信小程序开发场景。

u010675796的博客 368

Modbus RTU 详解 + FreeMODBUS移植(附项目源码)

本文全面解析Modbus RTU通信协议,详细介绍其报文格式、功能码定义及典型应用场景,并手把手指导如何将FreeMODBUS协议栈移植到嵌入式平台。内容涵盖从底层硬件驱动配置、协议栈移植到主机/从机通信测试的全流程,重点讲解移植过程中的常见问题及解决方案。文章最后提供经过实测的完整项目源码,帮助开发者快速实现稳定的Modbus RTU通信功能。

Bit_Dong的博客 2926

uni-app 图片裁剪上传 vue3 vue2 均兼容 钉钉 微信

uni-app 兼容 vue2 vue3 钉钉 微信 的图片裁剪

weixin_49230250的博客 2010

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

uniapp使用 movable-area movable-view 实现图片双指缩放、鼠标单击缩小双击放大、图片及标记点功能

movable-view movable-area movable-view 主要是可以实现缩放及拖拽功能,不过只能限制在movable-area 范围内的拖拽超出范围会回弹。 为了增大一点它的回弹范围 可以设置 movable-view的宽高为0; 然后子元素决定定位居中。微信小程序没有双击事件 通过setTimeout 拦截并判断是单击还是双击。 实现代码(部分无用组件自行删除) getDomInfo partDetail.js 组件代码

HHH917的博客 9134

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

uniapp的movable-view、movable-area

uniapp的movable-view、movable-area

qq_27161847的博客 1197

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

uniapp之实现拖拽排序

最近做uniapp项目的时候需要实现拖拽排序功能,本来准备直接用touchstarttouchmovetouchend三剑客去实现的,但无意中发现uniapp内置了和组件,可快速实现该功能,索性就直接使用该组件,后续对拖拽排序做了一些扩展,希望对你有帮助。拖拽组件源代码放在uniapp插件社区了,有兴趣可以下载下来看看,希望能对你有帮助,如果对该组件有问题,可以评论区留言。

每天都要努力学习哦~~ 1391

uniapp实现图片的放大缩小可拖拽

官网地址:https://uniapp.dcloud.io/component/movable-view?id=movable-view 实现放大缩小主要依赖 - movable-view

哆来A梦没有口袋的博客 1万+

小程序封装拖拽菜单组件(uniapp拖拽排序,自定义菜单)

movable-area 是 uniapp 的可移动区域组件。它用于定义可移动视图容器,在其内部可拖拽移动子视图。

2303_76218115的博客 4328

uniapp进阶:movable-view实现多列网格拖拽排序实战

本文详细介绍了在uniapp中使用movable-view实现多列网格拖拽排序的实战技巧。通过解析movable-area和movable-view的核心原理,提供单列和多列布局的代码实现,并分享性能优化、动态列数适配及常见问题排查等进阶方案,帮助开发者高效完成电商类目排序、仪表盘调整等复杂交互场景。

weixin_29001423的博客 458

movable-area组件常踩的坑

作为容器,必须设置固定宽高;配合实现拖动 / 缩放,通过direction控制移动方向;动态绑定xy实现精准定位,通过scale实现缩放;避坑重点:统一单位(px)、限制移动范围、开启缩放需设置。该组件是小程序实现自定义拖拽 / 滑动交互的核心,适合替代原生滑块、实现个性化的移动交互场景。

qq_185893367的博客 832

uniapp 实现拖拽功能

客户要求;微信客服功能悬浮,并且可以在页面进行,拖拽移动

m0_48557659的博客 5603

uni-app视图容器之movable-view

一.简介 movable-view:可移动的视图容器,在页面中可以拖拽滑动。 movable-area:movable-view 的可移动区域,movable-view 的父级,必须设置width和height属性,不设置默认为10px。 二.属性说明 1.movable-area属性说明: 2.movable-view属性说明: 除了基本事件外,movable-view提供了两个特殊事件: htouchmove:初次手指触摸后移动为横向的移动,如果catch此事件,则意味着touchmove事件也被

踏雪无痕 8017
上一篇: uniapp0基础编写安卓原生插件和调用第三方jar包(Ch34的jar包)和如何解决android 如何Application初始化
下一篇: canvas+fabric实现时间刻度尺(一)
An_s
博客等级 码龄10年 665粉丝 363原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

An_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值