Как реализовать нажатие + удерживание (долгое нажатие) на карте Leaflet? - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь создать событие касания + удержания, чтобы создать новое местоположение маркера (событие касания + удержания предназначено только для мобильных приложений);эти обработчики событий не работают должным образом (происходит некоторое переопределение)

Я попытался использовать map.on ('touchstart' ...), map.on ('mousedown' ...) идругие варианты, но код события срабатывает только после завершения касания или поднятия мышью.

me.mapLibObj.on( 'touchstart', function(e) 
{
    if ( ! me.mapTapHoldInterval )
    {
        me.mapTapHoldInterval = setInterval( function() {

            me.mapDownIntvCounter += 1

            if ( me.mapDownIntvCounter > 20 )
            {
                me.defaultCoordinatePoint = [ e.latlng.lat,e.latlng.lng ];
                me.createMyCoordinateMarker( true );

                clearInterval( me.mapTapHoldInterval );
            }

        }, 100 )
    }

} );

me.mapLibObj.on( 'touchend', function(e) 
{
    if ( me.mapTapHoldInterval )
    {
        clearInterval( me.mapTapHoldInterval );
    }
} );

1 Ответ

0 голосов
/ 03 июня 2019

Почему вы используете mapDownIntvCounter?

Этого должно быть достаточно (используйте тайм-аут, потому что вы, вероятно, захотите запустить его только один раз)

var mapTapHoldTimeout ;

map.on('touchstart', function() {
   mapTapHoldTimeout = setTimeout(function(){ alert('Touched for 500ms'), 500);
});

//clear interval on touchend or touchmove (or you can calculate distance on touchmove to keep some tolerance)
map.on('touchend,touchmove', function() {
   if ( mapTapHoldTimeout ) {
      clearTimeout(mapTapHoldTimeout );
   }
});
...