图片认证小案例

涉及的知识点:

该案例主要是利用鼠标事件来实现的,涉及鼠标按下事件、鼠标移动事件和鼠标抬起事件

思路:

  • 当鼠标在要拖动的图片上按下鼠标时,此时也就相当于开关已经打开,也就表示可以进行拖动,因此在这里需要先进行判断,是否可以拖动
  •  在鼠标拖动之前要先进行判断,是否可以拖动;在过程中需要设置临界值,以防止过界
  •  当鼠标弹起时,需要判断是否是第一次,如果是就关闭开关,之后进行验证成功与否。在开始验证前需要设置一个容错范围,也就是在该范围内,都算验证成功,否则就是验证失败

首先,先设置两个div分别用来存放两张图片,最内层的div利用绝对定位的方式将其定位到外层div的合适位置处

.div1 {
            position: relative;
            background-image: url('img/1.JPG');
            width: 847px;
            height: 519px;
        }
        
.div2 {
            position: absolute;
            top: 144px;
            background-image: url("img/2.png");
            width: 312px;
            height: 287px;
        }
<div class="div1">
        <div class="div2"></div>
</div>

大致如下:

 

 那么接下来就是实现逻辑部分:

        //获取元素
        const div1 = document.querySelector(".div1");
        const div2 = document.querySelector(".div2");

        //设置一个flag,用来表示不能拖动
        let flag = false;

        //设置一个flag,用来表示是否可以拖动,false表示不可拖动;true表示可以拖动
        let onlyOnce = true;

        div2.onmousedown = () => {
            //每次按下之前,都必须要判断能否拖动
            if (onlyOnce) {
                // 打开开关,允许图片跟随移动
                flag = true;
            }
        }

        //设置移动的边界
        div1.onmousemove = (eve) => {
            //判断开关是否打开,如果打开则表示能够跟随移动
            if (flag) {
                const mouseLeft = eve.clientX;

                //设置边界值
                if (mouseLeft < 156) {
                    mouseLeft = 156;
                }

                if (mouseLeft > 692) {
                    mouseLeft = 692;
                }
                div2.style.left = mouseLeft - 156 + 'px';
            }
        }

        //鼠标抬起时
        div2.onmouseup = () => {
            //每次抬起都需要判断是否是第一次
            if (onlyOnce) {
                //关闭开关
                flag = false;

                const divLeft = parseInt(div2.style.left);

                //判断左定位属性值范围在[244-304]之间就算验证成功
                if (divLeft >= 244 && divLeft <= 304) {
                    alert('验证成功');
                } else {
                    alert("验证失败");
                }

                //验证后则不可再拖动图片
                onlyOnce = false;
            }
        }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值