Vue.js и переходы между страницами | by Vasilii Smirnov

3 min read

·

Dec 17, 2018

Существует много примеров, готовых решений и просто, в целом, всем и так понятно, как работает transition в Vue.js. Но, как только я решил сделать переход на другую страницу не через opacity, а что посложнее, я столкнулся с проблемой.

Точнее, с двумя проблемами:

  1. Анимация отыгрывала на 1 странице, потом был переход, и начиналась следующая анимация.
  2. Я не мог запустить 2 анимации одновременно.

Небольшое отступление, для анимации я использовал библиотеку TweenMax, она крутая и простая.

Что в итоге я хотел получить? Вот это:

Это переход на дочернюю страницу и обратно. Но, на самом деле, не важно, дочерняя это страница, или любая другая, переход будет работать в любом случае.

Я мог бы долго описывать как долго я искал информацию в интернете, как читал документацию к Vue Router и transitions, сколько разных способов я испробовали прочее не интересное говно. Лучше сразу перейти к решению, не правда ли?

Итогом моих потных поисков и чтения документации стало осознание того, что мне нужно использовать transition как объект, и описывать его прямо в компоненте страницы. И использовать хуки внутри этого transition.

Можно вынести в отдельный компонент и импортировать, да-да, но мне так удобнее и нагляднее, тем более, проект не большой.

Вот так:

Так, что у нас тут, name это просто имя нашего transition, mode вот это уже интереснее. Те, кто делал хоть какую-то анимацию на Vue.js, те знают, что есть несколько режимов перехода, in-out и out-in.
Из документации:

  • in-out: Сначала появляется новый элемент, и только после этого исчезает старый.
  • out-in: Сначала исчезает старый элемент, и только после этого появляется новый.

Ага, нам нужен in-out, потому что я хочу сделать анимацию одновременно на 2 страницах.

css в значении false, потому что переход осуществляется с помощью JavaScript. В этом случае Vue не будет стараться определить наличие CSS для анимации. Такой подход также избавляет от возможного вмешательства CSS-стилей в происходящую анимацию.
Опять же, слова из документации.

Всё что осталось, это дописать анимацию, то, как и когда у нас будут анимироваться страницы. Для наглядности вот мой код, родительской страницы:

beforeEnter это метод transition, те самые хуки, которые можно писать в атрибутах компонента transition. beforeEnter это то, как страница будет выглядеть перед переходом, я её смещаю наверх и сжимаю. enter это как страница будет появляться, ну и leave это как страница “уйдёт”. Думаю, это знакомо всем. Единственное, что тут появилось нового, это коллбэк done. el это элемент, к которому применяется анимация, а done это переход. Т.к. я указал css: false, без него(без коллбэка done) хуки будут вызваны синхронно, и переход закончится раньше, чем отработает код.

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

В общем то, всё. Казалось бы, простая задача, но без смекалки не обойтись. Нет, помогает чтение документации 🤓

P.S. Для корректной работы, если вы используете компонент transition нужно добавить параметр appear
Спасибо Dmitry Shevchyshen за наводку!

