Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2024, 10:08
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Сохранение информации при переходе на другую старинцу
У меня есть вот такой скрипт

document.addEventListener('DOMContentLoaded', function () {
      // Находим все ссылки с классом anchor_link
      var links = document.querySelectorAll('.anchor_link');

      // Добавляем обработчик событий на каждую ссылку
      links.forEach(function (link) {
        link.addEventListener('click', function (event) {
          // Получаем href ссылки
          var href = this.getAttribute('href');

          // Проверяем, является ли ссылка абсолютной или относительной (переход на другую страницу)
          if (href.startsWith('#')) {
            // Отменяем стандартное поведение ссылки
            event.preventDefault();

            // Получаем ID якоря из атрибута href ссылки
            var targetId = href;
            var targetElement = document.querySelector(targetId);

            // Проверяем, существует ли элемент с данным ID
            if (targetElement) {
              // Расчитываем позицию элемента относительно верхней части документа
              var targetPosition = targetElement.getBoundingClientRect().top + window.scrollY;

              // Вычисляем новую позицию с отступом 60 пикселей
              var offsetPosition = targetPosition - 60;

              // Вызов функции для плавной прокрутки
              smoothScrollTo(offsetPosition);
            }
          } else {
            // Если это не якорная ссылка, просто переходим по адресу
            window.location.href = href;
          }
        });
      });

      function smoothScrollTo(targetPosition) {
        const startPosition = window.scrollY;
        const distance = targetPosition - startPosition;
        const duration = 500; // Длительность анимации в миллисекундах
        let startTime = null;

        function animation(currentTime) {
          if (!startTime) startTime = currentTime;
          const timeElapsed = currentTime - startTime;
          const progress = Math.min(timeElapsed / duration, 1); // Нормализуем значение от 0 до 1

          // Используем функцию easing (к примеру, easeInOutQuad)
          const easing = easeInOutQuad(progress);

          window.scrollTo(0, startPosition + distance * easing);

          if (timeElapsed < duration) {
            requestAnimationFrame(animation);
          }
        }

        // Начинаем анимацию
        requestAnimationFrame(animation);
      }

      function easeInOutQuad(t) {
        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
      }
    });


<p><a href="sample.html#a" class="anchor_link">ссылка1</a></p>
    <p><a href="sample.html#d" class="anchor_link">ссылка2</a></p>
    <p><a href="#c3" class="anchor_link">ссылка3</a></p>
    <p><a href="#d4" class="anchor_link">ссылкаd</a></p>
    <p><a href="#e5" class="anchor_link">ссылкаe</a></p>


И мне нужно что бы при переходе на другую страницу отступ от верхней границы браузера сохранялся в 60 пиксилей.

Я пробывал записывать в локам стендж и потом затирать его но не получилось по другому не понимаю как.
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2024, 16:15
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,565

Во-первых: пропиши своим ссылкам scroll-margin-top:
.anchor_link[href^="#"] {
  scroll-margin-top: 60px;
}

Возможно это решит твою проблему. Но если нет - опиши подробнее чего ты хочешь?

Чтобы при переходе скроллило к той же секции что была на предыдущей странице? Или чтобы по умолчанию любая страница открывалась проскроленной на 60px? Или ещё что?
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2024, 01:36
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Нужно что когда идет переход по ссылки с якорь (по умолчанию якорь прижмет к верхней страницы браузера) нужно что бы было проскроленный отступ в 60 пиксилей. Объясню зачем у меня блок который фиксированный в top в 60 пикселей и когда идет переход это фиксированный блок перекрывает. Делать отступ не вариант так как у меня может быть сплошной текст и нужно что бы была ссылка на конкретное слов в тексте.
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2024, 03:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,565

scroll-margin-top
как раз задаёт отступ от верхней границы браузера при скролле к якорю. Я таки тупанул, надо его, конечно, не к ссылкам применять, а к самим якорям.

<body>
<style>
.fixed {
  top: 0;
  left: 0;
  height: 60px;
  width: 100%;
  position: sticky; 

  background: #f00;
  display: flex;
  align-items: center;
  justify-content: center;
  -webkit-text-fill-color: #fff;;
}
:root {
  scroll-behavior: smooth;
}
.anchor { 
  scroll-margin-top: 60px;
}
/* 
или просто
* { 
  scroll-behavior: smooth;
  scroll-margin-top: 60px;
}
*/
</style>
<div class="fixed">
  <a href="#word">go to anchor</a>
</div>
<hr style="height:1000px" />
<span id="word" class="anchor">слово</span>
<hr style="height:1000px" />
__________________
29375, 35

Последний раз редактировалось Aetae, 24.08.2024 в 04:00.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2024, 05:15
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Aetae,
Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение значения select option при смене radio maplol123@gmail.com Общие вопросы Javascript 17 26.11.2020 01:43
Замена контента страницы при переходе с разных ссылок antipersperant Общие вопросы Javascript 2 20.05.2020 09:14
Отключить сохранение при комбинации Ctrl + S MC-XOBAHCK Общие вопросы Javascript 8 06.04.2020 08:13
Как при переходе на страницу запустить триггер в скрипте? giwuf Общие вопросы Javascript 0 07.12.2019 10:56
Непонятки при сохранение модели. XAPuTOH ExtJS 2 29.09.2016 08:36