Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Элемент не должен теряться (https://javascript.ru/forum/jquery/67083-ehlement-ne-dolzhen-teryatsya.html)

daslex 27.01.2017 19:13

Элемент не должен теряться
 
У меня была задача со спойлерами.
Решение которой здесь: http://javascript.ru/forum/jquery/67...dgruzkojj.html

В показанном решении есть небольшой недостаток. Решение само, безусловно, замечательное.

Дело в том, что раскрытый спойлер может теряться: его может быть не видно на экране, а чтобы увидеть такую "потеряшку", нужно выполнять прокрутку. Нажал на спойлер, а он убежал за область видимости экрана.

Т. е. не "раскрыл - увидел", а "раскрыл - прокрутил к - увидел". Лишнее действие.

Хотелось бы избежать лишней прокрутки. Как сделать так, чтобы лишнего действия (прокрутки) избежать?

daslex 27.01.2017 19:14

Это происходит, если спойлеров много, а внутри них достаточно много текста.

рони 27.01.2017 19:34

daslex,
Цитата:

Сообщение от рони
daslex,
вы не пробовали сделать так: форум - поиск - открывашка - и выбрать из 300 вариантов


daslex 27.01.2017 19:35

Знать бы, что искать ещё.

daslex 27.01.2017 19:39

Ноль толку.
http://javascript.ru/forum/misc/6206...p-sverkhu.html
http://javascript.ru/forum/misc/6198...ischezaet.html
http://javascript.ru/forum/dom-windo...d-k-bloku.html
http://javascript.ru/forum/dom-windo...krollinga.html

И т. д.

рони 27.01.2017 19:46

daslex,
Открывашка 257 со скролингом к заголовку отрытого блока

daslex 27.01.2017 19:57

Возможно, оно.
Как тот код переправить к своему варианту я не знаю...

рони 27.01.2017 20:10

daslex,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
 .spoiler_body {
  display: none;
}
.active{
  display: block;
}
  body{
    height:  2000px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $(".spoiler_head").click(function() {
        var a = $(this).next(".spoiler_body");
        $(".spoiler_body").not(a.toggleClass("active")).removeClass("active");
        a.is(".active") && a[0].scrollIntoView();
    })
});
  </script>
</head>

<body>
<div class="spoiler_head">Спойлер №1 (кликните для открытия/закрытия)</div>
<div class="spoiler_body">Текст спойлера 1</div>
<div class="spoiler_head">Спойлер №2 (кликните для открытия/закрытия)</div>
<div class="spoiler_body">Текст спойлера 2</div>
<div class="spoiler_head">Спойлер №3 (кликните для открытия/закрытия)</div>
<div class="spoiler_body">Текст спойлера 3</div>
<div class="spoiler_head">Спойлер №4 (кликните для открытия/закрытия)</div>
<div class="spoiler_body">Текст спойлера 4</div>
</body>
</html>

daslex 27.01.2017 20:23

Спасибо.
Можно немного это изменить и делать мгновенный скроллинг?

Мне не нужно, чтобы видно было, как страница прокручивается.

рони 27.01.2017 20:38

daslex,
смотрите код выше снова


Часовой пояс GMT +3, время: 07:10.