D3 использует свойство ontouchstart
для обнаружения функции, то есть прослушиватели событий касания присоединяются только при наличии этого свойства. Из-за изменений в Chrome v70 этот механизм обнаружения в D3 нарушен.
ontouch * API по умолчанию отключены на рабочем столе
Во избежание путаницы при обнаружении функции касания элементы ontouch * на window
, document
и element
по умолчанию отключены на настольном компьютере (Mac, Windows, Linux, ChromeOS). Обратите внимание, что это не отключает касания, и использование, такое как addEventListener("touchstart", ...)
, не затрагивается.
Related: Отключить устаревшие API сенсорных событий на рабочем столе
Ваши ноутбуки под управлением Windows, скорее всего, обнаруживаются как настольные устройства, а не мобильные устройства. Следовательно, на них влияют эти изменения в Chrome v70, в результате которых прослушиватели событий касания больше не регистрируются.
Об этой проблеме ранее сообщалось как о проблеме в модуле перетаскивания d3: # 47 Предстоящие изменения обнаружения касаний в настольном Chrome . Когда я прокомментировал этот вопрос, предоставив ссылку на этот вопрос, к счастью, Майк Босток ответил в течение часа. Более того, существует простое решение проблемы: вы можете использовать drag.touchable(detector)
, чтобы контролировать, когда применять приемники событий касания, переопределяющие поведение по умолчанию:
Прослушиватели событий касания регистрируются только в том случае, если детектор возвращает истину для соответствующего элемента при применении режима перетаскивания.
Как подсказал Майк drag.touchable(navigator.maxTouchPoints)
кажется хорошим кандидатом. Ядерная опция drag.touchable(true)
обеспечит применение слушателей сенсорных событий в любом случае.