zoukankan      html  css  js  c++  java
  • 滑块验证码 纯js

    效果

     注意:

    图片文件夹命名为:imgs

    图片命名为:imgs + 数字 + .jpg 格式
    点击切换图片时可看着 F12 控制面板  如果没有这张图片,没有效果,

    图片是随机的,可能会提示找不到图片,正常现象

    (亲,也可以自己改变图片路径,在代码的最下面 refreshImg 函数里面)

    我是在桌面新建了一个imgs文件夹和html文件,imgs里面放的imgs0.jpg,imgs1.jpg,imgs2.jpg,imgs3.jpg,因为没有imgs4.jpg所以没效果且报错

    如果报$问题,请网上搜索 在线jquery,并修改。

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .box {
                 300px;
                padding: 20px;
                background-color: #fff;
                box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.4);
                }
    
                .imgBox {
                position: relative;
                 300px;
                overflow: hidden;
                box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.4);
                }
    
                .imgBox img {
                 100%;
                height: 250px;
                }
    
                .imgBox div {
                display: none;
                }
    
                .handle {
                display: flex;
                align-items: center;
                position: relative;
                height: 30px;
                border-radius: 20px;
                margin: 20px 0;
                padding: 4px 0 4px 70px;
                box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2) inset;
                background: #f5f5f5;
                user-select: none;
                }
    
                .text {
                opacity: 1;
                transition: opacity 0.5s ease-in-out;
                color: #aaa;
                }
    
                .swiper {
                position: absolute;
                top: -10px;
                left: 0px;
                 58px;
                height: 58px;
                border-radius: 50%;
                background-color: pink;
                box-shadow: 2px 2px 6px 0 rgba(0, 0, 0, 0.2);
                }
    
                .verify {
                position: absolute;
                left: 10px;
                 38px;
                height: 38px;
                border-radius: 5px;
                background-repeat: no-repeat;
                background-attachment: scroll;
                background-size: 300px;
                box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.4), 0 0 10px 0 rgba(90, 90, 90, 0.4);
                z-index: 10;
                }
    
                .verified {
                position: absolute;
                 38px;
                height: 38px;
                border-radius: 5px;
                background-color: rgba(0, 0, 0, 0.1);
                box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.4) inset;
                }
    
                .refreshBox {
                border-top: 1px solid #ccc;
                padding: 15px 0 0 5px;
                }
    
                .refresh {
                color: #fff;
                cursor: pointer;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
                padding: 8px 20px;
                border-radius: 20px;
                background-color: #555;
                box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.4);
                transition: all 0.5s ease-in-out;
                }
                .refresh.click {
                box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.4) inset;
                }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="imgBox">
                <div class="verify"></div>
                <div class="verified"></div>
            </div>
            <div class="handle">
                <span class="swiper"></span>
                <span class="text">拖动滑块</span>
            </div>
            <div class="refreshBox">
                <span class="refresh">点击切换图片</span>
            </div>
        </div>
    </body>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script>
            var box = $('.box'),
                imgBox = $('.imgBox'),
                handle = $('.handle'),
                swiper = $('.swiper'),
                text = $('.text'),
                verify = $('.verify'),
                verified = $('.verified'),
                refresh = $('.refresh')
    
            // 图片集合
            var imgs = []
            for (let i = 1; i < 17; i++) {
                imgs.push('' + i + i)
            }
    
            $(function () {
                // 随机添加背景图
                refreshImg()
    
                refresh.click(function () {
                    e = event || window.event
                    e.stopPropagation()
    
                    refreshImg()
                    start()
                })
    
                refresh.mousedown(function () {
                    $(this).addClass('click')
                })
                refresh.mouseup(function () {
                    $(this).removeClass('click')
                })
    
                window.onload = start()
            })
    
            function start() {
                var verImg = document.getElementsByClassName('verImg')[0]
    
                if (verImg) {
                    verImg.onload = function () {
                        // 获取图片高度
                        var imgH = this.clientHeight
                        // 随机生成坐标(图片框固定宽度为300px,高度不定)
                        var verX = 150 * (1 + Math.random()) - 38,
                            verY = imgH / 4 + Math.random() * imgH / 2
    
                        // 用户移动滑块函数
                        fnDown(verX, verY)
                    }
                }
            }
    
            function fnDown(verX, verY) {
                swiper.mousedown(function () {
                    e = event || window.event
                    e.stopPropagation()
    
                    // 30为模块宽度
                    verify.css({
                        display: 'block',
                        top: `${verY}px`,
                        'background-position': `-${verX}px -${verY}px`
                    })
                    verified.css({ display: 'block', left: `${verX}px`, top: `${verY}px` })
                    // 获取鼠标到按钮的距离
                    var disX = e.clientX - $(this).offset().left,
                        disY = e.clientY - $(this).offset().top
                    text.css('opacity', '0')
    
                    // 防止重复绑定触发多次
                    box.unbind('mousemove')
                    box.unbind('mouseup')
    
                    // 移动
                    box.bind('mousemove', function () {
                        e = event || window.event
                        fnMove(e, disX, disY)
                    })
    
                    // 释放
                    box.bind('mouseup', function () {
                        var stopL = verify.offset().left - 28
                        // 误差在2px以内则算做成功
                        if (Math.abs(stopL - verX) > 2) {
                            alert('验证失败')
                        } else {
                            alert('验证成功')
                        }
                        // 解除绑定,并将滑动模块归位
                        box.unbind('mousemove')
                        swiper.css('left', '0px')
                        verify.css('left', '10px')
                        text.css('opacity', '1')
                        box.unbind('mouseup')
                    })
                })
            }
    
            function fnMove(e, posX, posY) {
                // 这里的e是以鼠标为参考
                var l = e.clientX - posX - $(handle).offset().left,
                    winW = $(handle).width() + 29
                // 限制拖动范围只能在handle中
                if (l < 0) {
                    l = 0
                } else if (l > winW) {
                    l = winW
                }
    
                swiper.css('left', `${l}px`)
                verify.css('left', `${l + 10}px`)
            }
    
            function refreshImg() {
                // 随机生成下标
                var index = Math.round(Math.random() * 15)
                var imgH = 0
    
                verify.hide()
                verified.hide()
    
                var verImg = $('.verImg')
                if (verImg.length) {
                    verImg.attr('src', `./imgs/imgs${[index]}.jpg`) //imgs文件夹存放图片
                } else {
                    imgBox.prepend(`<img class='verImg' src="./imgs/imgs${[index]}.jpg" />`)
                }
                verify.css('background-image', `url('./imgs/imgs${[index]}.jpg')`)
            }
    </script>
    </html>
  • 相关阅读:
    AudioStreamer电话打进时崩溃
    ios中NSLog输出格式大全
    IOS Framework制作(一)
    UIButton上的文字添加阴影
    Tim Cook向员工发邮件,祝贺大家实现创纪录的季度
    ios 通讯录“写”操作大全
    AVAudioSession的Category
    IOS播放优酷视频
    iOS 设备的网页调试工具Firebug
    iOS中retain和copy的区别
  • 原文地址:https://www.cnblogs.com/queenDream/p/12760165.html
Copyright © 2011-2022 走看看