Отключить лупу для выделения текста при удержании касания в Mobile Safari/Webkit

У меня есть некоторые элементы на моем веб-сайте iPhone, которые не содержат текста, но требуют, чтобы пользователь нажимал и удерживал их (DIV). Это вызывает появление цикла выделения/редактирования текста/курсора, что действительно отвлекает.

Я знаю, что существует правило CSS для удаления черного ящика, который появляется на интерактивных элементах при прикосновении к ним. Есть ли что-нибудь подобное, чтобы отключить лупу текста?


person 3n.    schedule 28.05.2009    source источник


Ответы (6)


Только что получил ответ от службы поддержки Центра разработчиков. Мне нужно было добавить это правило CSS:

-webkit-user-select: none;
person 3n.    schedule 29.05.2009
comment
Не работая в приложении Phonegap, я применил это к каждому элементу div в своем html. - person Mohammad Ashfaq; 26.11.2014
comment
Работа в Chrome для iPhone, что мне было нужно (FullCalendar по умолчанию longPressDelay также выбирал части календаря). - person FiddlingAway; 31.05.2021

Используйте эти коды CSS

-webkit-touch-callout: none;
-webkit-user-select: none; /* Disable selection/copy in UIWebView */
person vitralyoz    schedule 06.11.2014

Добавьте это в CSS

body {
-webkit-touch-callout: none;                /* prevent callout to copy image, etc when tap to hold */
-webkit-text-size-adjust: none;             /* prevent webkit from resizing text to fit */
-webkit-user-select: none;                  /* prevent copy paste, to allow, change 'none' to 'text' */}
person Pham Van Vung    schedule 03.02.2017

Это также полезно для защиты содержимого, которое вы не хотите копировать или сохранять, например изображения:

#yourdiv img {-webkit-touch-callout: none; }
person Jay from BKK    schedule 08.12.2009
comment
Я надеюсь, что под защитой вы имеете в виду создание немного более громоздкого копирования. - person alex; 10.01.2011

Это решило это для меня в JS:

document.getElementsByTagName("body")[0].addEventListener("touchstart",
 function(e) { e.returnValue = false });

Кажется, он обходит все, что есть в ОС, чтобы поймать прикосновение.

person andrwct    schedule 07.03.2016
comment
это, казалось, отключило любые события «щелчка», которые я установил - person ScottieMc; 24.03.2016
comment
Чтобы получить событие клика, альтернативой может быть вызов/запуск события клика даже обработчиком touchStart. - person Cédric Guillemette; 20.09.2016

Я узнал об этом, когда пробовал сам. Прежде всего, вы должны добавить это правило к охватывающему элементу:

-webkit-user-select: none;

Но этого самого по себе на iPhone недостаточно. Оказывается, увеличительное стекло все еще может появиться, потому что, например, родительский элемент примет выделение, или просто потому, что так хочется.

Однако затем я обнаружил кое-что интересное: если ваш элемент добавляет обработчик touchend и click к элементу, то Safari от Apple, наконец, избегает раздражающего пути кода, вызывающего появление увеличительного стекла, вероятно, понимая, что этот элемент предназначен для некоторого взаимодействия с пользовательским интерфейсом. и не выделяя текст. Не менее замечательно то, что если вы сделаете это для элементов в верхней части экрана, это также отменит отображение навигации в ландшафтном режиме! Однако не уверен, как отменить появление навигации при нажатии на элементы внизу, есть ли у кого-нибудь решение для этого?

person Gregory Magarshak    schedule 10.09.2014
comment
Потрясающее исследование. Это распространенная проблема в течение достаточно долгого времени. Кажется, некоторые люди нашли решение . Но это не решение при использовании только javascript/css. - person domino_katrino; 11.12.2015
comment
Отличное исследование - но, к сожалению, оно не работает внутри contentEditable - если только я что-то не пропустил. - person Slbox; 29.04.2021