прокрутка к элементу



  • прочитал в встроенном мануале, что действия с элементом подразумевающие шевеление мыши делают прокрутку к этому элементу, как это здорово, но избавится от костылей вроде скрол(0,0) пред таким действие нельзя, так как такой скрол совсем не учитывает что по одним относительным окна координатам могут оказаться несколько элементов и по взаимодействовать выйдет только с тем что расположен повыше, то есть с тем у которого z-index больше, т.е. тот который наверное в DOM раньше или когда он явно определен.
    при прокрутке к элементу от начала страницы такой проблемы обычно не возникает, единственная проблема если на странице очень глубокий подвал, тогда элемент к которому делается прокрутка возможно может быть этим подвалом перекрыта,
    а вот при прокрутке к элементу вверх вероятнее всего элемент окажется перекрыт закрепленной шапкой соответственно действие на нем будет не будет, точнее даже если элемент примерно попадает в видимое окно браузера, но при этом перекрыт чем либо у чего z-index побольше то быть беде.
    прокрутка к началу странице перед прокруткой к элементу не очень похожа на пользователя из мяса, да и не будет универсальным решением.

    Мой костыль, №1 пред прокруткой запоминать текущей скролл, если после прокрутки то что ожидалось не произощло, т.е. допустим я желал ввести в поле текст, если в поле текст не введен, вычисляем текущий скролл определяем вверх был скорол или вниз, скролим в туже сторону допустим на (document.body.offsetHeight / 3) и джампаем на перед скроллом к элементу. НО тут какие дела, скорее всего мы перейдем по какой нибудь ссылке, history.back() конечно, но это еще одно условие и совсем не хорошо.(НО это работать не будет, так как проблема в том что скрола не происходит вовсе)

    №2 кастомный сколл к элементу который грарантировано помещает геометрический центр элемента в центр видимой части страницы, но тоже какой-то странноватый получается пользователь, да и какая-нибудь балда может и посредине страницы появиться

    №3 пока думаю, но пока идея такая, мне же нужно повзаимодествовать с элементом например кликнуть его мышью, если я смогу на него кликнуть мышью то и текст смогу ввести и все остальные дела, от сюда если взять костыль №1 и после прокрутки к элементу не делать на нем действие, а поставить обработчик событий на клик переопределив дефолтный клик чтобы настоящего клика не происходила и в обработчике сравнить event.target с элементом по которому я хотел кликнуть и если он не он как и в костыле №1 прокручивать впринципе в любую случайную сторону и повторять со скрола и проверки, а если он это он то снимать обработчик и делать действие - то это могло бы решить проблему, эээ реализации полной у меня пока нет и мы все еще можем кликнуть не по тому элементу из за гравитации и дивиации, так что вероятно нужно докручивать на не меннее отклонение*(2|3 может и четыре), так что тоже не 100%

    № НЕ_НОМЕР можно поменять элементу который хочем повзаимодействовать style.zIndex = "Мильен" а после действия вернуть все взад, но это не наш метод нам нужно побольше з..ся

    суть предложение такая сделать дефолтный скролл к элементу таким чтобы элемент после скролла оказался в видимой части окна и желательно случайной а не средине и чтобы после скролла элемент не был перекрыт другим элементом.

    сейчас же это работает так - если элемент никаким углом не попадает в окно браузера то центр элемента в центр окна браузера, как я понял, а если какой-то угол в окно браузера залазит прокрутка вообще не происходит. и если в тех же координатах образуется другой элемент с z-index более то это все равно.


Log in to reply