uni-app 图片滑块验证

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app 图片滑块验证

滑块验证

图片

1 回复

在uni-app中实现图片滑块验证功能,可以通过集成第三方验证码服务或者使用自定义的滑块验证逻辑来完成。这里提供一个简单的自定义图片滑块验证示例,主要步骤包括前端页面布局、滑块拖动逻辑以及验证位置的正确性。

1. 页面布局

首先,在pages/index/index.vue中设置页面布局,包括图片容器、滑块和背景轨道。

<template>
  <view class="container">
    <view class="image-box">
      <image :src="imageSrc" class="background-image"></image>
      <view class="slider-track"></view>
      <view 
        class="slider-block" 
        :style="{ left: sliderPosition + 'px' }" 
        @touchstart="onTouchStart" 
        @touchmove="onTouchMove" 
        @touchend="onTouchEnd">
      </view>
    </view>
    <button @click="verify">验证</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      imageSrc: 'path/to/your/image.jpg', // 背景图片路径
      sliderPosition: 0, // 滑块初始位置
      startX: 0, // 触摸开始时的X坐标
      offsetX: 0, // 滑块的偏移量
      targetPosition: 100, // 目标验证位置(需根据图片缺口位置设定)
    };
  },
  methods: {
    // 触摸开始事件处理
    onTouchStart(e) {
      this.startX = e.touches[0].clientX - this.offsetX;
    },
    // 触摸移动事件处理
    onTouchMove(e) {
      let moveX = e.touches[0].clientX - this.startX;
      if (moveX < 0) moveX = 0;
      if (moveX > this.$refs.track.offsetWidth - this.$refs.block.offsetWidth) {
        moveX = this.$refs.track.offsetWidth - this.$refs.block.offsetWidth;
      }
      this.offsetX = moveX;
    },
    // 触摸结束事件处理及验证
    onTouchEnd() {
      if (Math.abs(this.offsetX - this.targetPosition) < 5) {
        uni.showToast({ title: '验证成功', icon: 'success' });
      } else {
        this.sliderPosition = 0; // 重置滑块位置
        uni.showToast({ title: '验证失败', icon: 'none' });
      }
    },
    verify() {
      // 额外验证逻辑,如服务器端验证
    }
  }
};
</script>

<style>
/* 样式定义 */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.image-box {
  position: relative;
  width: 300px;
  height: 150px;
}
.background-image {
  width: 100%;
  height: 100%;
}
.slider-track {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.3);
}
.slider-block {
  position: absolute;
  top: 50%;
  width: 50px;
  height: 50px;
  background-color: #fff;
  transform: translateY(-50%);
}
</style>

注意事项

  1. 目标位置targetPosition需要根据实际图片中的缺口位置来调整。
  2. 边界处理:确保滑块不会超出轨道范围。
  3. 服务器端验证:前端验证仅作为用户体验提升,实际安全性需结合服务器端验证。
  4. 样式调整:根据实际需求调整样式,以适应不同屏幕尺寸和设计要求。
回到顶部