SetInterval循环对我来说比较混乱

时间:2015-07-23 20:44:05

标签: javascript html css angularjs

HTML

<div id="backspace" ng-click="deleteString(''); decrementCursor();">

JS

<script>
    $scope.deleteString = function() {
        if($scope.cursorPosVal > 0){
            //$scope.name = $scope.name - letter;
            $scope.name = [$scope.name.slice(0, $scope.cursorPosVal - 1) + $scope.name.slice($scope.cursorPosVal)].join('');
            console.log($scope.name);
            setTimeout(function(){ setCaretPosition("inputBox", $scope.cursorPosVal); }, 30);
        } else {
            $scope.cursorPosVal = 1;
        }
    };
</script>

我正在设计一个屏幕触摸屏键盘。这是我的退格键。我将这样做,以便当您单击并按住退格按钮时,它会自动开始删除字符。我不知道从哪里开始创建setInterval,我知道setInterval正是我需要在这里使用的。

2 个答案:

答案 0 :(得分:3)

如果我没有错,你想要按住按钮时,一个功能会重复。

你正确使用setInterval()。但是,您管理事件的方式是错误的。

看看这个小提琴(这不是你的代码,但一个简单的例子是最好的理解方式):

http://jsfiddle.net/daq9atdd/1/

$(function(){
    var interval = null;

    $('#myButton').mousedown(function(){
        interval = setInterval(function(){
            console.log('Hello !');
        }, 250);
    });

    $('#myButton').mouseup(function(){
        clearInterval(interval);
    });
});

我按下按钮时启动间隔,存储它,并在释放按钮时将其清除。

答案 1 :(得分:2)

您对setInterval非常肯定。

如果浏览器由于某种原因(例如某些后台任务)暂时挂起,setInterval将继续排队退格调用,直到它有一些CPU时间。这意味着用户可能看不到任何更改并保留退格时间超过需要的时间,然后看到当浏览器恢复正常时,一大堆字符突然消失。

因此,通过在每次通话后设置超时,您确保用户不会删除超出需要的字符数。如果目标是改善用户体验,那么可能很重要。

Example implementation with AngularJS directives and setTimeout

另见: