{"id":353431,"date":"2026-08-17T08:32:48","date_gmt":"2026-08-17T08:32:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/arts-smooth-scrolling-for-elementor\/"},"modified":"2026-08-18T14:39:40","modified_gmt":"2026-08-18T14:39:40","slug":"smooth-scrolling-for-elementor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/smooth-scrolling-for-elementor\/","author":23271239,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Arts Smooth Scrolling for Elementor","header_author":"Artem Semkin","header_description":"Lenis-powered smooth scrolling for Elementor.","assets_banners_color":"4c4c4c","last_updated":"2026-08-18 14:39:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/artemsemkin.com\/plugins\/smooth-scrolling-for-elementor\/","header_author_uri":"https:\/\/artemsemkin.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"artemsemkin","date":"2026-08-17 08:32:13"},"1.0.1":{"tag":"1.0.1","author":"artemsemkin","date":"2026-08-18 14:39:40"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3650715,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3650715,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3650715,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3650715,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3650715,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3650715,"resolution":"1","location":"assets","locale":"","width":1520,"height":1520},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3650715,"resolution":"2","location":"assets","locale":"","width":1520,"height":1520}},"screenshots":{"1":"The Smooth Scrolling tab, tucked under Elementor's Site Settings.","2":"Duration, easing, and the disable-on-touch switch."}},"plugin_section":[],"plugin_tags":[76538,228776,276072,1252,8500],"plugin_category":[],"plugin_contributors":[241532],"plugin_business_model":[],"class_list":["post-353431","plugin","type-plugin","status-publish","hentry","plugin_tags-elementor","plugin_tags-lenis","plugin_tags-momentum-scrolling","plugin_tags-scrolling","plugin_tags-smooth-scroll","plugin_contributors-artemsemkin","plugin_committers-artemsemkin"],"banners":{"banner":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/banner-772x250.png?rev=3650715","banner_2x":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/banner-1544x500.png?rev=3650715","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/icon.svg?rev=3650715","icon":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/icon.svg?rev=3650715","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/screenshot-1.png?rev=3650715","caption":"The Smooth Scrolling tab, tucked under Elementor's Site Settings."},{"src":"https:\/\/ps.w.org\/smooth-scrolling-for-elementor\/assets\/screenshot-2.png?rev=3650715","caption":"Duration, easing, and the disable-on-touch switch."}],"raw_content":"<!--section=description-->\n<p>Smooth Scrolling adds Lenis-powered momentum scrolling to your Elementor site: the page glides to a stop instead of snapping, in-page anchor links animate to their target, and GSAP's ScrollTrigger stays in sync automatically when it's on the page.<\/p>\n\n<p>It works the moment you activate it \u2014 there's nothing to switch on. Tune the duration and easing to taste, and the rest of the site keeps working as before \u2014 Elementor Sticky, dynamic content, everything.<\/p>\n\n<p>Scrolling is powered by Lenis (MIT) by darkroom.engineering, compiled into the plugin's own bundle.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Momentum scrolling.<\/strong> The page scrolls through Lenis instead of the browser's native scroll, with a duration and easing curve set from Site Settings.<\/li>\n<li><strong>Anchor links.<\/strong> Clicking a same-page <code>#anchor<\/code> link (or a bare <code>#<\/code>) scrolls smoothly to the target, using a slightly snappier easing than the main scroll.<\/li>\n<li><strong>GSAP ScrollTrigger sync.<\/strong> If GSAP and ScrollTrigger are already on the page, the engine detects them, drives its render loop off GSAP's ticker instead of a separate animation-frame loop, and keeps ScrollTrigger's cached scroll position current on every frame.<\/li>\n<li><strong>Disable on touch devices.<\/strong> On by default: phones and tablets never download the engine, since there's no pointer-driven scrolling to smooth there.<\/li>\n<\/ul>\n\n<h4>Configuration<\/h4>\n\n<p>Everything lives in one tab: Elementor \u2192 Site Settings \u2192 Smooth Scrolling. Duration, easing (Expo Out or Linear), and the disable-on-touch switch. Changes apply live in the editor preview.<\/p>\n\n<h4>Footprint<\/h4>\n\n<p>A small inline loader sets the page's scroll state synchronously and fetches the engine bundle itself \u2014 nothing is enqueued. On a device where Disable on Touch Devices applies, that fetch never happens.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Elementor (the free version is fine).<\/li>\n<li>Install and activate Arts Smooth Scrolling for Elementor.<\/li>\n<li>Browse your site. Smooth scrolling is already running. To tune duration and easing, open Elementor's Site Settings and find the Smooth Scrolling tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20access%20the%20lenis%20instance%20from%20javascript%3F\"><h3>How do I access the Lenis instance from JavaScript?<\/h3><\/dt>\n<dd><p>window.artsSmoothScrolling.ready is a promise that resolves once the engine has started. <code>window.artsSmoothScrolling.lenis<\/code> is a getter for the live Lenis instance, null while the engine isn't running.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20gsap%20and%20scrolltrigger%3F\"><h3>Does it work with GSAP and ScrollTrigger?<\/h3><\/dt>\n<dd><p>Yes, automatically. If <code>window.gsap<\/code> is present, the engine drives Lenis off GSAP's ticker (added with priority, so it runs ahead of GSAP's own tweens) instead of its own animation-frame loop, and calls <code>gsap.ticker.lagSmoothing(0)<\/code> once \u2014 the standard recipe for pairing GSAP with a smooth-scroll library. That call changes a global GSAP setting and is not reverted if smooth scrolling is later disabled.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20click%20a%20link%20like%20%2F%23pricing%20on%20a%20page%20that%20isn%27t%20the%20homepage%3F\"><h3>What happens when I click a link like \/#pricing on a page that isn't the homepage?<\/h3><\/dt>\n<dd><p>It navigates to the homepage and then scrolls to the <code>pricing<\/code> anchor there \u2014 the same thing that link does in any browser without this plugin. There's no trailing-slash normalization in the same-page check, so a link is only treated as pointing at the current page when its URL matches exactly.<\/p><\/dd>\n<dt id=\"does%20it%20affect%20elementor%27s%20sticky%20elements%3F\"><h3>Does it affect Elementor's Sticky elements?<\/h3><\/dt>\n<dd><p>Elementor's Sticky effect has its own \"Anchor Offset\" (<code>sticky_anchor_link_offset<\/code>) setting for compensating anchor-link scroll targets under a sticky header. That offset isn't applied while smooth scrolling is active, since anchor scrolling then goes through Lenis rather than Elementor's native scroll handling.<\/p><\/dd>\n<dt id=\"does%20it%20load%20anything%20on%20touch%20devices%3F\"><h3>Does it load anything on touch devices?<\/h3><\/dt>\n<dd><p>Not when Disable on Touch Devices is on, which is the default. The inline loader checks a media query before ever requesting the engine bundle, so phones and tablets download nothing.<\/p><\/dd>\n<dt id=\"how%20do%20i%20turn%20it%20off%3F\"><h3>How do I turn it off?<\/h3><\/dt>\n<dd><p>Deactivate the plugin, or for conditional control use the <code>arts_smooth_scrolling\/enabled<\/code> PHP filter.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20ajax%20page-transition%20plugins%20%28barba.js-based%20themes%2C%20etc.%29%3F\"><h3>Does it work with AJAX page-transition plugins (Barba.js-based themes, etc.)?<\/h3><\/dt>\n<dd><p>Not certified yet with 1.0.0. The engine is designed to persist across such transitions rather than re-initialize on every page swap, but this hasn't been tested against specific transitions plugins. If you run into issues, please report them.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>improved: confirmed compatibility with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>","raw_excerpt":"Lenis-powered momentum scrolling for Elementor, with automatic GSAP ScrollTrigger sync and zero engine bytes on touch devices.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353431"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/artemsemkin"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353431"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353431"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353431"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353431"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353431"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}