广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序滑块验证实现方法
  • 571
分享到

微信小程序滑块验证实现方法

2024-04-02 19:04:59 571人浏览 独家记忆
摘要

下面给大家介绍下微信小程序滑块验证的效果图及实例代码: 如图: 滑块验证组件 puzzleVerify目录 index.wxml <!-- 滑动验证弹窗 --> &

下面给大家介绍下微信小程序滑块验证的效果图及实例代码:

如图:

滑块验证组件

puzzleVerify目录

index.wxml


<!-- 滑动验证弹窗 -->
<view class="slide_model" wx:if="{{slidebel}}">
	<view class="slide_wrapper">
		<!-- 拼图图片部分 -->
		<view class="canvas_img" id="canvas_img">
			<!-- 背景图片 -->
			<canvas style="width: {{canvas_width}}px; height: {{canvas_width * 13 / 28}}px;" canvas-id="firstCanvas" id="firstCanvas"></canvas>
			<!-- 被抠方块 -->
			<cover-view class="canvas_view" style="left:{{canfile_x}}px;top:{{canfile_y}}px;"></cover-view>
			<!-- 可移动空格 -->
			<cover-image class="canfile_image"
				style="top:{{canfile_y}}px;left:{{slide_clientX > canvas_width-50 ? canvas_width-50 : slide_clientX}}px;"
				src="{{canfile_image}}"></cover-image>
		</view>
		<!-- 滑块 -->
		<view class="canvas_slide">
			<view class="canvas_width"
				style="width:{{slide_clientX > canvas_width-50?canvas_width-50:slide_clientX}}px;{{slide_status == 2?'background:#52CCBA;':''}}{{slide_status == 3?'background:#F57A7A;':''}}">
			</view>
			<view class="canvas_kus" bindtouchstart="slide_start" bindtouchmove="slide_hmove" bindtouchend="slide_chend"
				style="left:{{slide_clientX > canvas_width-50?canvas_width-50:slide_clientX}}px; {{slide_status == 0?'color: #333;':''}} {{slide_status == 1?'background:#1991FA;':''}} {{slide_status == 2?'background:#52CCBA;':''}} {{slide_status == 3?'background:#F57A7A;':''}}">
				<view wx:if="{{slide_status < 2}}"
					style="background-image: {{slide_status==0?'url(/imgs/puzzle-uncheck.png)':'url(/imgs/puzzle-uncheck2.png)'}}">
				</view>
				<view wx:if="{{slide_status == 2}}">
					<image src="/imgs/puzzle-checked.png" mode="aspectFit"
						style="width:40rpx;height:40rpx;margin-top:10px;">
					</image>
				</view>
				<view wx:if="{{slide_status == 3}}">
					<image src="/imgs/puzzle-fail.png" mode="aspectFit"
						style="width:40rpx;height:40rpx;margin-top:10px;">
					</image>
				</view>
			</view>
			<view wx:if="{{slide_status == 0 || slide_status == 1}}">拖动左边滑块完成上方拼图</view>
		</view>
		<!-- 底部按钮 -->
		<view class="canvas_guil">
			<image bindtap="visidlisd" class="footer-icon" src="/imgs/puzzle-close.png"
				style="width: 50rpx; height: 50rpx;"></image>
			<image bindtap="slide_tap" class="footer-icon" src="/imgs/puzzle-fresh.png"
				style="width: 48rpx; height: 48rpx;"></image>
		</view>
	</view>
</view>

index.wxss



.slide_model {
  width: 100%;
  height: 100vh;
  z-index: 999;
  position: fixed;
  left: 0;
  top: 0;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  align-items: center;
  justify-content: center;
}
.slide_wrapper {
  float: left;
  z-index: 1;
  position: relative;
  width: 90%;
  background-color: #fff;
}
.canvas_img {
  width: 90%;
  min-height: 150px;
  position: relative;
  margin: 25rpx auto 0;
}
#firstCanvas {
  z-index: 1 !important;
  width: 100%;
  height: 100%;
}

