定时器的应用之按键移动控制卡顿问题

上下左右按键事件

在按下键盘上下左右键时,能使div对应移动,不用定时器时会出现开始的卡顿情况,为了解决这个问题,加入定时器来控制div的移动速度。

在这里<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>键盘事件</title>
    <style>
        #box1{
            width:100px;
            height:100px;
            background-color:pink;
            position:absolute;

        }
    </style>
    <script>
        window.onload = function(){
            /*
            按下键盘中的上下左右键移动div元素的对象

            */
            var speed = 10;
            var dir = 0;
            /*设置一个定时器来控制div移动速度 
            当键盘按下一直不放手时,div会按照定时器设置的时间间隔进行移动
            而速度的作用是在执行的时候移动相应的位置
            
             */
            setInterval(function(){
                //alert(event.keyCode);
                switch(dir){
                    case 37://向左,left值减小
                        box1.style.left = box1.offsetLeft - speed + 'px';
                        break;

                    case 38://向上,top值减小
                        box1.style.top = box1.offsetTop - speed + 'px';
                        break;

                    case 39://向右,left值增加
                        box1.style.left = box1.offsetLeft + speed + 'px';
                        break;

                    case 40://向下,top值增加
                        box1.style.top= box1.offsetTop + speed + 'px';
                        break;
                }
            },100);

            var box1 = document.getElementById('box1');
            document.onkeydown = function(event){
                event = event || window.event;

                //当用户按了ctrl以后,速度加快
                if(event.ctrlKey){
                    speed = 50;
                }else{
                    speed = 10;
                }

                //使dir等于按键的值
                dir = event.keyCode;
            };

            //按键松开时,div不在移动
            document.onkeyup = function(){
                //设置方向为0
                dir = 0;
            };
        };
    </script>
</head>
<body>
    <div id='box1'></div>
</body>
</html>插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值