Доклады — HolyJS 2023 Spring. Конференция для JavaScript‑разработчиков

  • Тип доклада: Доклад

    Зал 2

    Рассказ о Кроно: о внутреннем движке студии Лебедева для 3D-сайтов и о том, как он был создан в процессе работы над сайтом группы «Аквариум».

  • Тип доклада: Доклад

    Зал 1

    Илья расскажет, сколько всего «Эгея» делает под капотом, чтобы быть такой приятной и при этом оставаться «лёгкой» в глазах пользователей.

  • Тип доклада: Мастер-класс

    Управление состоянием приложения может быть простым и удобным. Zustand предлагает простое API и претендует на то, чтобы сократить число последователей Redux.

  • Тип доклада: Мастер-класс

    Управление состоянием приложения может быть простым и удобным. Zustand предлагает простое API и претендует на то, чтобы сократить число последователей Redux.

  • Тип доклада: Доклад

    Поговорим про эволюцию JS, её альтернативные ветки, данные и типы, функции или объекты.

  • Тип доклада: Доклад

    Зал 1

    Никита покажет, что умеют современные PWA, как изменился их внешний вид, насколько они интегрированы в операционные системы и в каких случаях они решают пользовательские задачи не хуже нативных приложений.

  • Тип доклада: Доклад

    Зал 1

    Мы живем в реальном мире, где помимо проектов, написанных с нуля, встречается и всякое разное. Кто-то называет это «кодом с душком», кто-то вежливо зовет легаси. Но суть одна и та же: в проекте много технического долга.

    Доклад Алексея посвящен тому, как можно делать такие проекты чуть лучше. Если у вас есть написанный на JS проект, который живет больше года, то заходите на этот доклад.

  • Тип доклада: Доклад

    В докладе мы узнаем наилучший способ измерения Code Coverage с помощью Playwright, разберемся с возникающими проблемами, узнаем способы ускорения Playwright и Jest-тестов, а также научимся объединять результаты нескольких тестовых прогонов в один отчет.

    • Александр Канунников

  • Тип доклада: Доклад

    Зал 1

    Реактивность — чертовски хороший паттерн, и Глеб хочет поговорить о том, почему он такой классный, как к нему подойти и как использовать его в своих целях в работе. Мир спикера разделился на до и после, и он очень хочет, чтобы вы тоже испытали этот фазовый переход.

  • Тип доклада: Доклад

    Зал 3

    Доклад о том, как работают обычные™ индексы в базах данных. Будет крайне полезен как тем, кто начинает работать с базами данных, так и тем, кто работал, но подзабыл. Используете IndexedDB? А порядок колонок в индексе правильный указывает? Или, быть может, у вас backend на PostgreSQL. И там без индексов никуда. Рассмотрим: как индекс ускоряет поиск, нужно ли индексировать условия where, нужно ли индексировать условия в order by, нужно ли индексировать foreign keys, что делать, если критериев поиска несколько, в каком порядке указывать колонки в индексе, случаи, когда индекс замедляет работу, и как снизить влияние индекса на приложение.

  • Тип доклада: Доклад

    Зал 3

    Container Queries уже весной будут показывать полное покрытие по браузерам, а это значит, что больше не будет причин не использовать их в продакшене. Но какие конкретные задачи можно будет проще и быстрее выполнять с помощью технологии, и как именно ее применение облегчит решение типовых задач? Именно об этом и поговорим.

  • Тип доклада: Доклад

    Речь пойдет о так называемых Array Programming Languages — группе языков, которая стоит отдельно от мейнстрима. Скорее всего, если вы увидите код на таком языке, то подумаете, что это какая-то шутка. Тем не менее и у них есть свое место в современном мире разработки. Попробуем вместе разобраться в их внутренней логике, примерах использования и в том, чему можно научиться, программируя на таких языках.

  • Тип доклада: Доклад

    Зал 2

    Про типы и их использование с классическими прототипами. Наследование, его способы и грабли TypeScript.

    • Виктор Вершанский

  • Тип доклада: Обсуждение

    Говорим о расписании, сессиях и активностях. Подключайтесь, чтобы узнать, что вас будет ждать в эфире в ближайшее время!

  • Тип доклада: Доклад

    Зал 2

    Как автоматизация процессов и поддержки помогла разгрузить команду фронтенд-платформы. Спикер расскажет, почему бот — это не просто дань моде, а эффективный инструмент для онбординга и поддержки потребителей. Также речь пойдет про Code Review, Review Roulette и React.

  • Тип доклада: Мастер-класс

    Поговорим о том, что такое Cocos Creator, о его возможностях, основных плюсах и минусах относительно движков Unity и Unreal. Кратко разберем, как с ним работать, а также создадим свой первый проект — игру с механикой Flappy Bird.

  • Тип доклада: Доклад

    Вы узнаете, как организовать обработку больших данных с использованием Node.js, какие бывают нестандартные случаи применения такого подхода и где это может вам понадобиться.

  • Тип доклада: Доклад

    Как использовать JS и React для рисования инфографики в прямых трансляциях? Какие задачи приходится решать?

  • Тип доклада: Доклад

    Раньше разработчики думали, что серверные приложения медленные, поэтому решили перенести часть работы на клиентскую сторону, создавая так называемые толстые клиенты. Как оказалось, такие приложения еще медленнее и, кажется, что изначально это было провальной идеей.

    В докладе спикер осветит последние решения, возникшие в результате эволюции веб-фреймворков. И ответит на вопрос: толстый клиент — это плохо?

  • Тип доклада: Интервью

    Поговорим о том, как наладить процесс работы над доступностью на таком большом проекте, как страница результатов поиска. Расскажем, с чего начать, куда бежать и как не уронить то, что уже сделано доступным.

  • Тип доклада: Доклад

    Из статистики браузера Chrome: каждый десятый переход на компьютере и каждый пятый на мобильном устройстве происходит на предыдущую или следующую страницу. При переходе необязательно загружать страницу заново, он может быть мгновенным. Для этого в самом браузере есть нативное решение  — BFCache, специальный кэш для перехода назад и вперед.

    Из доклада вы узнаете, как включить BFCache на своем сайте. Спикер расскажет об этом на примере Яндекс Маркета, поделится проблемами и особенностями, затронет тему тестов и метрик.

  • Тип доклада: Доклад

    JavaScript часто используется для написания пользовательских скриптов. Например, можно написать свой плагин для Figma или функцию для подсчета скидки для магазина в Shopify. Но надо, чтобы код исполнялся в песочнице, причем быстро и эффективно, потому что пользователей может быть много. Как этого добиться? Разберем JIT-компилицию JavaScript в Wasm, рассмотрим, какую производительность это решение показывает и как оно в сравнении с существующими подходами вроде QuickJS.

  • Тип доклада: Обсуждение

    Трансляция из Главной студии HolyJS.

  • Тип доклада: Интервью

    Интервью с Алексеем Пименовым в Главной студии HolyJS.

  • Тип доклада: Воркшоп

    Использовать Lottie просто, но как работает эта магия? Разберемся в основах воспроизведения анимации: слои, трансформации, кейфреймы, кривые анимации. Разберем структуру lottie.json. А также посмотрим, что именно делает lottie-web и какие паттерны используют разработчики этой библиотеки. И на закуску рассмотрим неочевидное применение Lottie. Будет много картинок!

  • Тип доклада: Обсуждение

    Обсуждение в Главной студии.

  • Тип доклада: Мастер-класс

    Спикер расскажет о модельной задаче, которую ему однажды понадобилось запрототипировать за два дня. Вы узнаете о требованиях к инструменту реализации прототипа, которые следуют из задачи, и увидите инструменты, хоть как-то подходящие к задаче в мире JS.

    Почему под такую задачу подошел только Moleculer? Спикер приведет результаты бенчмарков и расскажет об архитектуре Moleculer.

  • Тип доклада: BOF-сессия от партнера

    Обсудим, почему бизнесу выгодно делать цифровые продукты доступными. Поговорим о том, что такое цифровая доступность и инклюзия, где научиться делать сервисы доступными, не отрываясь от родного продукта. Узнаем, как комфортно встроить учет цифровой доступности в бизнес-процесс на примере открытой библиотеки React-компонентов VKUI и vk.com.

    Дискуссия будет интересна не только разработчикам, но и дизайнерам, продакт-менеджерам, тестировщикам, аналитикам, исследователям и даже HR-командам.

    На BoF, в отличие от докладов и круглых столов, нет деления на участников и ведущих — здесь все общаются друг с другом на равных, главное — не оффтопить и обсуждать тему.

  • Тип доклада: Доклад

    Подводим итоги, вспоминаем яркие моменты и рассказываем о дальнейших планах. Заходите на трансляцию, чтобы ничего не пропустить!

  • Тип доклада: Мастер-класс

    Спикер расскажет о модельной задаче, которую ему однажды понадобилось запрототипировать за два дня. Вы узнаете о требованиях к инструменту реализации прототипа, которые следуют из задачи, и увидите инструменты, хоть как-то подходящие к задаче в мире JS.

    Почему под такую задачу подошел только Moleculer? Спикер приведет результаты бенчмарков и расскажет об архитектуре Moleculer.

  • Тип доклада: Воркшоп

    Использовать Lottie просто, но как работает эта магия? Разберемся в основах воспроизведения анимации: слои, трансформации, кейфреймы, кривые анимации. Разберем структуру lottie.json. А также посмотрим, что именно делает lottie-web и какие паттерны используют разработчики этой библиотеки. И на закуску рассмотрим неочевидное применение Lottie. Будет много картинок!

  • Тип доклада: Доклад

    Говорим о расписании, сессиях и активностях. Подключайтесь, чтобы узнать, что вас будет ждать в эфире в ближайшее время!

  • Тип доклада: Доклад

    Заглянем внутрь IDE и разберем механизмы, благодаря которым мы получаем помощь в написании кода (в контексте JavaScript и TypeScript). Разберем возможности двух главных платформ по созданию расширений — не только в отношении работы с кодом, но и в отношении взаимодействия с пользователем. Попытаемся понять, насколько сложно написать плагин для JS-фреймворка на каждой из платформ. Доклад будет интересен тем, кто размышляет о выпуске плагина для своей библиотеки/фреймворка, а также тем, кто хотел понять, как оно работает и почему иногда все так тормозит.

  • Тип доклада: Доклад

    Трансляция из Главной студии HolyJS.

  • Тип доклада: Мастер-класс

    Зал 2

    Микрофронтенды — сложная схема взаимодействия отдельных модулей. Каждый новый модуль нужно тщательно конфигурировать, а локальный сервер дорабатывать для возможности подключать новый микрофронтенд… Стоп, зачем так усложнять? На самом деле для добавления нового микрофронта достаточно поставить пакет, а все остальное сделает за вас дискавери. Рассмотрим реализацию такого дискавери.

  • Тип доклада: Доклад

    Зал 3

    Спикер расскажет, как производить поиск с опечатками и можно ли это сделать в браузере? Вы узнаете, поможет ли в этом CDN.

  • Тип доклада: Доклад

    Зал 2

    Самым важным дополнением React 18 было Concurrent Rendering и связанные с ним хуки вроде useTransition и useDeferredValue. При тех плюсах, которые нам принесли эти нововведения, хотелось бы разобраться, когда мы теряем преимущества и блокирующая отрисовка все-таки оказывается полезнее. Рассмотрим прошлые версии, сравним с последней, покопаем исходники, разберемся с историей React concurrency.

  • Тип доклада: Игра

    Code in the Dark — это соревнование по верстке (HTML, CSS), где 4 участника одновременно стараются повторить реализацию дизайна, имея только макет. Во время раунда не допускается предварительный просмотр результатов и нельзя использовать никакие измерительные инструменты. Победителя определяют зрители.

    В ходе нетворкинга проведем 4 раунда по 15 минут и финал. Участие свободное, по предварительной записи в зоне нетворкинга. 

    • Программный комитет HolyJS

  • Тип доклада: Доклад

    Зал 3

    Рассказ про использование кастомного рендерера на картах maplibregl, взаимодействие с glTF-моделями, вызовы и решения, которые принимала команда при разработке системы безопасности PSIM.

  • Тип доклада: Обсуждение

    Зал 1

    Подводим итоги конференции, вспоминаем яркие моменты и рассказываем о дальнейших планах. Заходите в зал или подключайтесь к трансляции, чтобы ничего не пропустить

  • Тип доклада: Доклад

    Зал 1

    На примере 40 миллионов пользователей мобильной версии ВКонтакте посмотрим, какие из оптимизаций перформанса наиболее эффективны и как они влияют на бизнес-метрики. Спикер расскажет про многолетний опыт и даст полезные советы по ускорению отрисовки сайта.

  • Тип доклада: Доклад

    Зал 3

    Спикер расскажет о возможностях применения SVG для построения интерактивных интерфейсов. Будут затронуты best practices и вопросы перформанса.

  • Тип доклада: Доклад

    Зал 3

    Cocos Creator — это игровой движок, китайский аналог и конкурент Unity3D, использующий в качестве языка программирования TypeScript. К сожалению, документация к Cocos Creator, доступная в открытых источниках, крайне скудная, а сам движок не предоставляет и не рекомендует никаких архитектурных решений.  

    В этом докладе поговорим, чем хорош Cocos и почему в команде выбрали его. Спикер расскажет, какой инфраструктуры не хватает для создания полноценных игр, и поделится собственным опытом решения основных задач.

  • Тип доклада: Доклад

    Зал 1

    Обзор современных возможностей ИИ в отношении фронтенд-разработки. Как с их помощью можно оптимизировать и ускорить процесс разработки?

  • Тип доклада: Доклад

    Зал 1

    На вопросы, касающиеся карьеры, ответим в рамках круглого стола, в составе которого будут члены Программного комитета и Андрей Смирнов.

  • Тип доклада: Доклад

    Зал 2

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

  • Тип доклада: Доклад

    Lightning talks — это отличный формат, чтобы динамично обсудить тему и найти единомышленников. Вас ждут доклады по 5-10 минут на околопрофессиональные темы и живые обсуждения.

    Давно хотели попробовать себя в роли спикера? Вам не терпится поделиться с миром идеями или кейсами из рабочей практики? Посмотрели выступления HolyJS и чувствуете, что можете добавить к докладам что-то свое? Тогда подавайте заявку заранее по ссылке!

  • Тип доклада: Мастер-класс

    Зал 2

    Микрофронтенды — сложная схема взаимодействия отдельных модулей. Каждый новый модуль нужно тщательно конфигурировать, а локальный сервер дорабатывать для возможности подключать новый микрофронтенд… Стоп, зачем так усложнять? На самом деле для добавления нового микрофронта достаточно поставить пакет, а все остальное сделает за вас дискавери. Рассмотрим реализацию такого дискавери.

  • Тип доклада: Доклад

    Зал 1

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

  • Тип доклада: Доклад

    Зал 2

    Telegram Web Apps — это аналог известной и зрелой технологии от ВКонтакте VK Mini Apps. Она позволяет разработчикам при необходимости уйти от классического общения с ботом через чат в сторону реализации веб-интерфейса, предоставляющего максимально возможную гибкость. Общение происходит с сервером разработчика, а не с сервером Telegram, что имеет свои преимущества и недостатки.

    Примечательно, что в отличие от классической реализации ботов, которая всегда заключается в написании бэкенд-сервера, Telegram Web Apps связан напрямую с фронтенд-разработкой, что будет крайне полезно разработчикам, концентрирующимся на клиентской части.

    • Владислав Кибенко

  • Тип доклада: Доклад

    Зал 1

    Мария расскажет о состоянии стандарта ECMAScript на сегодняшний момент и о том, что нас ждет в ECMAScript 2023. Почему у нас до сих пор нет нормальной работы с Date? Когда JavaScript станет более функциональным? Также в докладе пройдемся по новым Web API.

  • Тип доклада: Доклад

    Зал 3

    Евгений рассмотрит, как анимации в RN работают из коробки, почему появилась библиотека Reanimated, зачем нужен второй JS-поток и при чем тут JSI. Доклад будет полезен RN-разработчикам, веб-разработчикам, которые хотят получить представление о работе RN, а также нативщикам, которым интересно посмотреть на перфоманс чего-то, написанного на кроссплатформе.

  • Тип доклада: Доклад

    Зал 3

    Повесть о том, как в компании МойОфис строили веб-редактор документов. Существует некое «магическое» ядро, на которое завязан весь главный функционал редакторов для разных платформ. В докладе пойдет рассказ про глобальную архитектуру и ключевые решения, про «магию» ядра и как с ним работают в команде веб-редактора, при чем тут вообще Wasm и Emscripten. Будет затронута тема рендеринга на canvas и основные вызовы, с которыми команда сталкивается при разработке веб-редактора: работа со шрифтами, ссылками, фокусом и выделением, перформанс. В заключение немного поговорим про существующие проблемы и их потенциальные решения. 

  • Тип доклада: Доклад

    Зал 1

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

    Будут примеры приложений, которые спикер уже реализовал. Он также поделится библиотеками, которые позволяют использовать ЧА в своих проектах на функциональных компонентах с хуками. Затем вы узнаете, как сделать ваш проект еще масштабнее, не прибегая к построению огромных приложений, а делая большое количество маленьких. Также разберемся, как во всем этом помогает ЧА.

  • Тип доклада: Доклад от партнера

    Зал 2

    В докладе будет представлен путь построения микрофронтендной архитектуры на примере проекта МТС Exolve.

    Спикер расскажет об отказе от основного фреймворка компании — Vue — в пользу React, о построении простой микрофронтендной архитектуры, об идеях и принципах.

  • Тип доклада: Доклад

    Зал 1

    Вы наверняка слышали выражение «JavaScript is everywhere», и с каждым годом оно становится всё актуальнее. Казалось бы, обычный фронтенд уже крепко обосновался и в бэкенде, и в мобилках, и на десктопе. Но что же делать фронтенд-разработчику со всем этим многообразием? Как выбрать направление для развития?

    Когда спикер руководил ресурным пулом JavaScript-разработчиков, ему довелось увидеть множество различных карьерных переходов. В этом докладе Андрей хочет поделиться составленным роудмапом возможного развития фронтенд-разработчика. Поговорим, как о вертикальных, так и горизонтальных переходах, а также разберем неожиданные карьерные пути на основе историй из жизни.

  • Тип доклада: Доклад

    Зал 3

    Для тех, кто хочет узнать что-то новое о создании хорошо знакомой библиотеки.

    • Программный комитет HolyJS

  • Тип доклада: Доклад

    Зал 1

    Давайте посмотрим, какой путь мы прошли от «классических» паролей до 2FA, Webauthn и Passkeys и как, зачем и почему это все работает. Посмотрим на преимущества и ограничения беспарольных технологий и поразмышляем, как с этим всем жить, можно ли (и нужно ли) внедрять их в свои проекты прямо сейчас.

  • Тип доклада: Обсуждение

    Зал 1

    Говорим о расписании, сессиях и делимся информацией. Приходите в зал или подключайтесь онлайн, чтобы узнать, что вас будет ждать в ближайшее время!

  • Тип доклада: Доклад

    Зал 1

    Поговорим о том, что такое sizecoding и в чем его отличия от классического программирования. Разберем несколько алгоритмов конкретных демо-эффектов и их реализацию. Изучим программные трюки, позволяющие уместиться в заданный объем исполняемого кода.

Как реализовать прокрутку вверх с помощью только CSS | by bitbug

Опубликовано в

·

3 мин чтения

·

11 июля 2022 г.

Если на нашем веб-сайте длинная страница, лучше предложить кнопку, с помощью которой можно прокрутить страницу назад, когда пользователь хочет вернуться к началу страницы, жест становится более дружелюбным.

Лучшей реализацией является отображение кнопки, зафиксированной в определенном месте (внизу справа), когда пользователь долго прокручивает вниз.

Большинство людей используют JavaScript для реализации этой функции:

  1. Создать кнопку, привязанную к определенному месту, скрыть ее по умолчанию;
  2. Прослушивание события прокрутки страницы в зависимости от положения страницы для отображения кнопки;
  3. Слушайте событие нажатия кнопки, при нажатии прокручивайте страницу вверх.

Реализовать прокрутку вверх страницы несложно. Но мы можем сделать это проще, используя только CSS.

Но без JavaScript, как мы можем прокручивать страницу?

Как интерфейсный разработчик, вы должны были использовать тег для перехода на другие страницы. Но некоторые люди могут не знать, что тег и также может переходить к элементу на той же странице. Атрибут href тега поддерживает пять форм значений (из документа MDN):

1. URL-адреса на основе HTTP

2. Разделы страницы с URL-адресами фрагментов

