без прокрутки и без щелчка Ctrl и работать на мобильном телефоне - PullRequest
0 голосов
/ 25 мая 2020

Моя проблема очень похожа на описанную здесь и на которую «дан ответ»: { ссылка }

Я хотел бы иметь возможность щелкать несколько элементов без необходимости CTRL, а также без него прокрутка вверх, но кажется, что Chrome Mobile (android) по-прежнему видит, что мышь опущена (хотя мыши не задействованы), а затем параметры не отображаются из-за preventDefaults, например: Select default operation on Chrome Android

Как лучше всего go исправить это?

вот jsfiddle, если он помогает: https://jsfiddle.net/95ntdrjc/

Нет JQuery пожалуйста.

const selectElem = document.querySelector('select');
selectElem.onmousedown = function(e) {
  e.preventDefault();
  const st = this.scrollTop;
  e.target.selected = !e.target.selected;
  setTimeout(() => this.scrollTop = st, 0);
  this.focus();
};

selectElem.onmousemove = function(e) {
  e.preventDefault();
};
<select multiple>
  <option>One</option>
  <option>Two</option>
  <option>Three</option>
</select>

1 Ответ

0 голосов
/ 25 мая 2020

Решено с помощью очень простого исправления!

selectElem.ontouchstart = function() {selectElem.onmousedown = null;};

При touchStart запускаются следующие события:

  • touchstart
  • Ноль или более событий touchmove в зависимости от при движении пальца (-ов)
  • touchend
  • mousemove
  • mousedown
  • mouseup
  • click

https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Supporting_both_TouchEvent_and_MouseEvent#Event_order

Это аннулирует то, что происходит во время процесса mousedown, поэтому мобильный телефон может продолжать работать в обычном режиме, в то время как на рабочем столе есть версия, которая не прокручивается и не требует CTRL для выберите несколько.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...