@vanillathunder

Как избежать одновременного зажатия двух кнопок мыши?

Есть счётчик и при зажатии кнопки мыши значение увеличивается, когда отпускаешь значение останавливается, но когда зажимаешь сразу 2 кнопки, события происходят одновременно и значение растут в двое быстрее. И когда отпускаешь кнопку увеличение счётчика не останавливается. Как сделать, чтобы 2 зажатые клавиши обрабатывались как одна зажатая клавиша мыши?

$(this.$el).find('.jplus-setting-vue').mousedown(function() {
                        theInterval = setInterval(function() {
                            vm.crowdfunding.goal =
                                (parseFloat(vm.crowdfunding.goal) ?parseFloat(vm.crowdfunding.goal):0) + addVelocity;
                            counter++;
                            if (addVelocity < 25) {
                                addVelocity++;
                            }

                        }, 400);
                    });
                    $(this.$el).find('.jplus-setting-vue').mouseup(function() {
                        window.clearInterval(theInterval);
                        if (counter === 0) {
                            vm.crowdfunding.goal++; 
                        }
                        counter = 0;
                        addVelocity = 1;
                    });
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@vanillathunder Автор вопроса
Исправил. Добавил проверку, чтобы только один интервал.

var theInterval = null;
                    $(this.$el).find('.jplus-setting-vue').mousedown(function() {
                        if(theInterval === null){
                            theInterval = setInterval(function() {
                                vm.crowdfunding.goal =
                                    (parseFloat(vm.crowdfunding.goal) ?parseFloat(vm.crowdfunding.goal):0) + addVelocity;
                                counter++;
                                if (addVelocity < 25) {
                                    addVelocity++;
                                }

                            }, 400);
                        }
                    });

                    $(this.$el).find('.jplus-setting-vue').mouseup(function() {
                        window.clearInterval(theInterval);
                        if (counter === 0) {
                            vm.crowdfunding.goal++; // it was just click
                        }
                        counter = 0;
                        addVelocity = 1;
                        theInterval = null;
                    });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
rework
@rework
Помог ответ? В благодарность отметь его решением
Вообще игнорируй нажатие других кнопок мыши, кроме левой, для этого нужно в объекте события проверять свойство event.which:

$(this.$el).find('.jplus-setting-vue').mousedown(function(event) {
                        if (event.which != 1) return;
                        theInterval = setInterval(function() {
                            vm.crowdfunding.goal =
                                (parseFloat(vm.crowdfunding.goal) ?parseFloat(vm.crowdfunding.goal):0) + addVelocity;
                            counter++;
                            if (addVelocity < 25) {
                                addVelocity++;
                            }

                        }, 400);
                    });
                    $(this.$el).find('.jplus-setting-vue').mouseup(function() {
                        window.clearInterval(theInterval);
                        if (counter === 0) {
                            vm.crowdfunding.goal++; 
                        }
                        counter = 0;
                        addVelocity = 1;
                    });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы