之前写过一篇uniapp框架的滑块验证,今天抽个空用原生js实现这个功能,pc端暂时不做,因为pc端只要把touch事件改成mouse事件就能实现,这里就不再重复写了。

(最新完美版本,js+canvas实现,兼容pc,ie9和移动,js+cavans实现图片滑块验证)

老样子,还是先看效果

原理和上篇uniapp的滑块一样,不一样的是这里是纯js实现,代码是全部是自己写的,有不清楚的可以留言。

下面是全部代码:

html:

Document

* {

margin: 0;

padding: 0;

}

.sliderModel {

position: fixed;

left: 0;

top: 0;

width: 100%;

height: 100%;

background: rgba(0, 0, 0, 0.5);

display: flex;

justify-content: center;

align-items: center;

display: none;

}

.title {

width: 100%;

height: 60px;

font-size: 18px;

color: #333;

display: flex;

align-items: center;

justify-content: center;

}

.cont {

position: relative;

background: #fff;

width: 300px;

border-radius: 8px;

overflow: hidden;

padding-bottom: 20px;

}

.imgWrap {

position: relative;

width: 280px;

height: 150px;

border-radius: 8px;

margin: 0 auto;

overflow: hidden;

}

#sliderRefresh {

position: absolute;

top: 20px;

right: 30px;

cursor: pointer;

color: green;

}

.img {

display: block;

width: 100%;

height: 100%;

}

.sliderOver {

position: absolute;

left: 0;

top: 0;

width: 50px;

height: 50px;

background: #ddd;

box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.3);

}

.smartImg {

position: absolute;

z-index: 2;

left: 0;

top: 0;

width: 50px;

height: 50px;

overflow: hidden;

box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);

}

.simg {

position: absolute;

display: block;

width: 280px;

height: 150px;

}

.sliderBox {

width: 280px;

margin: 10px auto 0;

height: 36px;

position: relative;

}

.sliderF {

width: 100%;

height: 100%;

z-index: 3;

}

.sliderS {

cursor: pointer;

position: absolute;

left: 0;

top: 0;

z-index: 2;

height: 36px;

width: 36px;

background: #007cff;

border-radius: 36px;

display: flex;

justify-content: center;

align-items: center;

}

.icon {

width: 20px;

height: 20px;

}

.bgC {

position: absolute;

z-index: 1;

left: 0;

top: 50%;

transform: translateY(-50%);

width: 100%;

height: 30px;

border-radius: 30px;

line-height: 30px;

font-size: 14px;

color: #999999;

box-shadow: inset 0 0 4px #ccc;

text-align: center;

overflow: hidden;

}

.bgC_left {

position: absolute;

left: 0;

top: 50%;

transform: translateY(-50%);

width: 0;

height: 28px;

border-top-left-radius: 28px;

border-bottom-left-radius: 28px;

line-height: 28px;

font-size: 14px;

background-color: #eee;

box-shadow: inset 0 0 4px #ccc;

text-align: center;

}

.showMessage {

text-align: center;

font-size: 14px;

height: 30px;

line-height: 30px;

}

#closeBtn {

position: fixed;

z-index: 10;

bottom: 10px;

left: 50%;

}

点击
图形验证
刷新

拖动左边滑块完成上方拼图

关闭

var object = {

bImg: 'imgWrap',

sImg: 'smartImg',

sImgOver: 'sliderOver',

sliderF: 'slider',

sliderBtn: 'sliderBtn',

sliderBg: 'bgC_left',

refreshBtn: 'sliderRefresh',

range: 5,

imgArr: ['images/sliderz/1.jpg', 'images/sliderz/2.jpg', 'images/sliderz/3.jpg', 'images/sliderz/4.jpg',

'images/sliderz/5.jpg'

],

refreshCallback: function (e) {

var showMessage = document.getElementsByClassName('showMessage')[0];

showMessage.innerHTML = "";

showMessage.style.color = "#333";

},

callback: function (e) {

var showMessage = document.getElementsByClassName('showMessage')[0];

if (!e) {

showMessage.innerHTML = "验证失败,请重新验证";

showMessage.style.color = "red";

} else {

showMessage.innerHTML = "验证成功!";

showMessage.style.color = "green";

}

},

}

var mSlider = null;

document.getElementById('clickBtn').onclick = function () {

document.getElementsByClassName('sliderModel')[0].style.display = "flex";

mSlider = new window.mobileSlider(object)

}