3. Элементы мультимедиа файлы с медиафрагментами

4. Телефонные номера с tel: URL-адреса

5. Адреса электронной почты с mailto: URL-адреса

Как определено в спецификации HTML, вы можете использовать href="#top" или href=" #" для ссылки на начало текущей страницы.

 // страница будет прокручиваться вверх, когда вы щелкнете по ней 
прокрутите вверх

Да, прокрутить вверх легко, используя html Тег .

Если кнопка зафиксирована внизу, мы можем использовать для этого position:fixed . Но этот опыт не очень, страница изначально вверху, и эта кнопка не нужна. Итак, как мы можем сделать кнопку, которая будет отображаться, когда пользователь прокручивает страницу вниз на долгое время?

Изначально кнопка скрыта, и пока пользователь прокручивает страницу, кнопка фиксируется в одном правом нижнем положении. Это очень похоже на поведение position:sticky .

Когда страница загружается, нам нужно закрепить эту кнопку внизу экрана, где можно спрятать кнопку. Когда пользователь прокручивает страницу, она фиксируется в правом нижнем углу с помощью кнопки 9.0031 позиция: липкая .

Когда пользователь прокручивает вверху страницы или загружается впервые, мы можем скрыть кнопку с помощью псевдоэлемента.

Вы также можете протестировать это на codepen.io:

Прокрутка вверх страницы несложная, мы можем реализовать с помощью JavaScript или события, используя только CSS. В этой статье мы узнали, как реализовать функцию прокрутки вверх только с помощью CSS.

Назад к основам: ненавигационные ссылки для обработки JavaScript

Когда вы создаете ссылки, которые не являются навигационными и обрабатываются с помощью кода сценария или какой-либо среды JavaScript, как именно вы создаете эту ссылку на странице?

Здесь я говорю о простом ванильном HTML/JavaScript, а не о том, что происходит, когда вы используете какие-либо JS-фреймворки, которые обычно добавляют специальную обработку ссылок.

Проблема здесь в том, что если вы создаете ссылку без атрибута href , ссылка не будет показывать типичное поведение ссылки. Итак:

 

Отображение ссылок

Ссылка без атрибута href | Ссылка с href |

отображает следующее со стилем браузера по умолчанию:

Обратите внимание, что ссылка без ссылки отображается без стиля ссылки. Поэтому при использовании динамической навигации с помощью обработчиков событий или jQuery и т. д. вам необходимо убедиться, что вы явно указали какую-то ссылку в атрибуте href .

Если вы используете инфраструктуру пользовательского интерфейса, такую ​​как BootStrap, она по-прежнему будет стилизовать недостающие href ссылки правильно. Но стили HTML по умолчанию отображают якоря без href со стилем ссылки, который не запускает стиль text-decoration .

