首页 > 其他分享 >js实现滑动密码框

js实现滑动密码框

时间:2024-09-09 14:50:01浏览次数:12  
标签:style const background js 密码 drag pageX 滑动 check

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>drag</title>
<style>
*{
margin: 0;
padding: 0;
}

body{
padding: 20px;
}

/* 图形拼图验证码 */
.check{
width: 400px;
height: 300px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: url(https://img0.baidu.com/it/u=2028084904,3939052004&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500);
position: relative;
}

.check::before{
content: '';
width: 50px;
height: 50px;
background: rgba(0, 0, 0, 0.5);
border: 1px solid #fff;
position: absolute;
top: 100px;
left: 280px;
}

.check-child{
content: '';
width: 50px;
height: 50px;
border: 1px solid #fff;
background-image: inherit;
background-repeat: inherit;
background-size: 400px 300px;
background-position: -280px -100px;
position: absolute;
top: 100px;
left: 0;
}
/* 拖动条 */
.drag{
width: 400px;
height: 50px;
background-color: #e3e3e3;
margin-top: 10px;
position: relative;
}
/* 可拖动的盒子 */
.drag-child{
width: 50px;
height: 50px;
background-color: aquamarine;
z-index: 10;
position: absolute;
top: 0;
left: 0;
}
/* 提示文字说明 */
.drag-tips{
display: flex;
align-items: center;
justify-content: end;
width: 95%;
height: 100%;
margin: 0 auto;
font-size: 12px;
color: #8a8a8a;
user-select: none;
z-index: 1;
position: absolute;
top: 0;
left: 0;

}

@keyframes move {
to {
transform: translateX(0);
}
}
</style>
</head>
<body>
<!-- 图形校验区域 -->
<div class="check">
<!-- 被校验区域 -->
<div class="check-child"></div>
</div>
<!-- 拖动条 -->
<div class="drag">
<!-- 操作说明 -->
<div class="drag-tips">
<span>按住左边按钮向右拖动完成上方图像验证</span>
</div>
<!-- 可拖动的盒子 -->
<div class="drag-child"></div>
</div>
</body>
<script>
// 获取元素实例
const drag = document.querySelector('.drag-child')

// 图形被校验区域
const check = document.querySelector('.check-child')

// 通过校验回调
const success = () => {
console.log('通过校验');
}

// 声明鼠标按下事件
const dragMouseDown = event => {
// 添加鼠标移动事件
document.addEventListener('mousemove', dragMouseMove)
}
// 监听鼠标移动事件
const dragMouseMove = event => {
// 获取当前 x 轴坐标
const { pageX } = event
if(pageX < 0 || pageX > 350){
return
}
// 修改可移动盒子的 x 轴坐标
drag.style.transform = `translateX(${pageX}px)`

// 修改被校验区域坐标
check.style.transform = `translateX(${pageX}px)`

if(pageX >= 278 && pageX <= 285){
// 执行回调
success()
}
}
// 结束鼠标监听事件
const dragMouseUP = event => {
// 移除鼠标移动事件
document.removeEventListener('mousemove', dragMouseMove)

// 获取当前 x 轴坐标
const { pageX } = event

if(pageX < 278 || pageX > 285){
// 修改可移动盒子的 x 轴坐标
drag.style.animation = 'move 0.5s ease-in-out'
// 修改被校验区域坐标
check.style.animation = 'move 0.5s ease-in-out'

// 动画结束监听回调
const animationEnd = ()=>{
// 修改可移动盒子的 x 轴坐标
drag.style.transform = `translateX(${0}px)`
// 修改被校验区域坐标
check.style.transform = `translateX(${0}px)`

// 清除动画属性
drag.style.animation = ''
check.style.animation = ''
// 移出动画结束监听
document.removeEventListener("animationend", animationEnd)
}
// 添加动画结束监听
document.addEventListener("animationend", animationEnd)
}
}

// 添加鼠标按下事件
document.addEventListener('mousedown', dragMouseDown)
// 添加鼠标弹起事件
document.addEventListener('mouseup', dragMouseUP)


</script>
</html>

  

转载 https://juejin.cn/post/7175818459379417146

标签:style,const,background,js,密码,drag,pageX,滑动,check
From: https://www.cnblogs.com/conlin/p/18404527

相关文章

  • 解锁高效驱动密码:SiLM8260A系列SiLM8260ABCS-DG 集成米勒钳位的双通道隔离驱动芯片
    附上SiLM8260A同系列型号参考:SiLM8260ADCS-DG 12.5V/11.5VSiLM8260ABCS-DG 8.5V/7.5VSiLM8260AACS-DG 5.5V/5VSiLM8260AGCS-DG 3.5V/3VSiLM8260ABCS-DG是一款集成了米勒钳位功能的双通道隔离驱动芯片,它精准地满足了上述严苛条件。具备10A的拉电流和灌电流能......
  • 在react中用three.js 渲染模型 在上面创建标签
    import{CSS2DRenderer,CSS2DObject}from'three/examples/jsm/renderers/CSS2DRenderer.js'//基本设置constscene=newTHREE.Scene();constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);camera.posi......
  • 推荐一个Python流式JSON处理模块:streaming-json-py
    每天,我们的设备、应用程序和服务都在生成大量的数据流,这些数据往往大多是以JSON格式存在的。如何高效地解析和处理这些JSON数据流是一大挑战。今天,我要为大家介绍一个能极大简化这一过程的利器:streaming-json-pystreaming-json-py介绍streaming-json-py是一个专为实时......
  • 在react中利用three.js 渲染模型 让鼠标拖拽是模型转动
    import{OrbitControls}from'three/examples/jsm/controls/OrbitControls';useEffect(()=>{//初始化OrbitControlsconstcontrols=newOrbitControls(camera,renderer.domElement);//设置控制参数controls.enableDamping=true;//平滑化运动c......
  • TCP滑动窗口(面试)
    TCP三次握手和四次挥手TCP滑动窗口是什么?如果传输的数据比较大,需要拆分为多个数据包进行发送。如果TCP协议需要收到确认应答后,才可以发送下一个数据包。这样的方法效率偏低为了避免这种情况,TCP使用了滑动窗口。滑动窗口用于控制发送方和接收方之间的数据传输。滑动窗......
  • react 中three.js 模型渲染
      npminstallthreeimport*asTHREEfrom"three";import{GLTFLoader}from"three/examples/jsm/loaders/GLTFLoader.js";constmountRef=useRef(null);useEffect(()=>{//创建渲染器constrenderer=newTHREE.WebGLRender......
  • 在react 中还有另外一种three.js 渲染方式
    npminstall@react-three/drei利用标签去渲染模型importReact,{useRef,useEffect,useState}from'react';import{Canvas,useFrame,useThree,useLoader}from'@react-three/fiber';import{GLTFLoader}from'three/examples/jsm/loaders/GLT......
  • LeetCode 239. 滑动窗口最大值(滑动窗口)
    题目:239.滑动窗口最大值思路:用一个双端队列来保存滑动窗口内的值按大到小排序,时间复杂度0(n)。细节看注释classSolution{public:vector<int>maxSlidingWindow(vector<int>&nums,intk){ //元素值是nums的下标,满足nums值按大到小排序deque<in......
  • 解密企业变革成功密码:基于能力规划的案例解析与深度实战指南
    在当今充满挑战的全球化和数字化时代,企业要想在竞争中胜出,不仅需要制定前瞻性的战略,还必须具备将这些战略转化为现实的能力。传统的战略执行方式往往难以应对市场的动态变化和内部复杂性,而基于能力规划(Capability-BasedPlanning,CBP)的方法则为企业提供了从理论到实践的系统化......
  • json.dumps(data.__dict__) 会把中文字符转义为 Unicode 码点
    在Python中,json.dumps()函数会将Python对象序列化为JSON字符串,并默认使用UTF-8编码来处理非ASCII字符。虽然在Python3中,字符串是默认以Unicode形式存储的,但是当json.dumps()将Python字符串转换为JSON格式时,非ASCII字符会自动被转义为Unicode码点(例如\u......