diff --git a/src/html/listener/macros.rs b/src/html/listener/macros.rs index 957f69036c4..7e1199c1287 100644 --- a/src/html/listener/macros.rs +++ b/src/html/listener/macros.rs @@ -17,7 +17,7 @@ macro_rules! impl_action { use stdweb::web::event::{$type, IEvent}; use stdweb::web::{Element, IEventTarget}; } else if #[cfg(feature = "web_sys")] { - use gloo::events::EventListener; + use gloo::events::{EventListener, EventListenerOptions}; use wasm_bindgen::JsValue; use web_sys::{$type as WebSysType, Element, EventTarget}; } @@ -58,7 +58,16 @@ macro_rules! impl_action { }; cfg_match! { feature = "std_web" => EventListener(Some(element.add_event_listener(listener))), - feature = "web_sys" => EventListener::new(&EventTarget::from(element.clone()), $name, listener), + feature = "web_sys" => ({ + // We should only set passive event listeners for `touchstart` and `touchmove`. + // See here: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Improving_scrolling_performance_with_passive_listeners + if $name == "touchstart" || $name == "touchmove" { + EventListener::new(&EventTarget::from(element.clone()), $name, listener) + } else { + let options = EventListenerOptions::enable_prevent_default(); + EventListener::new_with_options(&EventTarget::from(element.clone()), $name, options, listener) + } + }), } } }