Если вы используете фреймворк JavaScript, такой как Angular, Vue, React и т.

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

Краткий ответ:

href="#0"

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

Итак, я остановился на следующем:

 Лети, лети, лети
 

Мне это нравится, потому что:

  • Не работает
  • Это делает очевидным, что это бесполезная навигация
  • Ссылка выглядит корректно в строке состояния
  • Не помечает сканеры безопасности

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

Для получения дополнительной информации давайте взглянем.

Итак, какие есть варианты? На самом деле их довольно много, некоторые лучше, чем другие. Я бы сказал, что некоторые из них не подходят, но я все равно перечислю их:

  1. Использовать стилизованную <кнопку>

До недавнего времени я использовал № 5, но только недавно обнаружил, что № 6 на самом деле возможен и что для меня предпочтительнее.

Вот небольшой HTML-код, с которым вы можете поэкспериментировать (CodePen):

  

Отображение ссылок

<ул>
  • Обычная веб-ссылка
  • Ссылка без атрибута href
  • Ссылка с пустым атрибутом href
  • Ссылка с href и `#0`
  • Связать с тегом JavaScript:
  • Не используйте пустой HREF

    Пустые ссылки HREF могут показаться заманчивыми, но они проблематичны, поскольку в основном означают повторную навигацию по текущей странице . Это похоже на операцию обновления, которая повторно отправляет на сервер.

    Обратите внимание, что пустой HREF отображается как ссылка с целевым URL-адресом, указывающим на текущую страницу:

    Это может ввести в заблуждение на небольших страницах, поскольку вы можете не заметить, что страница перемещается.

    Пустые ссылки HREF полезны для нескольких целей, но не для сценариев динамической навигации. Это хороший выбор для Обновить ссылку на эту страницу стиля или для

    отправки форм, которые отправляются обратно на тот же URL-адрес.

    Не используйте

    # сам по себе

    Как оказалось, второй вариант чаще всего используется в примерах и демонстрациях, но обычно это не лучший выбор, поскольку такой синтаксис:

     Текст ссылки
     

    на самом деле , а не ничегонеделание навигация. Это вызывает переход к верхней части страницы. Если ваша страница не достаточно мала, чтобы поместиться на одном экране Viewport, или если каждая обработанная ссылка фактически явно прерывает навигацию (подробнее об этом ниже), вы не хотите использовать эту опцию.

    Обработка

    onclick и возврат false

    Один из способов предотвратить навигацию — реализовать click / onclick обработчик событий JavaScript и вернуть false из него. В качестве альтернативы вы можете использовать event.preventDefault() внутри объекта события события щелчка, который также передается в обработчик.

    Хотя это и работает, о нем легко забыть (если только вы не используете JavaScript-фреймворк, который, скорее всего, сделает это за вас). Если вы уже используете обработчик, это нормально, но в остальном лучше выбрать один из других вариантов.

    javascript: Теги

    Еще один способ сделать это — предоставить по сути нулевую ссылку JavaScript . Для этого существует несколько вариантов:

     
    `
    `
     

    Все они работают нормально, но они показывают некоторые неприятные ссылки в строке состояния, когда отображается текст javascript: .

    Ссылки и текст безвредны, так как они буквально ничего не делают, но это уродливо, и для среднего человека, не разбирающегося в Интернете, возможно, это немного пугает.

    Обратите внимание, что строгие стандарты безопасности, особенно политика безопасности контента (CSP), не разрешают javascript: ссылки, и они отключены. javascript: ссылки отключены, поэтому это все равно будет работать, но во время аудита безопасности ссылки javascript все равно будут отображаться.

    Использование кнопки

    В нескольких комментариях упоминалось не использование ссылок, а использование кнопок для выполнения операций, не связанных с навигацией. Семантически это имеет смысл — на самом деле вы нигде не «связываетесь», но вы обрабатываете операцию в JavaScript, поэтому кнопка на самом деле является хорошим семантическим выбором для навигации без ссылки.

    Проблема в том, что кнопки — это… кнопки, и по умолчанию они могут выглядеть не так, как вам нужно.

    Кнопки != Ссылки

    Теперь некоторые фреймворки, такие как Bootstrap и Material Design, предоставляют настраиваемые стили для кнопок, чтобы кнопки можно было стилизовать как ссылки.

    Например, в начальной загрузке вы можете использовать:

     
     

    , который выглядит как , как ссылка (в основном — есть отличия, например, фоновый бокс).

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

    Если вы хотите использовать стиль вручную, попробуйте следующее:

     
        
    <стиль>
        кнопка.ссылка {
            фон: прозрачный;
            цвет синий;
            граница: нет;
            контур: 0;
            оформление текста: подчеркивание;
        }
        кнопка.ссылка:наведите {
            цвет: огнеупорный кирпич;
        }
    

    , что дает вам:

    Неплохо, но все же не совсем ведет себя как ссылка. Вы не получите поведение :visited , и, конечно же, оно не будет учитывать пользовательские правила CSS и , если они применяются глобально — вам также придется явно добавить их в стиль.

    Победитель:

    #0

    Лучшее решение для меня href="#0" . Главным образом потому, что он ничего не делает, использует простой текст и не показывает устрашающей ссылки в строке состояния, в отличие от 9.0031 javascript: ссылки выше.

    Этот подход работает с использованием несуществующей хеш-ссылки. Если у вас нет именованной ссылки или идентификатора с именем 0 — что маловероятно — навигация не работает, что фактически ничего не делает. Нет навигации и прокрутки.

    Если по какой-то странной причине у вас есть идентификатор или именованная ссылка с именем 0 , используйте другое несуществующее значение для хеша: #foo123 тоже работает 😃

    Большинство фреймворков обрабатывают это автоматически

    Самым простым и часто автоматическим решением является использование платформы, которая явно обрабатывает навигацию по ссылкам, поэтому вам не нужно об этом думать. Все основные фреймворки, такие как Angular, Vue, React, Ember и т. д., автоматически обрабатывают ссылки, сокращая навигацию по ссылкам в прикрепленных обернутых обработчиках событий JavaScript.

    Итак, если вы используете эти фреймворки, вы обычно вообще не устанавливаете атрибут href и позволяете фреймворку обрабатывать это за вас, как с точки зрения стиля, так и навигации.