.canvas_view {
  width: 50px;
  height: 50px;
  position: absolute;
  background: rgba(0, 0, 0, 0.6);
  z-index: 2;
  box-shadow: 0 0 5px 2px rgba(255, 255, 255, 0.5);
}

.canfile_image {
  width: 50px;
  height: 50px;
  position: absolute;
  left: 0;
  z-index: 3;
  box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.8);
  box-sizing: border-box;
}
.canfile_image::before {
  content: "";
  position: absolute;
  width: 100%;
  height: 100%;
  box-shadow: 0 0 8px 5px rgba(255, 255, 255, 0.8) inset;
}
.canvas_slide {
  width: 90%;
  height: 45px;
  background: #eee;
  text-align: center;
  line-height: 80rpx;
  margin: 0 auto;
  position: relative;
  font-size: 26rpx;
}

.canvas_width {
  position: absolute;
  left: 0;
  top: 0;
  height: 45px;
  background-color: #1991FA;
  width: 0;
  border-top: 1px solid #DDD;
  border-bottom: 1px solid #ddd;
}

.canvas_kus {
  width: 48px;
  height: 45px;
  background-color: #fff;
  font-size: 36rpx;
  font-weight: 700;
  position: absolute;
  left: 0;
  top: 0;
  border: 1px solid #ddd;
  color: #fff;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
.canvas_kus>view {
  width: 100%;
  height: 100%;
  background-position: center;
  background-size: 50% 40%;
  background-repeat: no-repeat;
}

.canvas_guil {
  width: 100%;
  border-top: 1px solid #f4f4f4;
  height: 100rpx;
  display: flex;
  align-items: center;
  float: left;
  font-size: 30rpx;
  color: #666;
}
.canvas_guil>image {
  margin-left: 30rpx;
}

index.js


Component({
	
	properties: {
		sildeBlockCont: {   //接受父组件值
			type: String
		}
	},
	
	data: {
		canvas_width: 0,
		slidebel: false, //滑动弹窗
		canfile_image: '', //裁剪图片
		canfile_x: '', //被抠方块的水平位置
		canfile_y: '', //被抠方块的垂直位置
		slide_clientX: 0, //移动位置
		slide_status: 0, //0 停止操作   1 触发长按   2 正确   3 错误
	},
	
	methods: {
		// 弹窗
		visidlisd(e) {
			var that = this
			this.setData({
				slidebel: !this.data.slidebel
			})
			if (this.data.slidebel) {
				if (this.data.canvas_width != 0) {
					this.slide_tap()
					return
				}
				wx.nextTick(() => {
					let query = this.createSelectorQuery()
					query.select('#canvas_img').boundinGClientRect(function (rect) {
						that.setData({
							canvas_width: rect.width
						})
						that.slide_tap()
					}).exec()
				})
			}
		},
		// 画布
		slide_tap(e) {
			var that = this
			var imgIndex = Math.round(Math.random() * 13 + 1)
			that.setData({
				canfile_x: Math.round(Math.random() * (this.data.canvas_width - 120) + 60),
				canfile_y: Math.round(Math.random() * (this.data.canvas_width * 13 / 28 - 60)),
				canfile_image: ''
			})
			setTimeout(function () {
				var context = wx.createCanvasContext('firstCanvas', that)
				context.width = that.data.canvas_width
				context.height = that.data.canvas_width * 13 / 28
				
				//  /imgs/puzzle-bg-${imgIndex}.jpg  为滑块背景图 从静态资源获取  如从接口获取可从that.properties.properties拿
				context.drawImage(`/imgs/puzzle-bg-${imgIndex}.jpg`, 0, 0, context.width, context.height)
				context.draw(false, (() => {
					wx.canvasToTempFilePath({
						x: that.data.canfile_x,
						y: that.data.canfile_y,
						width: 50,
						height: 50,
						canvasId: 'firstCanvas',
						success: function (res) {
							that.setData({
								canfile_image: res.tempFilePath
							})
						}
					}, that);
				}))
			}, 50)
		},
		// 滑动开始
		slide_start(e) {
			this.setData({
				slide_status: 1
			})
		},
		// 滑动中
		slide_hmove(e) {
			this.setData({
				slide_clientX: (e.touches[0].clientX - 60) < 1 ? 0 : (e.touches[0].clientX - 60)
			})
		},
		//滑动结束
		slide_chend(e) {
			var that = this
			var cliextX;
			var maxX = this.data.canvas_width - 60
			if (that.data.slide_clientX < 1) {
				that.data.slide_status = 0
				return false
			}
			if (that.data.slide_clientX > maxX) {
				cliextX = maxX
			} else {
				cliextX = that.data.slide_clientX
			}
			if (((that.data.canfile_x + 5) > cliextX) && ((that.data.canfile_x - 5) < cliextX)) {
				that.setData({
					slide_status: 2,
					slide_clientX: that.data.canfile_x,
				})
				setTimeout(function () {
					that.setData({
						slidebel: false,
					})
				}, 500)
				wx.showToast({
					icon: 'success',
					title: '验证成功',
				})
				that.triggerEvent('puzzleVerify')
			} else {
				that.setData({
					slide_status: 3,
				})
			}
			setTimeout(function () {
				that.setData({
					slide_status: 0,
					slide_clientX: 0,
				})
			}, 500)
		},
	},
	lifetimes: {
		created() {
			// 在组件实例刚刚被创建时执行
		},
		ready() {
			// 在组件在视图层布局完成后执行
			// console.log(this.properties.sildeBlockCont);
		},
	}
})

index.JSON


{
  "component": true,
  "usingComponents": {}
}

父组件调用滑块

json


"usingComponents": {
    "puzzleVerify": "/components/puzzleVerify/index"
  }

wxml


<button  bindtap="getCode"></button>
<puzzleVerify id="puzzleVerify" bind:puzzleVerify="countDown" sildeBlockCont="{{sildeBlockCont}}"></puzzleVerify>

js


	data: {
		sildeBlockCont: '', //滑块背景图
	},
	onReady: function () {
		this.puzzleVerify = this.selectComponent("#puzzleVerify")
	},
	getCode() {
		this.puzzleVerify.visidlisd()
	},
	// 滑块验证成功操作
	countDown() {}

滑块含有静态图片,完整代码和静态图片资源已上传链接: 微信小程序滑块验证源码.

到此这篇关于微信小程序滑块验证方法的文章就介绍到这了,更多相关微信小程序滑块验证内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 微信小程序滑块验证实现方法

本文链接: https://www.lsjlt.com/news/161906.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序滑块验证实现方法
    下面给大家介绍下微信小程序滑块验证的效果图及实例代码: 如图: 滑块验证组件 puzzleVerify目录 index.wxml <!-- 滑动验证弹窗 --> &...
    99+
    2022-11-12
  • 微信小程序实现滑块验证
    本文实例为大家分享了微信小程序实现滑块验证的具体代码,供大家参考,具体内容如下 思路: 1.手指按住 并且 还能 滑动2.滑动到一定的距离 进行判断百度微信开发者文档 : 使用 m...
    99+
    2022-11-13
  • Android如何实现微信小程序滑块验证
    这篇文章主要讲解了“Android如何实现微信小程序滑块验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android如何实现微信小程序滑块验证”吧!如图:滑块验证组件puzzleVeri...
    99+
    2023-06-26
  • 微信小程序实现登陆注册滑块验证
    目录一、创建自定义组件MoveVerify二、在index页面使用本文实例为大家分享了微信小程序实现登陆注册滑块验证的具体代码,供大家参考,具体内容如下 一、创建自定义组件Mov...
    99+
    2022-11-13
  • 微信小程序如何实现登陆注册滑块验证
    这篇文章主要介绍“微信小程序如何实现登陆注册滑块验证”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何实现登陆注册滑块验证”文章能帮助大家解决问题。具体效果如下一、创建自定义组件MoveV...
    99+
    2023-06-30
  • 微信小程序实现滑动验证拼图
    本文实例为大家分享了微信小程序实现滑动验证拼图的具体代码,供大家参考,具体内容如下 效果图 .wxml <button bindtap="visidlisd">滑动验证...
    99+
    2022-11-13
  • 微信小程序实现拉链式的滑动验证
    本文实例为大家分享了微信小程序实现拉链式滑动验证的具体代码,供大家参考,具体内容如下 view结构 <view style="position: relative;height...
    99+
    2022-11-13
  • 微信小程序实现表单验证
    微信小程序的表单验证,供大家参考,具体内容如下 需要用到一个插件WxValidat.js 传送门 在需要使用的page js文件下导入 import WxValidate fro...
    99+
    2022-11-12
  • 微信小程序api签名验证的方法
    这篇文章主要讲解了“微信小程序api签名验证的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序api签名验证的方法”吧!用户数据的签名验证和加解密数据签名校验为了确保 开放接口 ...
    99+
    2023-06-26
  • 微信小程序实现带滑块的进度条
    微信小程序项目需求,要实现一个带滑块并可左右滑动的进度条,看了小程序的文档,发现上面的progress组件无法满足需求,所以我自己写了一个,在这里总结一下。 一、效果图 二、实现逻...
    99+
    2022-11-13
  • 微信小程序实现接收验证码
    本文实例为大家分享了微信小程序实现接收验证码的具体代码,供大家参考,具体内容如下 效果如下图: wxml部分如下: <!--验证码-->   <view clas...
    99+
    2022-11-13
  • 微信小程序实现随机验证码
    本文实例为大家分享了微信小程序实现随机验证码的具体代码,供大家参考,具体内容如下 废话不多说,直接上图看效果 一、实现功能 1、点击灰色底的验证码图片可以更换一张验证码 2、验证输...
    99+
    2022-11-13
  • 微信小程序实现图形验证码
    本文实例为大家分享了微信小程序实现图形验证码的具体代码,供大家参考,具体内容如下 1.wxml页面 <canvas canvas-id="canvas" bindtap='ch...
    99+
    2022-11-13
  • 微信小程序实现动态验证码
    目录一、创建自定义组件verification-code二、在index页面使用本文实例为大家分享了微信小程序实现动态验证码的具体代码,供大家参考,具体内容如下 一、创建自定义组件...
    99+
    2022-11-13
  • 微信小程序实现表单验证功能
    微信小程序是一种快速构建原生应用的开发框架,它在移动端应用开发中应用广泛。在开发过程中,表单验证是一个常见的需求,用于确保用户输入的数据的有效性和安全性。本文将介绍如何在微信小程序中实现表单验证功能,并提供具体的代码示例。一、表单验证的基本...
    99+
    2023-11-21
    表单验证 微信 小程序
  • 微信小程序实现验证码倒计时
    本文实例为大家分享了微信小程序实现验证码倒计时的具体代码,供大家参考,具体内容如下 wxml代码: <view class='container'>   <form...
    99+
    2022-11-13
  • 微信小程序实现表单验证源码
    本文实例为大家分享了微信小程序实现表单验证的具体代码,供大家参考,具体内容如下 效果图 点击预约设计弹出表单 城市,面积不能输入,只能选择 点击位置获取当前定位 源码: Wxm...
    99+
    2022-11-13
  • 微信小程序实现手机号码验证
    本文实例为大家分享了微信小程序实现手机号码验证的具体代码,供大家参考,具体内容如下 wxml <form bindsubmit='formSubmit'>   <v...
    99+
    2022-11-13
  • 微信小程序实现短信验证码倒计时
    本文实例为大家分享了微信小程序实现短信验证码倒计时的具体代码,供大家参考,具体内容如下 初始效果 当点击按钮时候设置禁止点击效果:如下图 话不多说,直接上代码 1.wxml部分 ...
    99+
    2022-11-13
  • 微信小程序怎么实现带滑块的进度条
    今天小编给大家分享一下微信小程序怎么实现带滑块的进度条的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、效果图二、实现逻辑功...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作