![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
На странице есть див с вертикальным скроллом, допустим 200х200 пикселей. Нужно, чтобы в тот момент, когда он в фокусе (фокус передаю заранее), можно было прокручивать контент этого дива колесом мыши обычным образом, но не прокручивать саму страницу. Буду обязан за оптимальный и желательно наипростейший (надёжный) вариант решения задачи.
Спасибо. |
|||
|
||||
| Гость_12345 |
|
|||
|
Unregistered |
Затравку кода бы какую, а то писать лень.
К примеру, как Вы делали фокус на диве без щелчка мыши? По TextRange? Далее, если нет MouseOver, придётся ловить document.onscroll, возвращать назад и крутить див на ту же величину. Текста много, напишите же основу. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
А он разве не крутится? Крутится тот объект, где стоит фокус. У меня, по крайней мере
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Если IE only то можно отлавливать onmousewheel на div'е.
По моему мозилла этим не страдает, если мышь над слоем, то скролиться будет именно слой, так что вроде и кроссплатформенно может получиться. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Zeroglif |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Дружище, это я ковыряюсь с эмуляцией селектбокса. Код в рабочем варианте (он не про это), полуразобран, там всего намешано, ничего, кроме путаницы сюда этот код не внесёт. Коротко так: при клике на кнопке под ней создаётся новый див (визуально всё как у селектбокса) с нужным контентом, ему сразу передаётся фокус (div.focus()). Про фокус пишу просто как о факте, на самом деле колесу мыши это должно быть пофигу. При прокрутке дива крутится и вся страница, а не должна. Задача актуальна безотносительно к моему коду, для любого скроллируемого дива на странице.
Судя по всему, нужно диву добавить обработчик onmousewheel и писать свою функцию для колеса с одновременным запретом действия по умолчанию. Добавлено @ 16:13
Кросс не нужно, эт внутренняя задача, IE-only. !!!Ребят, не хочу отнимать ваше драгоценное время, или киньте в меня уже готовым вариантом (если уже есть в закромах), или наведите на иное, чем своя функция на onmousewheel. Специально не пишите, разрулю myself. |
||||||
|
|||||||
| Гость_12345 |
|
|||
|
Unregistered |
Aliance, а у меня всегда крутится лишь то, что под мышью, а не в фокусе. За исключением селекта, который крутится по фокусу. Разве где-то иначе?
Вот, видно решение. Надо ставить onmousewheel не только диву, но и документу, чтобы, когда мышь не над дивом, крутить его, но документ возвращать на место, если программа считает, что на нём фокус. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Проверил, ИЕ крутит див если по нему кликнуть (передать фокус), просто наведя мышь нет. Мозилла вообще никак див не крутит по мыши... странный прикол...
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
В общем, кроме своей функции ничего в голову пока не пришло. Тогда так (корявенько):
|
|||
|
||||
| Гость_12345 |
|
|||
|
Unregistered |
Sardar, у меня же не требует фокуса, крутит как я описал. Вероятно, это ещё зависит от драйвера. В моей A4Tech GreatEye WheelMouse (2-скролльной) есть 2 режима - Enhanced Dual Wheell Mode и IntelliMouse compatible, но ни один из них не приводит к результату, как у тебя.
Zeroglif, не понятен смысл эффекта. Прокрутка стала в другую сторону при наведении мыши на div. При этом, повторюсь, у меня клик или не клик по какой-либо части документа эффекта не меняет. Так что не могу уловить задачи - то ли драйвер мыши мешает, ...? |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Может и дрова виноваты. Моя мышь крутит див вне зависимости от фокуса, лишь бы курсор был над ним. Что касается прокрутки в обратную сторону, то положительная wheelDelta - это прокрутка от себя (вверх), отрицательная - к себе (вниз)... у меня как бы работает (MS Wireless IntelliMouse Explorer 2.0). |
|||
|
||||
| Гость_12345 |
|
|||
|
Unregistered |
> Моя мышь крутит див вне зависимости от фокуса, лишь бы курсор был над ним.
Правильно, только называй своими именами - у мыши не курсор, а указатель. А тебе нужно, чтобы крутилось только при фокусе (т.е. не при наведении, а после клика на div, до клика на другом месте страницы)? Не понятно, в чём проблема, если ты говоришь, что сам можешь написать. Идеи проговорены. Фокус сообщается через select() объекта TextRange. Причём, нужен не натуральный фокус (который отмечается _Курсором_ в поле ввода, а искусственный). |
|||
|
||||
| Zeroglif |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Здорово. То бишь, cursor!=курсор, а div!=див или пиши только на правильном русском, иначе я твоя не понимай? Ладно, будет указатель, не вопрос.
Если я могу что-то сам написать, из этого никак не следует, что я автоматически лишаюсь возможности вопрошать совета и проч.
Да бог с ним, с фокусом. IE так устроен, что он начинает крутить скролл слоя тогда, когда указатель мыши стоит над этим скроллом, не важно кликал я в этот слой или нет, передавал я ему фокус какими-либо способами или нет. Указатель над слоем - крутится слой. После того, как скролл слоя достигает своей верхней/нижней точки, а пользователь продолжает крутить колесо, начинает крутиться скролл уже страницы. Задача была в том, чтобы класиво придумать, как отменить скролл страницы только на тот период, пока крутится слой. Придумать-придумалось, но не ндравится. |
||||||
|
|||||||
| Гость_12345 |
|
|||
|
Unregistered |
Конечно, непонятно, когда указатель мыши курсором называют и при этом идёт речь о фокусе, который характеризуется наличием курсора ввода символов на элементе.
... Понятно, значит, надо, чтобы, доходя до верхней строки, скролл дива останавливался и была выделена верхняя строка как в селекте. Нет ничего проще! (С апломбом.) Лёгким движением мыши пишем такой код:
По другим браузерам - В Опере 7.54 это не работает (в 8-й должно), но обратил внимание, что она начинает крутить слой именно по фокусу на нём, т.е. после клика. (Она вообще кривовато кручение колеса мыши воспринимает.) |
|||
|
||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Как я понял, Zeroglif хотел следующего эффекта:
|
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Спасибо, интересно.
Суть вы поняли совершенно правильно, идеальным вариантом было бы именно отловить нижнюю и верхнюю точку скролла и в этот момент запретить прокрутку страницы, не эмулируя скролл дива искусственно. Но, к сожалению, я не знаю, как определить эти точки. Ваш вариант, как принцип, понятен, но не подходит... |
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |