美文网首页
原生JS手机解锁与自动锁特效

原生JS手机解锁与自动锁特效

作者: 幸之石 | 来源:发表于2020-06-08 23:20 被阅读0次

1.拖动滑动距离不超过一半松手,自动滑回初始位置
2.拖动滑块到终点会解锁,滑动距离超过一半后松手,会自动滑动到终点,然后解锁屏幕
3.解锁屏幕后,如果不操作,一定时间后会休眠自动上锁,休眠时间可手动设置
效果:

手机解锁与自动锁特效
<!DOCTYPE html>
<html>
<meta charset="utf-8" />
<title>iPhoneLock</title>
<style type="text/css">
    #iphone {
        position: relative;
        width: 426px;
        height: 640px;
        margin: 10px auto;
        background: url(iphone.jpg) no-repeat;
    }
    #lock {
        position: absolute;
        left: 50%;
        bottom: 33px;
        width: 358px;
        height: 62px;
        margin-left: -179px;
    }
    #lock span {
        position: absolute;
        width: 93px;
        height: 62px;
        cursor: pointer;
        background: url(unlock_btn.jpg) no-repeat;
    }
    #iphone img{
        opacity: 0;
        display: none;
    }
</style>
</head>
<body>
    <div id="iphone">
        <img src="iphone2.jpg" alt="">
        <div id="lock"><span></span></div>
    </div>
    <script>
        var criticalPoint,autoSleep;
        // TIME设置休眠时间,自动上锁:单位秒
        const TIME=3;
        var time=TIME;
        var iPhone = document.querySelector("#iphone");
        var lock = document.querySelector("#lock");
        var slider = document.querySelector("#lock").firstElementChild;
        var img=document.querySelector("#iphone img");
        // 初始化
        init();
        function init() {
            // 设置滑动临界点
            criticalPoint = (lock.offsetWidth - slider.offsetWidth) / 2;
            slider.addEventListener("mousedown", mouseHandler);
            // 解锁后鼠标移动,按下都会重置休眠时间
            iPhone.addEventListener("mousemove",resetTime);
            iPhone.addEventListener("mousedown",resetTime);
        }
        // 解锁函数
        function unlock() {     
            if(slider.offsetLeft===criticalPoint*2){
                img.style.display="block";
                img.style.opacity="1";
                slider.style.display="none";
                autoSleep=setInterval(autoLock,1000);
            }           
        }
        // 重置自动锁定时间
        function resetTime(){
            time=TIME;          
        }
        // 自动锁函数
        function autoLock(e) {
            time--;
            if(time<0){
                img.style.display="none";
                img.style.opacity="0";
                slider.style.display="block";
                slider.style.left=0;
                clearInterval(autoSleep);
            }   
        }
        // 自动滑动
        function autoMove() {
            if (slider.offsetLeft <=criticalPoint){
                animate(slider,0);
            }else if(slider.offsetLeft>criticalPoint){
                animate(slider,criticalPoint*2,unlock);             
            }   
            }
        // 拖拽
        function mouseHandler(e) {
            if (e.type === "mousedown") {
                e.preventDefault();
                document.div = e.target;
                document.offset = { x: e.offsetX, y: e.offsetY };
                document.addEventListener("mousemove", mouseHandler)
                document.addEventListener("mouseup", mouseHandler)
            } else if (e.type === "mousemove") {
                var sliderLeft = e.clientX - lock.offsetLeft - iPhone.offsetLeft - document.offset.x
                if (sliderLeft <= 0) {
                    sliderLeft = 0;
                } else if (sliderLeft >= criticalPoint*2) {
                    sliderLeft = criticalPoint*2;
                }
                document.div.style.left = sliderLeft + "px";
            } else if (e.type === "mouseup") {
                autoMove();
                document.removeEventListener("mousemove", mouseHandler)
                document.removeEventListener("mouseup", mouseHandler)
            }
        }
        //缓动函数
        function animate(dom, target, fn) {
            clearInterval(dom.timer);
            dom.timer = setInterval(function () {
                var current = dom.offsetLeft;
                var speed = target > current ? Math.ceil((target - current) / 10) : Math.floor((target - current) / 10);
                var next = speed + current;
                if (next == target) {
                    dom.style.left = target + "px"; 
                    clearInterval(dom.timer)            
                    fn && fn()      
                } else {
                    dom.style.left = next + "px";
                }
            }, 1000 / 60)
        }
    </script>
</body>

</html>

相关文章

  • 原生JS手机解锁与自动锁特效

    1.拖动滑动距离不超过一半松手,自动滑回初始位置2.拖动滑块到终点会解锁,滑动距离超过一半后松手,会自动滑动到终点...

  • Activity提权

    监控手机的锁屏状态,当手机屏幕锁屏是启动一个一像素的Activity,在用户解锁时再将Activity解锁掉,从而...

  • 焦点日记坚持分享第88天(20190422)

    戒掉游戏的第一天。时常拿起手机,解锁,锁屏;解锁,锁屏…… 手机也没有响,我也没啥东西需要查看,就是这...

  • 教程篇 | 手机刷机第一步——解除BL锁

    大家想必都听过手机解锁,当然,这个解锁的意思不是解屏幕锁哈。 那什么是bl锁?解锁了有什么用? 今天就出一期解锁教...

  • android横屏时,解锁屏幕程序自动由竖屛转横屏崩溃的问题

    项目中要用到横屏,所以在mainfast的Activity标签下做如下设置 过后,手机锁屏,然后解锁时,屏幕在自动...

  • 文字特效

    18种基于anime.js的文字动画特效效果演示CSS3文字烟雾散开动画特效canvas+原生js实现立体式文字变...

  • 点亮,解锁,锁屏,点亮,解锁,锁屏,末一遍又一遍的把弄着手机,好像随时会有什么发生,但每次锁屏后,又把手机丢到一边...

  • 原来R17光感屏幕指纹技术这么厉害?0.41s瞬间解锁,惹不起!

    早在功能机时代,手机还是采用键盘锁的形式锁定手机,解锁方式是快捷键组合,而到了智能机时代,密码解锁和图案解锁成为安...

  • 锁与解锁

    不要问我从哪里来 我的故乡在远方 为什么流浪 流浪远方流浪 为了天空飞翔的小鸟 为了山间轻流的小溪 为了宽阔的草原...

  • 20、jQuery 事件机制

    20、jQuery 事件机制 原生js事件与jQuery事件: (1)用原生的js给div注册事件 原生js注册相...

网友评论

      本文标题:原生JS手机解锁与自动锁特效

      本文链接:https://www.haomeiwen.com/subject/aixjtktx.html