Как остановить браузер от прокрутки при выборе текста? Потенциальная ошибка браузера?
У меня возникла странная проблема с приложением, над которым я работаю... Всякий раз, когда пользователь выделяет текст в div, который был переведен на страницу немного, браузер мгновенно начнет прокрутку. Это очень сложно описать, поэтому я сделал страницу с примером, которая показывает проблему...
http://riskable.com/files/scroll_problem.html
Я также загрузил текст в pastebin для удобного просмотра (и если я когда-нибудь сниму этот URL):
http://pastebin.com/ay6LUcfP
Если вы - с помощью JavaScript - переводите() и div1 и div2 обратно в свои позиции по умолчанию, проблема не проявляется внутри div1. Он встречается только внутри div2 и только тогда, когда он находится перед пользователем (например, он был преобразован "translate()" ).
Я честно считаю, что это может быть ошибка браузера, но я не уверен, так как я не эксперт ECMAScript или DOM. Любые идеи?
EDIT: Я обновил HTML для работы как в Firefox 4+, так и в Opera 11+ (-moz-transform и -o-transform, соответственно). Я также создал новую ссылку pastebin для обновленного script (ссылка была обновлена). Проблема, похоже, не проявляется в любом из этих браузеров, поэтому, похоже, это ошибка Chrome.
EDIT 2: Я открыл отчет об ошибке для этой проблемы на сайте Chromium: http://code.google.com/p/chromium/issues/detail?id=74318
Вероятно, это ошибка в Webkit, но я дам понять людям Chromium, если это так.
Ответы
Ответ 1
FWIW. Проблема, по-видимому, является кодом браузера, ответственным за обнаружение, когда вы выбираете над предварительными границами (т.е. когда он должен прокручиваться, чтобы перейти с этим выбором) не получает обновленную позицию после перевода. Когда вы начинаете выбирать, он видит, что вы выбираете, и ваш курсор находится на половине экрана вверх от того места, где он полагает, что он должен быть, поэтому он быстро прокручивается. И наоборот, чтобы прокручивать вниз, вам нужно пойти в нижнюю часть контейнера, когда вы выбираете, где ваш pre bottom был перед translate().
Тем не менее, я, очевидно, не знаю, как его решить, но я почти уверен, что это ошибка браузера.