5

Я пытаюсь смоделировать событие прокрутки с помощью ReactJS и JSDOM.React.addons.TestUtils.Simulate.scroll не работает

Сначала я попытался следующие:

var footer = TestUtils.findRenderedDOMComponentWithClass(Component, 'footer'); 
footer.scrollTop = 500; 
TestUtils.Simulate.scroll(footer.getDOMNode()); 
//I tried this as well, but no luck 
//TestUtils.Simulate.scroll(footer); 

событие прокрутки не распространяется на всех. Затем я вручную создал событие и все работало отлично:

var evt = document.createEvent("HTMLEvents"); 
evt.initEvent("scroll", false, true); 
element.dispatchEvent(evt); 

Вопрос: Я делаю что-то не так с TestUtils? Как я могу заставить это работать?

Алан

ответ

3

Судя по this и this, я считаю TestUtils имитирует скроллинг с помощью WheelEvent, что означает, что нужен параметр deltaY, чтобы знать, как далеко прокрутки. Это будет выглядеть следующим образом:

TestUtils.Simulate.scroll(footer.getDOMNode(), { deltaY: 500 }); 
+0

Это сделало трюк, спасибо @Jakemmarsh –

+0

На самом деле это была ложная тревога. Это не работает. Событие не распространилось. –

4

Моя ситуация может отличаться от ОП, но я боролся с подобной проблемой и нашел свой путь здесь после того, как много и много поисков. Я понял, что основная проблема заключается в том, что TestUtils.Simulate.scroll() только имитирует событие прокрутки, отправленное конкретным компонентом React (например, когда у вас есть overflow: scroll, установленный на этом компоненте), а не событие прокрутки, отправленное window.

В частности, я пытался проверить обработчик прокрутки я настроить в React классе, как это:

componentDidMount: function() { 
    window.addEventListener('scroll', this.onScroll); 
}, 

componentWillUnmount: function() { 
    window.removeEventListener('scroll', this.onScroll); 
}, 

Чтобы проверить onScroll(), я, наконец, понял, что я должен был имитировать диспетчерский свиток событие из window, как это:

document.body.scrollTop = 100; 
window.dispatchEvent(new window.UIEvent('scroll', { detail: 0 })); 

это работало отлично подходит для меня.

+0

Это было полезно, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^