document.getElementById('closeBtn').onclick = function () {

document.getElementsByClassName('sliderModel')[0].style.display = "none";

}

js部分(slider.js)

(function () {

function mobileSlider(params) {

var object = {

bImg: params.bImg, //大图片的盒子

sImg: params.sImg, //图片上的小图片

sImgOver: params.sImgOver, //图片上的占位区域

sliderF: params.sliderF, //滑块的父元素

sliderBtn: params.sliderBtn, //滑块

sliderBg: params.sliderBg, //滑块滑动过程中的背景块

refreshBtn: params.refreshBtn, //刷新按钮

range: params.range, //验证通过的运行范围值

imgArr: params.imgArr, //图片数组

refreshCallback: params.refreshCallback, //刷新回调

callback: params.callback //验证回调函数,true为成功,false为失败

};

var sliderF = document.getElementById(object.sliderF);

var sliderBtn = document.getElementById(object.sliderBtn);

var sliderBg = document.getElementById(object.sliderBg);

var sImg = document.getElementById(object.sImg);

var bImg = document.getElementById(object.bImg);

var sImgOver = document.getElementById(object.sImgOver);

var refreshBtn = document.getElementById(object.refreshBtn);

var max_left = sliderF.offsetWidth - sliderBtn.offsetWidth;

var sImgBeginLeft = 0;

function refresh() {

sliderBtn.style.left = sliderBg.style.width = 0;

sImgBeginLeft = 0;

var ram = Math.random();

var imgIndex = Math.floor(object.imgArr.length * ram);

var imgSrc = object.imgArr[imgIndex];

bImg.getElementsByClassName('img')[0].src = sImg.getElementsByClassName('simg')[0].src = imgSrc;

sImgOver.style.left = Math.floor(bImg.offsetWidth / 2 + bImg.offsetWidth / 2 * ram - sImgOver.offsetWidth - 6) + "px";

sImg.style.left = sImgBeginLeft = Math.floor((bImg.offsetWidth / 2 - sImgOver.offsetWidth) * ram) + "px";

sImgOver.style.top = sImg.style.top = Math.floor((bImg.offsetHeight - sImgOver.offsetWidth - 10) * ram + 10) + "px";

sImg.getElementsByClassName('simg')[0].style.left = -Math.floor(bImg.offsetWidth / 2 + bImg.offsetWidth / 2 * ram - sImgOver.offsetWidth - 6) + "px";

sImg.getElementsByClassName('simg')[0].style.top = -Math.floor((bImg.offsetHeight - sImgOver.offsetWidth - 10) * ram + 10) + "px";

object.refreshCallback(true)

}

refresh();

sliderBtn.ontouchstart = function (e) {

var ev = e || window.event

var downX = ev.touches[0].pageX;

var sImgLeft = parseInt(sImg.style.left);

this.ontouchmove = function (e) {

var ev = e || window.event;

var leftX = ev.touches[0].pageX - downX;

leftX = leftX < 0 ? 0 : (leftX < max_left ? leftX : max_left)

sliderBtn.style.left = leftX + 'px';

sliderBg.style.width = leftX + sliderBtn.offsetWidth / 2 + "px";

sImg.style.left = leftX + sImgLeft + "px";

}

this.ontouchend = function (e) {

this.ontouchmove = null; //移除移动事件

var sImgLeft = parseInt(sImg.style.left);

var sImgOverLeft = parseInt(sImgOver.style.left);

if (Math.abs(sImgOverLeft - sImgLeft) < object.range) {

object.callback && object.callback(true)

} else {

object.callback && object.callback(false)

var timer = null,

step = 10;

var sliderBtnLeft = parseInt(sliderBtn.style.left)

timer = setInterval(function () {

sliderBtnLeft -= step;

step += 5;

if (sliderBtnLeft <= 0) {

clearInterval(timer);

sliderBtnLeft = 0;

sliderBtn.style.left = sliderBg.style.width = 0;

sImg.style.left = parseInt(sImgBeginLeft) + "px"

}

sliderBtn.style.left = sliderBg.style.width = sliderBtnLeft + "px";

sImg.style.left = sliderBtnLeft + parseInt(sImgBeginLeft) + "px"

}, 20)

}

}

};

refreshBtn.ontouchstart = function () {

refresh()

}

}

window.mobileSlider = mobileSlider;

})()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

