Наконец, после нескольких хороших комментариев, я нашел решение, но это скорее обходной путь (спасибо за ваш вклад).
Я поиграл с некоторыми eventListeners
, capturing
и bubbling
,Кажется, что прокрутка идет вниз к элементу прокрутки (capture
), но больше не всплывает.Слушайте событие прокрутки и прокручивайте через JS в правильном направлении, пока DOM не разблокируется.Но если я изменяю стиль (положение / размер) элемента прокрутки .styleWrap .scrollable
, блокировка исчезла!
После этого выясняется, что Safari блокирует любые блокировки, когда я изменяю этот элемент после анимации.готово.
Итак, мой обходной путь - изменить стиль и вернуть его после завершения анимации CSS - и вуаля:
function slide(slideName){
// scroll to top
scroll(0,0);
// show the Slide
var slideElement = document.getElementById(slideName);
slideElement.classList.add('show');
}
setTimeout(function(){
slide('item1');
// make a change to be able to revert this change
var scrollDiv = document.querySelector(".scrollable");
scrollDiv.style.top = "1px";
// change some style (reset the prev. change)
setTimeout(function(){
document.querySelector(".scrollable").style.top = "";
}, 1300 + 10); // CSS animation time + 10ms
}, 100);
Может быть, именно поэтому w3css
анимация не приводит к блокировке ...
Вы можете проверить это здесь (я добавляю больше пикселей к top
, чтобы сделать его более заметным здесь) : http://fiddle.bplaced.net/52426221g/
Я не на 100% удовлетворен этим решением, потому что:
- это проблема CSS, решаемая с помощью JS
- , вам нужно знать анимациювремя (которое может меняться в зависимости от дизайна)
Поэтому я хотел бы изменить принятый ответ, если есть решение CSS