
jquery利用sliderVerif插件实现滑块验证功能,下面web建站小编给大家简单介绍一下!
1、定义一个div
<div class="box" id="box"></div> <button onclick="boxRe()">重置</button>
2、sliderVerif.js插件
(function (win) {
"use strict";
var _this = null;
// 内部方法 insertEleStr:插入对象 options:参数
var sliderVerification = function (insertEleStr = "", options = {}) {
if (!insertEleStr) throw "insertEleStr 无效,请填写插入父级类名或ID";
_this = this;
// 参数
this.options = {
sliderText: "请按住滑块拖动",// 滑块提示文字
succText: "验证通过",// 滑块完成提示文字
sliderTextColor: "#666",//滑块提示文字颜色 颜色名称,RGB,RGBA,16进制
succTextColor: "#fff",//滑块完成提示文字颜色 颜色名称,RGB,RGBA,16进制
fontSize: 1,//字体大小 数字/字符串 字符串可以带单位 ,数字默认单位 em
/**
* 盒子 样式
*/
boxStyle: {
bg: "#e5e5e5",//背景颜色 颜色名称,RGB,RGBA,16进制
barBg: "#5abc3c",// 进度条 背景颜色 颜色名称,RGB,RGBA,16进制
radius: 0,//按钮圆角 数字/字符串 字符串可以带单位,同 border-radius
borderWidth: 0,//边框宽度 数字/字符串 字符串可以带单位
borderColor: "#333",//边框颜色 颜色名称,RGB,RGBA,16进制
borderStyle: "solid",//边框样式 同 css border-style 属性值
},
/**
* 按钮 样式
*/
btnStyle: {
color: "#333",// 按钮 图标颜色 颜色名称,RGB,RGBA,16进制
succColor: "#5abc3c",//滑动完成 图标颜色 颜色名称,RGB,RGBA,16进制
bg: "#fff",//按钮背景颜色 颜色名称,RGB,RGBA,16进制
succBg: "#fff",//滑动完成 背景颜色 颜色名称,RGB,RGBA,16进制
radius: null,//按钮圆角 数字/字符串 字符串可以带单位,同 border-radius,不是数字和字符串,使用 boxStyle.radius
borderWidth: 1,//边框宽度 数字/字符串 字符串可以带单位
borderColor: "#e5e5e5",//边框颜色 颜色名称,RGB,RGBA,16进制
borderStyle: "solid",//边框样式 同 css border-style 属性值
},
// 是否监听屏幕变化,自动修改响应式样式
isResizeAutoStyle: false,
//返回状态方法
getCompleteState: (res) => { },
...options
};
// 内置变量
this.isComplete = false;//是否完成
this.step = 15;//步长,回到原点的速度
// 滑块整体对象
this._slider_verif_ = null;
// 滑块
this._slider_bar = null;
// 塞入位置的父级元素
this.insertEle = document.querySelector(insertEleStr);
// 初始化
this.init();
// 监听屏幕变化
this.resizeTimer = null;
if (this.options.isResizeAutoStyle) {
win.addEventListener("resize", () => {
clearTimeout(this.resizeTimer);
this.resizeTimer = setTimeout(() => {
this.upStyle();
}, 100)
})
};
};
// 原型链
sliderVerification.prototype = {
// 初始化
init() {
// 创建 html
this.create();
// 创建css
this.createCss();
// 添加事件
this.addEvent();
},
// 创建 html
create() {
// 创建元素
var _slider_verif_ = document.createElement("div");
_slider_verif_.className = "_slider_verif_";
_slider_verif_.innerHTML = `
<span>${this.options.sliderText}</span>
<div class="_slider_bar">
<div class="_slider_span">
<span>${this.options.sliderText}</span>
</div>
<p class="_slider_btn"></p>
</div>
`;
// 塞入
this.insertEle.appendChild(_slider_verif_);
// 保存 对象
this._slider_verif_ = _slider_verif_;
this._slider_bar = _slider_verif_.querySelector("._slider_bar");
},
// 创建css
createCss() {
// 获取 父级 高宽
var insertEleStrW = this.insertEle.clientWidth;
var insertEleStrH = this.insertEle.clientHeight;
// 设置 盒子 样式
var boxStyle = JSON.parse(JSON.stringify(this.options.boxStyle || {}));
// 判断圆角,设置单位
boxStyle.radius = typeof boxStyle.radius == 'number' ? boxStyle.radius += 'px' : boxStyle.radius;
// 判断边框宽度,设置单位
boxStyle.borderWidth = typeof boxStyle.borderWidth == 'number' ? boxStyle.borderWidth += 'px' : boxStyle.borderWidth;
// 设置 按钮 样式
var btnStyle = JSON.parse(JSON.stringify(this.options.btnStyle || {}));
// 判断边框宽度,设置单位
btnStyle.borderWidth = typeof btnStyle.borderWidth == 'number' ? btnStyle.borderWidth += 'px' : btnStyle.borderWidth;
// 判断 圆角 ,设置单位
switch (typeof btnStyle.radius) {
case 'number':// 数字 ,添加单位
btnStyle.radius += 'px';
break;
case 'string': // 字符串,不需要动
btnStyle.radius = btnStyle.radius;
break;
default: // unll undefined , 没有设置,就是用 盒子 boxStyle.radius 属性
btnStyle.radius = boxStyle.radius;
break;
};
// 设置字体
var fontSize = this.options.fontSize;
typeof fontSize == 'number' ? fontSize += 'em' : fontSize;
var css = `
._slider_verif_ {
/* 盒子宽度,设置bar>span宽度 */
--slider_verif_wid: ${insertEleStrW || 0}px;
/* 盒子高度,设置按钮高度 */
--slider_verif_hei: ${insertEleStrH || 0}px;
/* 滑动前 文字颜色 */
--slider_text_color: ${this.options.sliderTextColor};
/* 滑动完成 文字颜色 */
--slider_succ_text_color: ${this.options.succTextColor};
/* 字体大小 */
--slider_fontsize:${fontSize};
/* 盒子 样式 */
--slider_verif_bg:${boxStyle.bg};
--slider_verif_barbg:${boxStyle.barBg};
--slider_verif_radius: ${boxStyle.radius};
--slider_verif_border_w:${boxStyle.borderWidth};
--slider_verif_border_c:${boxStyle.borderColor};
--slider_verif_border_s:${boxStyle.borderStyle};
/* 按钮 样式 */
--slider_btn_color:${btnStyle.color};
--slider_btn_succColor:${btnStyle.succColor};
--slider_btn_bg:${btnStyle.bg};
--slider_btn_succBg:${btnStyle.succBg};
--slider_btn_radius: ${btnStyle.radius};
--slider_btn_border_w:${btnStyle.borderWidth};
--slider_btn_border_c:${btnStyle.borderColor};
--slider_btn_border_s:${btnStyle.borderStyle};
}
@font-face {
font-family: "iconfont";
src: '';
}
._slider_verif_ *{
margin: 0;
padding: 0;
}
._slider_verif_{
width: 100%;
height: 100%;
position: relative;
box-sizing: border-box;
overflow: hidden;
user-select: none;
background-color: #fff;
font-size: 14px;
border: 1px solid #333;
color: #666;
border-radius: var(--slider_verif_radius);
border-width: var(--slider_verif_border_w);
border-style: var(--slider_verif_border_s);
border-color: var(--slider_verif_border_c);
background-color: var(--slider_verif_bg);
color:var(--slider_text_color);
}
._slider_verif_ span{
width: 100%;
height: 100%;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
font-size: 1em;
font-size: var(--slider_fontsize);
}
._slider_verif_ ._slider_bar{
position: absolute;
z-index: 5;
width: 0;
min-width:var(--slider_verif_hei);
height: 100%;
top: 0;
left: 0;
overflow: hidden;
color: #fff;
background-color:#5abc3c;
color:var(--slider_succ_text_color);
border-radius: var(--slider_btn_radius);
background-color:var(--slider_verif_barbg);
}
._slider_bar ._slider_span{
width: var(--slider_verif_wid);
height: 100%;
position: relative;
}
._slider_btn{
position: absolute;
z-index: 3;
top: 0;
right: 0;
width: var(--slider_verif_hei);
height: 100%;
cursor: pointer;
border: 1px solid #e5e5e5;
box-sizing: border-box;
color: #666;
font-size: 1.5em;
display: flex;
justify-content: center;
align-items: center;
font-family: "iconfont";
background-color: #fff;
background-color: var(--slider_btn_bg);
border-radius: var(--slider_btn_radius);
border-width: var(--slider_btn_border_w);
border-style: var(--slider_btn_border_s);
border-color: var(--slider_btn_border_c);
}
._slider_btn::before{
content: "\\e6b5";
color:var(--slider_btn_color);
}
/* 完成样式 */
._slider_verif_._slider_verif_complete ._slider_btn{
background-color: var(--slider_btn_succBg);
}
._slider_verif_._slider_verif_complete ._slider_btn::before{
content: "\\e600";
color:var(--slider_btn_succColor);
}
`;
var style = document.createElement('style');
style.type = 'text/css';
style.id = "_slider_verif_";
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
document.head.appendChild(style);
},
// 添加 事件
addEvent() {
var _slider_btn = this._slider_verif_.querySelector("._slider_btn");
// pc,拖动事件
_slider_btn.addEventListener("mousedown", this.btnMousedown);
// 移动,触摸 拖动事件
_slider_btn.addEventListener("touchstart", this.btnTouchstart);
},
// 按钮按下事件,鼠标
btnMousedown(e) {
e.preventDefault();
// 判断是否完成
if (_this.isComplete) return;
var insertEleStrW = _this.insertEle.clientWidth;
// 点击位置
var clientX = e.clientX;
// 拖动
document.onmousemove = (e) => {
// 移动距离
var move = e.clientX - clientX;
// 判断 移动距离是否达到 最大
if (move >= insertEleStrW) {
move = insertEleStrW;
};
// 设置样式
_this._slider_bar.style.width = move + "px";
// 判断 是否完成
if (move >= insertEleStrW) {
_this.slideComplete();
btnUp();
};
};
// 松开鼠标
document.onmouseup = (e) => {
btnUp();
};
var btnUp = () => {
document.onmousemove = null;
document.onmouseup = null;
// 判断是否未完成
if (!_this.isComplete) {
// 回到原点
_this.backOrigin(_this.step);
};
btnUp = null;
};
},
// 按钮按下事件,触摸
btnTouchstart(e) {
e.preventDefault();
// 判断是否完成
if (_this.isComplete) return;
var insertEleStrW = _this.insertEle.clientWidth;
// 点击位置
var clientX = e.touches[0].clientX;
// 拖动
document.ontouchmove = (e) => {
// 移动距离
var move = e.touches[0].clientX - clientX;
// 判断 移动距离是否达到 最大
if (move >= insertEleStrW) {
move = insertEleStrW;
};
// 设置样式
_this._slider_bar.style.width = move + "px";
// 判断 是否完成
if (move >= insertEleStrW) {
_this.slideComplete();
btnUp();
};
};
// 松开鼠标
document.ontouchend = (e) => {
btnUp();
};
var btnUp = () => {
document.ontouchmove = null;
document.ontouchend = null;
// 判断是否未完成
if (!_this.isComplete) {
// 回到原点
_this.backOrigin(_this.step);
};
btnUp = null;
};
},
// 回到原点
backOrigin(step) {
var wid = this._slider_bar.clientWidth;//宽度
var btn_w = this._slider_verif_.querySelector("._slider_btn").offsetWidth;
wid = wid - step;
// 最小位置是 在 按钮宽度位置
if (wid - btn_w <= 0) wid = 0;
this._slider_bar.style.width = wid + 'px';
if (wid <= 0) {
// 可以继续滑动
this.isComplete = false;
} else {
step--;
if (step <= 8) step = 8;
setTimeout(() => {
this.backOrigin(step);
}, 2);
};
},
// 滑动完成
slideComplete() {
this.isComplete = true;
// 添加完成类
this._slider_verif_.classList.add("_slider_verif_complete");
// 修改 提示文字
this.modifyUpText(this.options.succText);
// 返回完成状态
this.options.getCompleteState(true);
},
// 修改 上层提示文案
modifyUpText(text) {
var span = this._slider_bar.querySelector("._slider_span").querySelector("span");
span.innerText = text;
},
// 销毁
destroy() {
this._slider_verif_.remove();
clearTimeout(this.resizeTimer);
},
// 重置
reset() {
this.modifyUpText(this.options.sliderText);
this.backOrigin(this.step);
// 移除完成类
this._slider_verif_.classList.remove("_slider_verif_complete");
},
// 更新样式(屏幕变化)
upStyle() {
// 获取 父级 高宽
var insertEleStrW = this.insertEle.clientWidth;
var insertEleStrH = this.insertEle.clientHeight;
console.log(insertEleStrW, insertEleStrH);
// 只需要更新 的 css变量
this._slider_verif_.style.setProperty("--slider_verif_wid", insertEleStrW + 'px');
this._slider_verif_.style.setProperty("--slider_verif_hei", insertEleStrH + 'px');
},
};
// 外部方法,单列模式
var sliderVerif = null;
var sliderVerifFunc = function (insertEleStr = "", options = {}) {
if (sliderVerif) sliderVerif.destroy();
sliderVerif = new sliderVerification(insertEleStr, options);
};
// 重置
sliderVerifFunc.prototype.reset = function () {
sliderVerif.reset();
};
// 更新样式
sliderVerifFunc.prototype.upStyle = function () {
sliderVerif.upStyle();
};
win.sliderVerif = sliderVerifFunc;
})(this);
3、页面调用:
var box = new sliderVerif("#box", {
sliderText: "请按住滑块拖动",// 滑块提示文字
succText: "验证通过",// 滑块完成提示文字
sliderTextColor: "#666",//滑块提示文字颜色
succTextColor: "#fff",//滑块完成提示文字颜色
fontSize: 1,//字体大小 数字/字符串 字符串可以带单位 ,数字默认单位 em
/**
* 盒子 样式
*/
boxStyle: {
bg: "#e5e5e5",//背景颜色 颜色名称,RGB,RGBA,16进制
barBg: "#5abc3c",// 进度条 背景颜色 颜色名称,RGB,RGBA,16进制
radius: 0,//按钮圆角 数字/字符串 字符串可以带单位,同 border-radius
borderWidth: 0,//边框宽度 数字/字符串 字符串可以带单位
borderColor: "#333",//边框颜色 颜色名称,RGB,RGBA,16进制
borderStyle: "solid",//边框样式 同 css border-style 属性值
},
/**
* 按钮 样式
*/
btnStyle: {
color: "#333",// 按钮 图标颜色 颜色名称,RGB,RGBA,16进制
succColor: "#5abc3c",//滑动完成 图标颜色 颜色名称,RGB,RGBA,16进制
bg: "#fff",//按钮背景颜色 颜色名称,RGB,RGBA,16进制
succBg: "#fff",//滑动完成 背景颜色 颜色名称,RGB,RGBA,16进制
radius: null,//按钮圆角 数字/字符串 字符串可以带单位,同 border-radius,不是数字和字符串,使用 boxStyle.radius
borderWidth: 1,//边框宽度 数字/字符串 字符串可以带单位
borderColor: "#e5e5e5",//边框颜色 颜色名称,RGB,RGBA,16进制
borderStyle: "solid",//边框样式 同 css border-style 属性值
},
// 是否监听屏幕变化,自动修改响应式样式
isResizeAutoStyle: false,
//返回状态方法
getCompleteState: (res) => {
console.log(res);
},
});
function boxRe() {
box.reset();
}
当前插件不兼容IE浏览器~
JavaScript获取指定网站状态码查询代码(2种实现方法)
标签: jquery滑块验证, sliderVerif
上面是“jquery实现滑块验证功能”的全面内容,想了解更多关于 js 内容,请继续关注web建站教程。
当前网址:https://m.ipkd.cn/webs_3820.html
声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

Nano Banana官网:只需上传图片并输入提示词,即可生成高质量图像
php如何获取文章内容(过滤html标签)