原生JS手機(jī)解鎖與自動鎖特效

1.拖動滑動距離不超過一半松手,自動滑回初始位置
2.拖動滑塊到終點會解鎖让网,滑動距離超過一半后松手,會自動滑動到終點师痕,然后解鎖屏幕
3.解鎖屏幕后溃睹,如果不操作,一定時間后會休眠自動上鎖胰坟,休眠時間可手動設(shè)置
效果:

手機(jī)解鎖與自動鎖特效

<!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設(shè)置休眠時間因篇,自動上鎖:單位秒
        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() {
            // 設(shè)置滑動臨界點
            criticalPoint = (lock.offsetWidth - slider.offsetWidth) / 2;
            slider.addEventListener("mousedown", mouseHandler);
            // 解鎖后鼠標(biāo)移動,按下都會重置休眠時間
            iPhone.addEventListener("mousemove",resetTime);
            iPhone.addEventListener("mousedown",resetTime);
        }
        // 解鎖函數(shù)
        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;          
        }
        // 自動鎖函數(shù)
        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)
            }
        }
        //緩動函數(shù)
        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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笔横,一起剝皮案震驚了整個濱河市竞滓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吹缔,老刑警劉巖虽界,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涛菠,居然都是意外死亡莉御,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門俗冻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來礁叔,“玉大人,你說我怎么就攤上這事迄薄±殴兀” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涣易。 經(jīng)常有香客問我画机,道長,這世上最難降的妖魔是什么新症? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任步氏,我火速辦了婚禮,結(jié)果婚禮上徒爹,老公的妹妹穿的比我還像新娘荚醒。我一直安慰自己,他們只是感情好隆嗅,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布界阁。 她就那樣靜靜地躺著,像睡著了一般胖喳。 火紅的嫁衣襯著肌膚如雪泡躯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天丽焊,我揣著相機(jī)與錄音精续,去河邊找鬼。 笑死粹懒,一個胖子當(dāng)著我的面吹牛重付,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凫乖,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼确垫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帽芽?” 一聲冷哼從身側(cè)響起删掀,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎导街,沒想到半個月后披泪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡搬瑰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年款票,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泽论。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡艾少,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翼悴,到底是詐尸還是另有隱情缚够,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站谍椅,受9級特大地震影響误堡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雏吭,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一锁施、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧思恐,春花似錦、人聲如沸膊毁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婚温。三九已至描焰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栅螟,已是汗流浹背荆秦。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留力图,地道東北人步绸。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像吃媒,于是被迫代替她去往敵國和親瓤介。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361