web建站教程
     
  1. 首页
  2. 前端UI组件库
  3. AI项目和框架
  4. AIGC工具
  5. 百度echarts
  6. 地图大全
  7. 前端知识
  8. 更多
    vuejs
    js入门
    php入门
    mysql
    wordpress
    织梦cms
    帝国cms
    git教程
    IT知识
    模板大全
    休息站
    AI应用

jquery实现滑块验证功能

749 ℃

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浏览器~

PouchDB:一款基于JavaScript 的开源NoSQL文档数据库

PC端如何实现将网站添加到桌面的功能

javascript实现复制div文本内容(实测有效)

JavaScript获取指定网站状态码查询代码(2种实现方法)

JS获取当前电脑浏览器基本信息

标签: jquery滑块验证 sliderVerif

上面是“jquery实现滑块验证功能”的全面内容,想了解更多关于 js 内容,请继续关注web建站教程。

当前网址:https://ipkd.cn/webs_3820.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

当前位置: 首页 > js
Trae:新一代免费的AI编程工具

呱呱工具箱

一款免费的在线小工具,无需下载,打开即可使用!呱呱工具箱

在线育儿补贴计算器

快来看看你到底可以领到多少补贴!生活小工具
上一篇:
下一篇:
x 打工人ai神器