Установите scrollTop и scrollLeft без JavaScript

У меня есть вопрос о свойствах scrollTop и scrollLeft. Я хотел бы установить эти свойства в своем div без использования JavaScript (jQuery). Это возможно?

Моя проблема в том, что у меня есть программа, которая интерпретирует код HTML, а элементы div, которые я прокручивал, имеют нулевое значение, когда программа интерпретирует код. Программа не может прочитать значение scrollTop или scrollLeft. Существует HTML-тег вида:

<div scrollLeft="300" scrollTop="200"></div>

person Yetispapa    schedule 03.01.2013    source источник


Ответы (1)


Боюсь, что это невозможно только с помощью CSS/HTML.

Правка [01.05.2012] - Возможное решение

Я создал решение, которое работает в следующих браузерах:

  • Фаерфокс 4+
  • Сафари 5+
  • Хром 6+
  • Опера 11+
  • IE 10+
  • Андроид 2.3+

Это действительно немного взломано, так что посмотрите, будете ли вы его использовать или нет. :)

Небольшое пояснение

Я использовал атрибут HTML5 autofocus в поле <input>. Поскольку это сфокусирует ввод, он должен поместить его в область просмотра. Поэтому он будет прокручиваться до заданной позиции. Чтобы избавиться от выделенного контура и вообще не видеть ввод, необходимо установить некоторые стили. Но это по-прежнему заставляло Safari иметь один мигающий пиксель, поэтому я проделал трюк с диапазоном, который действует как наложение. Обратите внимание, что вы не можете просто использовать display: none, так как это не вызовет автофокус (проверено только в Safari).

Демо

Демо будет работать только в Safari и Chrome. IE и Firefox, кажется, не запускают автофокус в <iframe>.

div.outer {
  height: 100px;
  width: 100px;
  overflow: auto;
}

div.inner {
  position: relative;
  height: 500px;
  width: 500px;
}

div.inner>input {
  width: 1px;
  height: 1px;
  position: absolute;
  z-index: 0;
  top: 300px;
  left: 200px;
  border: 0;
  outline: 0;
}

div.inner>span {
  width: 1px;
  height: 1px;
  position: absolute;
  z-index: 1;
  top: 300px;
  left: 200px;
  background: white;
}
<div class="outer">
  <div class="inner">
    <input type="text" autofocus></input>
    <span></span>
  </div>
</div>

person insertusernamehere    schedule 03.01.2013
comment
Вы можете создать контейнер, который ведет себя как прокручиваемый контейнер, в то время как его родитель имеет атрибут overflow:hidden-attribute. Таким образом, вы можете легко установить поле (например, в атрибуте встроенного стиля), чтобы иметь эффект предварительной прокрутки. - person Jonathan; 17.08.2015
comment
@ xcy7e웃 Не могли бы вы создать скрипт, чтобы продемонстрировать это, или добавить свое решение в качестве возможного ответа. - person insertusernamehere; 17.08.2015
comment
любой способ предварительно прокрутить несколько элементов с помощью этой техники? (без фреймов, хотя это все равно будет работать только в webkit) - person Jayen; 12.09.2017
comment
Нет необходимости в span поверх ввода, просто установите ввод в opacity: 0 - person Trevin Avery; 10.08.2018