From be45dc775ae34ebb992a779c61740b5573168949 Mon Sep 17 00:00:00 2001 From: Jet Li Date: Sat, 22 Feb 2020 19:52:17 +0800 Subject: [PATCH 1/2] Fix prevent_default() by non-passive --- src/html/listener/macros.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/html/listener/macros.rs b/src/html/listener/macros.rs index 957f69036c4..76d1385a57c 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) + } + }), } } } From 5b3a24a62553b4faab395165b32cad8598ed55f4 Mon Sep 17 00:00:00 2001 From: Jet Li Date: Sat, 22 Feb 2020 22:36:06 +0800 Subject: [PATCH 2/2] Fix cargo fmt --- src/html/listener/macros.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/html/listener/macros.rs b/src/html/listener/macros.rs index 76d1385a57c..7e1199c1287 100644 --- a/src/html/listener/macros.rs +++ b/src/html/listener/macros.rs @@ -59,7 +59,7 @@ macro_rules! impl_action { cfg_match! { feature = "std_web" => EventListener(Some(element.add_event_listener(listener))), feature = "web_sys" => ({ - // We should only set passive event listeners for `touchstart` and `touchmove`. + // 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)