图片拖动验证效果(源码)

news2024/10/6 22:20:32

JS案例·图片拖动验证

🌟效果展示  

🌟前置知识

CSS sprite 精灵图

🌟 代码实现

页面搭建

 距离计算

逻辑部分 

随机生成背景图片

 计算拖动图块和空缺图块的位置

绑定事件

 🌟写在最后


🌟效果展示  

🌟前置知识

CSS sprite 精灵图

CSS Sprite,我们一般叫他雪碧图或精灵图,它是一种图像拼合技术。该方法是将小图标和背景图像合并到一张图片上,然后利用 css 的背景定位来显示需要显示的图片部分。

精灵图的使用有以下几个优点:

  • 减少图片的字节。
  • 减少网页的http请求,从而大大的提高页面的性能。
  • 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率。
  • 更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。

第一个值是调左右的,当你需要将背景图向右调的时候用正值,向左则为负值 同理将背景图上下调动的时候上是用负值,下是正值 

我们通过设置 background-position 属性,来调整背景图的位置

 再例如:

如果想要下面的图形,就可以调整第二个参数,例如:

 

🌟 代码实现

页面搭建

先完成HTML结构

以及CSS样式代码

/* 整体容器的样式 */

.container {
    width: 280px;
    height: 400px;
    margin: 100px auto;
}

/* 上方的图片不好看切换一张的样式 */

.container .changeImg {
    text-align: center;
    position: relative;
    font-size: 16px;
    color: rgb(126, 57, 218);
    font-weight: bolder;
    cursor: pointer;
    user-select: none;
}

/* 前面的图标 */

.changeImg::before {
    content: '';
    display: block;
    position: absolute;
    left: 10%;
    top: calc(50% - 13px);
    width: 26px;
    height: 26px;
    background: url('../img/sx.png') no-repeat;
    background-size: cover;
    background-position: center;
}

/* img 容器整体样式,包含标题 + 图片 + 滑条 */

.imgContainer {
    height: 320px;
    box-sizing: border-box;
    padding: 15px;
    border: 1px solid #adadad;
    box-shadow: 0px 0px 2px #adadad;
    /* 设置盒子阴影 */
    border-radius: 15px;
    /* 设置圆角 */
}

/* 上方标题 */

.imgContainer h3 {
    text-align: center;
    margin: 0;
    margin-bottom: 10px;
}

/* 中间的图片 */

.imgContainer .imgBox {
    width: 100%;
    height: 200px;
    background-repeat: no-repeat;
    position: relative;
}

/* 可以拖动的图片 */

.imgBox .imgBlock {
    width: 50px;
    height: 50px;
    position: absolute;
    z-index: 10;
    opacity: 0;
}

/* 图片缺口 */

.imgBox .imgGap {
    width: 50px;
    height: 50px;
    position: absolute;
    background-color: white;
    box-shadow: 0px 0px 3px #adadad;
    /* 设置盒子阴影 */
}

/* 滑动条 */

.slider {
    width: 100%;
    height: 30px;
    margin: auto;
    margin-top: 15px;
    background-color: #ddd;
    border-radius: 10px;
    position: relative;
    text-align: center;
    line-height: 30px;
    font-size: 14px;
    font-weight: 200;
}

/* 滑动条的按钮 */

.slider button {
    position: absolute;
    top: -5px;
    left: -2px;
    background: white url('../img/yz.png') no-repeat;
    background-size: 100%;
    border-radius: 50%;
    border: 0;
    width: 40px;
    height: 40px;
    cursor: pointer;
    z-index: 20;
}

/* 滑动条文字的样式 */

.slider span {
    transition: all .5s;
}

在完成HTML和CSS后得到如图效果:

 距离计算

图片验证核心其实就是按钮的拖动,也就是位置的计算:

逻辑部分 

随机生成背景图片

先拿到需要的DOM节点,方便后续操作

 接下来就是随机生成验证图片,我这里图片就是放在本地

 图片容器以及拖动的图片块设置对应的背景图

 计算拖动图块和空缺图块的位置

 空缺图块可以设置的最大 top 值 = 盒子容器的高度 - 空缺图块的高度

  let heightRange = imgBox.offsetHeight - imgBlock.offsetHeight;

空缺图块可以设置的最大 left 值 = 盒子容器的宽度的一半 - 空缺图块的宽度

let widthRange = imgBox.offsetWidth / 2 - imgBlock.offsetWidth; 

接下来就是随机生成 left top

生成图片缺口及拖动图片的位置

绑定事件

为整个滑动条添加鼠标移动效果

设置鼠标抬起事件

 

 🌟写在最后

完整源码及图片素材免费下载地址:点击免费下载

本专栏将持续更新原生JS案例,提供一些工作中也能用上的一些小案例,详细讲解分析,提神JS开发水平与开发思路的积累,如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步,有兴趣的伙伴可以订阅一下:点击关注JS经典案例专栏 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、不root不magisk不xposed lsposed frida原生修改定位

前言常用风控APP检测1.Aida64检测2.momo检测3.微霸检测4.cellular-z检测 厂商测试总结 前言 不root不戴面具 不xposed lsposed frida,不分身,不多开,最完美的原生修改定位。 常用风控APP检测 先看效果再说原理,先过一遍环境 1.Ai…

mysql内连接与外连接详解