html滑动验证图片,js实现移动端图片滑块验证功能相关推荐

  1. html5 双指缩放图片,js实现移动端图片预览:手势缩放, 手势拖动,双击放大......

    查看示例效果: 一.功能介绍 图片预览主要有以下几个功能点组成:监听图片点击事件,进入图片预览模式 自定义手势事件, (双指缩放,滑动,双击...) 监听图片手势事件,通过 transform-mat ...

  2. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    原文:js实现移动端图片预览:手势缩放, 手势拖动,双击放大... 前言 本文将介绍如何通过js实现移动端图片预览,包括图片的 预览模式,手势缩放,手势拖动,双击放大等基本功能: 扫码查看示例效果: ...

  3. 凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)

    目录 1.前提和大概思路概述 2. 转换思路selenium和验证滑块图片的获取处理 3.总结 1.前提和大概思路概述 只是学习的途中有一些新的发现,分享给大家,希望对你们有帮助. 凡科网的JS逆向的 ...

  4. html消息页左滑删除模板,基于JS实现移动端左滑删除功能

    基于JS实现移动端左滑删除功能 2019-01-07 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了基于JS实现移动端左滑删除功能,编程之家小编觉得挺不错的,现 ...

  5. JS实现移动端图片延迟加载

    图片延迟加载常见的有,jquery.lazyload.js,原生JS实现的echo.js.但是都是必须给图片设置宽高. 因为项目是移动端,而且无法在加载前知道图片的宽高,所以,只好自己写了一个. 既然 ...

  6. Js 之移动端图片上传插件mbUploadify

    一.下载 https://pan.baidu.com/s/1NEL4tkHoK4ydqdMi_hgWcw 提取码:vx7e 二.Demo示例 <div class="weui_uplo ...

  7. php 图片压缩旋转,移动端图片上传旋转、压缩问题的解决方案

    本篇文章就给大家带来移动端图片上传旋转.压缩问题的解决方案.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 前言 在手机上通过网页 input 标签拍照上传图片,有一些手机会出现图片 ...

  8. html鼠标点击切换图片,js鼠标点击图片切换效果代码分享

    本文实例讲述了js鼠标点击图片切换效果.分享给大家供大家参考.具体如下: 实现原理很简单,其实是多张图片叠加起来,点击图片后依次赋予图片一个class,使其看起来在表面而已,点击图片,可以实现图片的不 ...

  9. html验证码图片,js+h5 canvas实现图片验证码

    本文实例为大家分享了js+h5 canvas实现图片验证码的具体代码,供大家参考,具体内容如下 实现效果 一.使用技术 原生js技术+html5 canvas画图 利用Math.random()函数随 ...

最新文章

  1. 微服务架构与Docker容器之间关系
  2. python读取文件多行内容-Python逐行读取文件内容的方法总结
  3. Jetty 类载入问题处理
  4. MyBatis中ThreadLocal
  5. YUI事件体系之Y.CustomEvent
  6. linux 嵌入式 交叉 环境搭建 实验原理,实验三 嵌入式Linux开发环境的搭建
  7. 手机电话本 csv 转vcf (vCard) 格式,最简单的方法!
  8. 图示代码,轻松解决IV值计算问题(python)
  9. 苹果发布“合二为一”芯片,华为公布“芯片叠加”的专利
  10. IDEA背景色和背景图片的设置
  11. cmake简洁教程 - 第五篇
  12. vue2.0桌面端框架_Element-UI组件库(Vue2.0桌面端组件库)V2.9.2 免费版
  13. 使用Encoder-Decoder模型自动生成对联的思路
  14. 什么是继承extends?
  15. OCA/OCP Oracle 数据库12c考试指南读书笔记:第15章: Oracle Storage
  16. LitePal数据库的基本操作
  17. 2023年java面试题之Socket
  18. 三层交换与路由器之间连接配置
  19. 你知道如何识别图片吗?
  20. 字节byte转换为B,KB,MB,GB,TB

热门文章

  1. c语言计算器图形界面v1.0,vc+easy x
  2. Qt Speech来到Qt 6.4
  3. 华为交换机配置端口隔离
  4. 【专利练习4】深度学习模型用于专利分类
  5. 使用javac、java命令编译运行java代码
  6. 网络安全里的蜜罐、蜜饵、蜜标、蜜网、蜜场……都是啥?
  7. 【Python】with open 打开文件的不同方式
  8. 2023年MathorCup数模A题赛题
  9. 高校师生科研成果管理平台
  10. 想知道PPT如何转PDF?这几个软件可以实现