javascript - 头像移动不流畅

标签 javascript jquery html

使用左右箭头键,我应该能够左右移动头像。 但是,它运行起来并不流畅,因为它的移动方式如下:按住箭头键时走-停-走-停。

参见 fiddle : https://jsfiddle.net/zk45xgnd/2/

html:

<div id='avtr'></div>

CSS:

#avtr {
  position:absolute;
  height:50px;
  width:50px;
  background-color:#f00;
}

j查询:

var allowedToWalk = false, allowedToWalkTime = true;
var percentage = 1;
var maxWidth = 1000;
    $(window).keydown(function(e) {

        if(e.which == 39) {
            //move to right
            allowedToWalk = true;
            avatarMoveRight();

        }
        if(e.which == 37) {
            //move to left
            allowedToWalk = true;
            avatarMoveLeft();

        }
    }).keyup(function() {
        allowedToWalk = false;
    });

    function avatarMoveRight() {
        if(allowedToWalk != false && allowedToWalkTime != false) {
            var pos = $("#avtr").css('left');
            pos = pos.replace('px', '');
            pos = pos - 0;
            if((pos - 40) < (percentage * maxWidth)) {
                allowedToWalkTime = false;
                $("#avtr").animate({left: '+=40'}, 150);
                setTimeout(function() {allowedToWalkTime = true;},150);
            }

        }
    }

    function avatarMoveLeft() {
        if(allowedToWalk != false && allowedToWalkTime != false) {
            var pos = $("#avtr").css('left');
            pos = pos.replace('px', '');
            pos = pos - 0;
            if((pos - 4) > 0) {
                allowedToWalkTime = false;
                $("#avtr").animate({left: '-=40'}, 150);
                setTimeout(function() {allowedToWalkTime = true;},150);
            }


        }
    }

如何让它在按住方向键时流畅运行?

@adam A 的解决方案 https://jsfiddle.net/zk45xgnd/3/

最佳答案

这是更新后的代码,具有较低的值和移动之间的等待时间,这使它的动画更加流畅。但是,我建议查看 Phaser 的 GSAP 动画库以获得一些非常高级的东西。

var allowedToWalk = false, allowedToWalkTime = true;
var percentage = 1;
var maxWidth = 1000;
    $(window).keydown(function(e) {

        if(e.which == 39) {
            //move to right
            allowedToWalk = true;
            avatarMoveRight();

        }
        if(e.which == 37) {
            //move to left
            allowedToWalk = true;
            avatarMoveLeft();

        }
    }).keyup(function() {
        allowedToWalk = false;
    });

    function avatarMoveRight() {
        if(allowedToWalk != false && allowedToWalkTime != false) {
            var pos = $("#avtr").css('left');
            pos = pos.replace('px', '');
            pos = pos - 0;
            if((pos - 40) < (percentage * maxWidth)) {
                allowedToWalkTime = false;
                $("#avtr").animate({left: '+=5'}, 5);
                setTimeout(function() {allowedToWalkTime = true;},5);
            }

        }
    }

    function avatarMoveLeft() {
        if(allowedToWalk != false && allowedToWalkTime != false) {
            var pos = $("#avtr").css('left');
            pos = pos.replace('px', '');
            pos = pos - 0;
            if((pos - 4) > 0) {
                allowedToWalkTime = false;
                $("#avtr").animate({left: '-=5'}, 5);
                setTimeout(function() {allowedToWalkTime = true;},5);
            }


        }
    }

关于javascript - 头像移动不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45512188/

相关文章:

javascript - 空字符串检查评估错误

javascript - 使用 jQuery 获取所选选项的文本

javascript - 当 Angular 具有 'finished' 时运行 JavaScript 函数

jquery - 如何在 jQuery 中分割字符串并获取最后一个匹配项?

javascript - 单击 esc 按钮时,不应关闭甜蜜警报

javascript - 背景图像放大使用-webkit?

javascript 添加 aria 属性

jquery - 根据 URL 更改元素类名称

html - 图像悬停样式无法实现

javascript - 通过 ID 而非名称表单输入值