按住滑块 拖拽验证html5,【原生】JavaScript 实现滑动拖动验证

bVbA9Yi

通常,我们为了防止用户恶意提交表单,会让用户在提交前完成滑动拖动验证,有时候这也能起到一丝反爬的作用。

实现滑动验证的方式当然不止一种,这里我们直接使用原生 JavaScript 来实现。

现在,你可以在 这里 看到完整的源码,欢迎 Star 哦😄。

原生实现

原生 JavaScript 的实现,主要是通过监听鼠标事件来对 DOM 进行一系列的操作。

滑块验证的结构主要分为四个部分:轨道、滑块、背景和文案,我们可以使用下面的 HTML 结构来表示。

请按住滑块,拖动到最右边

基本思路就是我们给滑块(.slide-block)添加相应的事件,在按下滑块时记录鼠标的当前位置并添加滑动事件,在滑动过程中根据鼠标的移动来移动滑块的位置和增加背景元素(.slide-bg)的宽度,直到移动到轨道(.slide-track)的末端后,改变文案(.slide-text)来提示成功。

样式

在开始写脚本之前可以先来完成一下它们的样式,这让滑块相关的部分看起来更好,也让后面的工作更愉快的进行。/* 样式的注意事项 */

样式的写法就不贴了,相信大家一看就懂,而且会有更好的实现。需要的话,也可以在 Github 上找到。

脚本

现在开始来实现脚本的内容,首先我们对 document.querySelector 方法进行简单的封装以方便后续操作 DOM 元素。function $(selectors) {

return document.querySelector(selectors);

}

然后通过自定义的 _h 函数我们可以很方便的创建上面的 HTML 结构,并添加到文档中。function _h(tagName, propMap = {}, text) {

const ele = document.createElement(tagName);

Object.keys(propMap).forEach(prop => ele.setAttribute(prop, propMap[prop]));

if (text) {

ele.appendChild(document.createTextNode(text));

}

return ele;

}

class SlideUnlock {

constructor(el = "body", options = {}) {

this.$el = $(el)

this.$$isSuccess = false

this.$options = { // 默认配置

tip: '请按住滑块,拖动到最右边',

unlockText: '验证成功',

duration: 500,

...options

}

}

init()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中实现鼠标滑轮放大缩小图片,可以通过以下步骤实现: 1. 创建一个Image对象,并将其添加到Canvas中。 2. 给Image对象添加一个Rect Transform组件,用于控制图片的位置和大小。 3. 给Image对象添加一个Event Trigger组件,并添加两个事件:OnScroll和OnDrag。 4. 在OnScroll事件中,使用鼠标滑轮的delta值来缩放图片的大小。可以使用RectTransform组件的localScale属性来实现缩放。 5. 在OnDrag事件中,使用鼠标的delta值来移动图片的位置。可以使用RectTransform组件的anchoredPosition属性来实现移动。 下面是一个示例代码: ``` using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ImageController : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IDragHandler, IScrollHandler { public Image image; public float zoomSpeed = 0.1f; public float moveSpeed = 1.0f; private bool isDragging = false; private Vector2 dragStartPosition; public void OnPointerEnter(PointerEventData eventData) { // 鼠标进入图片区域时,允许滑动和缩放图片 image.rectTransform.pivot = new Vector2(0.5f, 0.5f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnPointerExit(PointerEventData eventData) { // 鼠标离开图片区域时,还原图片位置和大小 image.rectTransform.pivot = new Vector2(0f, 1f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnDrag(PointerEventData eventData) { // 鼠标左键按住拖动时,移动图片位置 if (Input.GetMouseButton(0)) { if (!isDragging) { isDragging = true; dragStartPosition = eventData.position; } else { Vector2 delta = eventData.position - dragStartPosition; image.rectTransform.anchoredPosition += delta * moveSpeed; dragStartPosition = eventData.position; } } else { isDragging = false; } } public void OnScroll(PointerEventData eventData) { // 使用鼠标滚轮缩放图片大小 float scale = 1.0f + eventData.scrollDelta.y * zoomSpeed; image.rectTransform.localScale *= scale; } } ``` 将这个脚本组件添加到Image对象上,然后将Image对象的Image组件和RectTransform组件赋值给对应的变量,即可实现鼠标滑轮放大缩小图片,鼠标左键按住滑动拖动图片的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值