内连接与外连接 内连接外连接 在数据库中,连接操作是一种把两个或者多个表的记录组合在一起的操作,常用的有内连接(Inner Join)、外连接(Outer Join)等。 内连接 内连接(Inner Join&#xff0…

STM32 Cubemx 通用定时器 General-Purpose Timers同步

文章目录 前言简介cubemx配置 前言 持续学习stm32中… 简介 通用定时器是一个16位的计数器,支持向上up、向下down与中心对称up-down三种模式。可以用于测量信号脉宽(输入捕捉),输出一定的波形(比较输出与PWM输出&am…

mysql 日志总结

mysql 根据日志的功能,分6种 慢查询日志:记录所有执行时间超过 long_query_time 的所有查询,方便我们对查询进行优化通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令&#xff0…

Junit单元测试异常处理方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Junit单元测试异常处理方法 前言案例准备一、类方法内处理异常二、测试方法中处理异常1.try/catch/finally 语句2.Test(expected)3.ExpectedException 前言 提示&#xff1a…

【C语言】指针和数组笔试题解析(2)

【C语言】指针和数组笔试题解析(1), 这是第一篇关于sizeof与strlen在指针中的应用,而这一篇主要讲解在各种情形下的灵活运用,也是大厂中经典的面试题 第一题: int main() {int a[5] { 1, 2, 3, 4, 5 };in…

开始在 Windows 上使用 Next.js

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 必备条件 安装 Next.js 本指南帮助你安装 Next.js Web 框架并在 Windows 上启动和运行。 Next.js 是一个框架&…

利用idea新创建maven项目时的一些基本配置

1.修改项目默认的maven仓库 file->Settings->Build 2.设置项目的jdk版本 设置完点OK即可。 同样的我们还需要在项目配置中进行修改。 通过以上设置一般就可以解决jdk版本不兼容地方问题。

详细解释HiveSQL执行计划

一、前言 Hive SQL的执行计划描述SQL实际执行的整体轮廓,通过执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑,掌握了执行逻辑也就能更好地把握程序出现的瓶颈点,从而能够实现更有针对性的优化。此外还能帮助开发者识别看似等价的SQL其…

Redis 高性能设计之epoll和IO多路复用深度解析

I/O多路复用模型是什么 I/O:网络I/O多路:多个客户端连接(连接就是套接字描述符,即socket或者channel),指的是多条TCP连接复用:用一个进程来处理多条的连接,使用单进程就能的够实现同…

【Linux系统编程】操作系统的概念、定位 及系统调用

文章目录 前言1. 操作系统的概念和定位2. 如何理解“管理”3. 操作系统为什么要做管理4. 系统调用和库函数概念5. 局部性原理6. 计算机体系结构 前言 上一篇文章我们学习了冯诺依曼体系结构(属于计算机硬件的范畴),其中我们提到,因…

c++静态成员变量与静态成员函数

一、静态成员变量 1、说明 1.1、所有对象共享同一份静态变量 1.2、编译阶段分配内存 1.3、类内声明,类外初始化操作 静态成员变量,不属于某个具体的类对象,多有的类对象共享同一份数据 因此静态成员变量有两种方式访问 2、…

阿里云大数据实战记录10:Hive 兼容模式的坑

文章目录 1、前言2、什么是 Hive 兼容模式?3、为什么要开启 Hive 模式?4、有什么副作用?5、如何开启 Hive 兼容模式?6、该场景下,能不能不开启 Hive 兼容模式?7、为什么不是DATE_FORMAT(datetime, string)&…

【小记录】jupyter notebook新版本

手欠升级 😅今天手贱,在anaconda navigator里面更新了最新版本的spyder,然后莫名奇妙地jupyter notebook就打不开了😅,报错说缺少模块”ModuleNotFoundError: No module named jupyter_server.contents“,…

给微信小程序添加隐私协议

前些日子,微信官方针对用户的安全信息又进行了增强,这次更新几乎要求所有的小程序都需要进行整改,只要是涉及到用户的隐私的小程序都需要进行整改,这次整改是强制性的。 点开相关指引之后会跳转到下面的链接:参考链接…

解决php导出excel中小数尾部0不显示的问题

调整代码前: 新增代码: //小数避免末尾0不显示的问题 foreach ($list as &$line) {foreach ($line as &$column) {if (is_numeric($column) && strpos($column, .)!false) {$column " {$column} ";}} } 效果&#xf…

【【萌新的riscV的学习之关于risc指令集的学习使用总五】】

萌新的riscV的学习之关于risc指令集的学习使用总五 opcode(操作码) 指令的基本操作 rd目的操作数寄存器 用来存放操作结果 funct3 一个另外的操作码字段 rs1: 第一个源操作数寄存器 rs2: 第二个源操作数寄存器 funct7: 一个另外的操作码字段 还有一种I型…

ApplicationContext实现

基于classpath下的xml格式的配置文件来创建bean对象 java代码 package com.example;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.Fi…

力扣刷题班 第3课 02-分治与回溯算法

分治(例题1)九键电话号码的字母组合 电话号码的字⺟组合 给定⼀个仅包含数字 2-9 的字符串,返回所有它能表示的字⺟组合。答案可以按 任意顺序 返回。 给出数字到字⺟的映射如下(与电话按键相同)。注意 1 不对应任何字…

【计算机视觉】Image Feature Extractors方法介绍合集(二)

文章目录 一、Mixed Depthwise Convolution二、Deformable Kernel三、Dynamic Convolution四、Submanifold Convolution五、CondConv六、Active Convolution七、Depthwise Dilated Separable Convolution八、Involution九、Dilated convolution with learnable spacings十、Att…