Я ищу простую кросс-браузерную анимацию «прокрутки вверх», которую можно применить к ссылке. Я не хочу требовать библиотеку JS, такую как jQuery / Moo и т. Д.
// jQuery Equivilant to convert to pure JS...
$('html, body').animate({scrollTop:0}, 400);
Я идеальный случай для тех, кто должен был выучить JS 100%, прежде чем прыгать в библиотеку. :(
javascript
Хизер Хинс
источник
источник
var something = $(...)
), воссоздание gazillion объектов в каждой функции (они знают переменные, но не знают об этом,var veryBigObject = {...}
имея несколько сотен свойств в верхняя часть функции собирается убить производительность). И очень часто они даже не знают, что язык называется Javascript, а не jQuery.Ответы:
Демо-версия:
источник
document.documentElement
вместоdocument.body
(если вы не установите CSS:)body{height:100%;}
. Рабочая демонстрация с использованием этой концепции: jsfiddle.net/S5ALP/1if (duration <= 0) return;
top.window.scroll(0, value)
вместо того, чтобыelement.scrollTop = value
заставить его работать как в Chrome, так и в Firefox (Ubuntu). :)похоже, уже есть много решений. во всяком случае, вот еще один, использует уравнения ослабления ..
источник
requestAnimationFrame
requestAnimationFrame
несовместимо со всеми браузерами, включая некоторые мобильные устройства, поэтому это не динамическое решение, см. developer.mozilla.org/en-US/docs/Web/API/window/…requestAnimationFrame
которая должна позаботиться о любой несовместимости браузераПолучил из статьи о плавной прокрутке .
При необходимости есть несколько полифилов .
источник
scrollIntoView({behavior: 'smooth'})
существует и может делать то, что нужно людям для решения подобных проблем.Uncaught TypeError: Failed to execute 'scroll' on 'Window': No function was found that matched the signature provided.
Я изменил ответ TimWolla, чтобы использовать квадратичное смягчение (немного плавнее :). Вот пример в действии: на jsFiddle . Функции облегчения доступны здесь: Функции облегчения Роберта Пеннера
источник
document. documentElement
не работает в Chrome.Без кода JQuery, надеюсь, это поможет вам.
вызовите эту функцию TopscrollTo () для события нажатия кнопки или для любого другого элемента / события, которое вы хотите.
источник
Я изменил код @TimWolla, чтобы добавить больше опций и некоторые функции движения. Также добавлена поддержка кроссбраузера с document.body.scrollTop и document.documentElement.scrollTop
http://jsfiddle.net/forestrf/tPQSv/
Сокращенная версия: http://jsfiddle.net/forestrf/tPQSv/139/
источник
1 / duration
когда вы впервые вызываете scrollToX?На самом деле существует чистый способ сделать это без использования
setTimeout
orrequestAnimationFrame
или jQuery.Короче говоря, найдите элемент в scrollView, к которому вы хотите перейти, и используйте scrollIntoView
el.scrollIntoView({behavior:"smooth"});
Вот такой вот плункр .
источник
scrollIntoViewOption
не имеет кросс-браузерной поддержки. developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewАдаптировано из этого ответа :
Это должно позволить вам плавно прокручивать (функция косинуса) от любого места до указанного «у».
источник
Никто не упомянул CSS-свойство scroll-поведение
CSS
JS
источник
Чисто JAVASCRIPT скроллер класса
Это старый вопрос, но я подумал, что мог бы ответить с некоторыми причудливыми вещами и еще несколькими опциями, с которыми можно поиграть, если вы хотите иметь немного больше контроля над анимацией.
Вот вам класс JS, который позаботится о прокрутке для вас:
СМОТРИТЕ ДЕМО В КОДЕЛИ ИЛИ ПЕРЕЙДИТЕ К ДНУ И ПРОЙДИТЕ SINPET
ПОЛНЫЙ КЛАСС СКРИПТ + ПРИМЕР ИСПОЛЬЗОВАНИЯ:
источник
Легко.
источник
window.scrollTo(x, y);
..scrollTop
и.scrollLeft
.*scroll
при расчете позиции прокрутки. Тем не менее, я не вижу пропавших без вести;
...Только что сделал это решение Javascript только ниже.
Простое использование:
Объект движка (вы можете поиграть с фильтром, значениями в секунду):
источник
console.warn
строковый параметр insetTimeout
не подходят в производственном коде (вторая в значительной степени не подходит где угодно, так как это вeval
основном).Опираясь на некоторые ответы здесь, но используя простую математику для плавного перехода с использованием синусоиды:
Использование:
PS. обратите внимание на стиль ES6
источник
Это кросс-браузерный подход, основанный на ответах выше
источник
difference
иperTick
?Еще один подход использует window.scrollBy
JSFiddle
источник
Я выбрал @akai версию ответа @timwolla и добавил взамен функцию stopAnimation, поэтому перед началом новой анимации старую можно остановить.
источник
Другой кросс-браузерный подход, основанный на вышеуказанном решении
Хитрость заключается в том, чтобы контролировать фактическое изменение прокрутки, и, если оно равно нулю, изменить элемент прокрутки.
источник
Линейная прокрутка анимации до дна. Чистый JS, нет JQuery. Может быть, мое решение будет полезно для кого-то.
Вы можете изменить переменные
action_count
,speed_ms
настроить прокрутку анимации на свой вкус.источник
Используйте это решение
Спасибо
источник
animate()
функции в области видимости окна ... Я думаю, вы неправильно поняли.Element.animate()
Функция не распознается многими браузерами. См. Developer.mozilla.org/en-US/docs/Web/API/Element/animateЯ вижу, что большинство / все вышеупомянутые посты ищут кнопку с JavaScript. Это работает, если у вас есть только одна кнопка. Я бы рекомендовал определить элемент «onclick» внутри кнопки. Этот «onclick» затем вызвал бы функцию, вызывая ее прокрутку.
Если вы сделаете это так, вы можете использовать более одной кнопки, если кнопка выглядит примерно так:
источник