@pwndkot

Альтернатива событию Click или как обработать двойной клик?

День добрый.

Ситуация такая, есть API для камеры,у этой API есть функционал перемещение камеры по клику на видео.
Подключается она примерно таким способом, обрабатывается событием ОнКлик (внутри видео) и уходит на обработку через jQ :
spoiler
<div class="col s12 center-align" id="videocontainer">
     <img src="" id="video" class="responsive-img" data-camid='' onclick=ptzCenter("center",this)>
</div>

В jQ я снова обрабатываю событие Клика, после чего идёт перерасчёт размеров (высота/ширина) и идёт отправка этих данных через Ajax, НОООО, т.к. 2 раза обрабатывается событие Клик,то Ajax начинает сходить сума,а точнее делать то,что от него требуется и Ajax запросы отправляются в геометрической прогрессии. (кол-во запросов на скрине за 1 клик)
spoiler
function ptzCenter(camid) {
  $('#video').on('click', function(el){
  console.log( $(this).text("test"));
    camid = $.cookie('lastcam')
    var image = $(el.currentTarget.parentElement).find('img')[0]
    hcoef = image.naturalWidth/image.clientWidth
    wcoef = image.naturalHeight/image.clientHeight
    var fx = Math.round(el.offsetX * wcoef)
    var fy = Math.round(el.offsetY * hcoef)
    var request = $.ajax({
      url:'/axisptz',
      data:'camid=' + camid + '&posx=' + fx + '&posy=' + fy + '&httpapi=1&ptzCenter=1&',
    })
   return false; // Подобное решение отмены потока Ajax запросов 
   })
  }


Скрин запросов :
spoiler
5bf799dbc7523414448623.png


Есть ли какая-то альтернатива Клику ? (mousedown не помог, помог только вызов alert`а, но это не решение,а скорее костыль) или же можно как-то адекватно прекратить Ajax запросы? Что-то аля xhr.abort(); и return false; не помогли (xhr не определен, а при return false вообще вырубает другие скрипты или я просто очень криво его выполняю)

Если кому-то важна обработка на Джанге,то вот:
spoiler
if request.GET.get('ptzCenter') == '1':
                if request.GET.get('center') and request.GET.get('fx') and request.GET.get('fy'):
                    center = request.GET.get('center')
                    x = request.GET.get('fx')
                    y - request.GET.get('fy')
                    logaction = 'Перемещение по клику'
                else:
                    fx = 0
                    fy = 0
                params = {'center': fx + fy }
                r = requests.get('http://' + camip + ptzpostfix, params=params)
                return HttpResponse('Ok')
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Выполняйте ajax запрос через debounce функцию.
UPD: А, у вас же получается слушается два события. Одно в onclick атрибуте, второе появляется при каждом клике. Почему вам не убрать атрибут onclick и не написать просто вот так, без функции

$('#video').on('click', function(el){
  console.log( $(this).text("test"));
    camid = $.cookie('lastcam')
    var image = $(el.currentTarget.parentElement).find('img')[0]
    hcoef = image.naturalWidth/image.clientWidth
    wcoef = image.naturalHeight/image.clientHeight
    var fx = Math.round(el.offsetX * wcoef)
    var fy = Math.round(el.offsetY * hcoef)
    var request = $.ajax({
      url:'/axisptz',
      data:'camid=' + camid + '&posx=' + fx + '&posy=' + fy + '&httpapi=1&ptzCenter=1&',
    })
   return false; // Подобное решение отмены потока Ajax запросов 
   })
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы