基于uniapp vue3 的滑动抢单组件实例代码

 更新时间:2025年02月11日 09:35:30   作者:printf_824  
文章介绍了如何在Vue组件的`onMounted`生命周期钩子中获取`movable-area`和`movable-view`组件的实例,从而计算出可滑动的距离,示例代码展示了这一过程,感兴趣的朋友跟随小编一起看看吧

通过在onMounted获取movable-area与movable-view实例,计算出可滑动的距离

效果图:

代码:

<template>
  <view class="slider-container">
    <movable-area class="movable-area" id="movableArea">
      <movable-view 
        class="slider-button"
        direction="horizontal"
        :x="sliderX"
        @change="onSliderChange"
        @touchend="onSliderEnd"
        id="movableView"
      >
        <text class="arrow-icon">»</text>
        <text>Slide to grab order</text>
      </movable-view>
    </movable-area>
  </view>
</template>
<script setup>
import { ref, onMounted } from "vue";
const sliderX = ref(0); // 滑块 X 轴位置
const maxX = ref(0);    // 最大可滑动距离
onMounted(() => {
  getMaxX(); // 组件加载后计算最大可滑动距离
});
const getMaxX = () => {
  uni.createSelectorQuery()
    .select("#movableArea")
    .boundingClientRect(areaRect => {
      uni.createSelectorQuery()
        .select("#movableView")
        .boundingClientRect(viewRect => {
          if (areaRect && viewRect) {
            maxX.value = areaRect.width - viewRect.width;
            console.log("动态计算 maxX:", maxX.value);
          }
        })
        .exec();
    })
    .exec();
};
const onSliderChange = (event) => {
  const x = event.detail.x;
  console.log("当前滑动位置:", x);
  if (x >= maxX.value) {
    console.log("滑到了最右边");
    onSliderEnd();
  }
};
const onSliderEnd = () => {
  console.log("滑动结束,执行逻辑...");
  sliderX.value = 0; // 可选择让滑块复位
};
</script>
<style>
.slider-container {
			position: relative;
			width: 100%;
			height: 88rpx;
			margin-top: 30rpx;
			background-color: #F0F0F0;
			border-radius: 8rpx;
			overflow: hidden;
			movable-area {
				width: 100%;
				height: 100%;
				background: linear-gradient(90deg, #4080FF 0%, #4080FF 100%);
			}
			.slider-button {
				width: 300rpx;
				height: 88rpx;
				background-color: #4080FF;
				border-radius: 8rpx;
				display: flex;
				align-items: center;
				justify-content: center;
				color: #ffffff;
				font-size: 28rpx;
				z-index: 1;
				.arrow-icon {
					margin-right: 10rpx;
					font-size: 32rpx;
				}
			}
		}
</style>

到此这篇关于基于uniapp vue3 的滑动抢单组件的文章就介绍到这了,更多相关uniapp vue3滑动抢单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue绑定用户接口实现代码示例

    Vue绑定用户接口实现代码示例

    这篇文章主要介绍了Vue绑定用户接口代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • vue使用better-scroll实现横向滚动的方法实例

    vue使用better-scroll实现横向滚动的方法实例

    这几天研究项目时,看到了 better-scroll 插件,看着感觉功能挺强,这篇文章主要给大家介绍了关于vue使用better-scroll实现横向滚动的相关资料,需要的朋友可以参考下
    2021-06-06
  • 初识简单却不失优雅的Vue.js

    初识简单却不失优雅的Vue.js

    这篇文章主要为大家介绍了简单却不失优雅、小巧而不乏大匠的Vue.js,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Vue 引入AMap高德地图的实现代码

    Vue 引入AMap高德地图的实现代码

    这篇文章主要介绍了Vue 引入AMap高德地图的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue 表单输入格式化中文输入法异常问题

    vue 表单输入格式化中文输入法异常问题

    v-model 是 vue.js 提供的语法糖,根据不同的表单控件监听不同的事件,实现对表单控件的数据双向绑定。这篇文章主要介绍了vue 表单输入格式化中文输入法异常,需要的朋友可以参考下
    2018-05-05
  • 用vue和node写的简易购物车实现

    用vue和node写的简易购物车实现

    这篇文章主要介绍了用vue和node写的简易购物车实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • vue3页面跳转的两种方式

    vue3页面跳转的两种方式

    vue3的页面跳转有两种方式,第一种是标签内跳转,第二种是编程式路由导航,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-05-05
  • vue实现多个数组合并

    vue实现多个数组合并

    这篇文章主要介绍了vue实现多个数组合并方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue.js Router嵌套路由

    vue.js Router嵌套路由

    这篇文章主要介绍vue.js Router嵌套路由,平时访问首页,里面有新闻类的/home/news,还有信息类的/home/message这时候就需要使用到嵌套路由,下面我们就来具体学习嵌套路由的原理,需要的朋友可以参考一下
    2021-10-10
  • Vue3虚拟列表的实现原理与实战指南

    Vue3虚拟列表的实现原理与实战指南

    在日常开发中,我们经常会遇到需要展示大量数据的场景,比如展示几千条甚至上万条数据列表,如果直接将所有数据渲染到页面中,会导致严重的性能问题,虚拟列表正是为了解决这一问题而诞生的技术,本文将介绍虚拟列表的核心原理,并基于 Vue3 手写一个完整的虚拟列表组件
    2026-03-03

最新评论