JWWD Marquee

WP Plugin

Seamless infinite-scrolling marquee with images and text. WPBakery container/child pattern for drag-and-drop item management. Configurable speed, direction, and spacing.

Version: v3.4.5
Released: 19 Feb 2026

Key Features

Changelog

v3.4.5

19 Feb 2026

Bug Fix

Replaced CSS animation: infinite with requestAnimationFrame for truly seamless scrolling.

CSS keyframe animations cause a brief repaint/flash when the infinite loop restarts (going from 100% back to 0%). This is a browser-level issue that can't be fixed with better math.

The fix: drive the scroll entirely with requestAnimationFrame. JavaScript updates translateX every frame at 60fps. When the position exceeds the scroll distance, it resets by adding/subtracting the distance — since the clones are visually identical, the reset is completely imperceptible. No animation restart = no flash.

Also removed the now-unnecessary CSS keyframes.

v3.4.4

19 Feb 2026

Bug Fix

Instead of manually calculating the scroll distance (summing item widths + gaps in JS), we now clone one full set of items first, then measure the actual rendered distance between the first original and first clone using getBoundingClientRect().

This eliminates any sub-pixel rounding mismatch between our JavaScript calculation and the browser's flex gap rendering — the browser tells us the exact distance, so the animation loop point is truly seamless.

v3.4.3

19 Feb 2026

Bug Fix

Lazy loading was causing the marquee to jump at the loop point.

The site's lazy loader (LazySizes/WP Rocket/etc.) replaces src with a 1x1 transparent GIF placeholder and stores the real URL in data-src. When our JS cloned items for the infinite loop, the clones kept the placeholder GIFs — rendering at 0 width — while the scroll distance was calculated from the originals' real widths.

Fix:

  • Force-loads all marquee images immediately (bypasses lazy loader)
  • Swaps data-srcsrc before measuring and cloning
  • Strips lazy-load classes from clones so the plugin doesn't re-process them
  • Removes <noscript> fallback tags from clones
  • Handles all common lazy attributes: data-src, data-srcset, data-lazy-src, data-lazy-srcset

v3.4.2

19 Feb 2026

Bug Fix

  • Fixed marquee jump at loop point — WordPress wpautop was inserting invisible <p> and <br> tags between child shortcodes, creating stray flex children that threw off the scroll distance calculation
  • PHP now strips wpautop junk before rendering child shortcodes
  • JS now removes stray DOM nodes and only measures .jwwd-marquee-item elements
  • Switched to getBoundingClientRect() for sub-pixel accurate width measurement

v3.4.1

19 Feb 2026

Use full-resolution source images instead of WordPress 'medium' (300px) thumbnails. CSS height constraint handles sizing.

v3.4.0

19 Feb 2026

What's New

WPBakery Container Pattern

The Marquee is now a container element with draggable Marquee Item children — just like "Icon with text" or "FAQ Section" work in WPBakery.

How it works:

  1. Drop a Marquee container onto your page
  2. Click + to add Marquee Item children
  3. Each item can have an image, title, and/or content — in any combination
  4. Drag items to reorder, duplicate, or delete them visually
  5. Configure speed, direction, gap, and height on the parent container

Benefits over previous approach

  • Add image-only, text-only, or mixed items in any order
  • Drag-and-drop reordering
  • Duplicate items with one click
  • Native WPBakery UX — no clunky repeater panels

Shortcode structure

[jwwd_marquee speed="30" direction="left" gap="40" height="50"]
  [jwwd_marquee_item image="123" title="Company A"]
  [jwwd_marquee_item title="Breaking news text here"]
  [jwwd_marquee_item image="456"]
[/jwwd_marquee]

v3.3.0

19 Feb 2026

What's New

Gallery Image Picker

  • Replaced the clunky param_group repeater with WPBakery's gallery picker (attach_images)
  • Click once, select all your images from the media library in one go
  • Images use their alt text / title for accessibility

Text Items

  • Simple textarea — one text item per line
  • Text items scroll alongside images in the marquee

Shortcode

[jwwd_marquee images="123,456,789" texts="Line one\nLine two" speed="30" direction="left" gap="40" height="50"]

v3.2.0

19 Feb 2026

What's New

JWWD Settings Page

  • New dedicated JWWD menu in wp-admin sidebar for the GitHub token
  • Removed the token field from Settings > General (cleaner separation)
  • Includes a direct link to generate a GitHub token with the right scopes
  • Menu registers once — plays nice when multiple JWWD plugins are active

WPBakery-Only Item Management

  • Marquee items are now managed entirely within the WPBakery module
  • Add items with image picker, title, and content fields — all inline
  • No more jumping out to a separate Marquee Messages screen
  • Removed the standalone Custom Post Type and its admin menu

Shortcode

[jwwd_marquee speed="30" direction="left" gap="40" height="50" items="..."]

Items are now passed via WPBakery's param_group repeater attribute.

v3.1.0

19 Feb 2026

What's New

Image Support

  • Marquee items now support featured images via WordPress thumbnails
  • Items can be image-only, text-only, or image + text side by side
  • New height shortcode attribute (default 50px) constrains image dimensions

Pixel-Perfect Scrolling

  • Replaced percentage-based CSS animation with exact pixel calculations
  • JavaScript waits for all images to load before measuring and cloning
  • Even spacing maintained at the loop seam point
  • GPU-accelerated transforms via will-change

3-Tier GitHub Token System

  • Tier 1: Shared jwwd_github_token option (Settings → General)
  • Tier 2: Plugin-specific jwwd_marquee_github_token option
  • Tier 3: JWWD_GITHUB_TOKEN constant in wp-config.php

WPBakery

  • New Height parameter added to the Marquee element
  • Continues to appear under the JWWD category

Shortcode Usage

[jwwd_marquee speed="30" direction="left" gap="40" height="50"]

v3.0.0

17 Feb 2026

JWWD Marquee v3.0.0

Complete rebrand from HSAS Marquee to JWWD Marquee.

Changes

  • Renamed all hsas_ prefixes to jwwd_marquee_
  • Added GitHub auto-updater with shared jwwd_github_token
  • Added CPT migration from hsas_marquee_message to jwwd_marquee_message
  • Added WPBakery Page Builder integration (JWWD category)
  • Added Hub tracker integration with version-based ping
  • Backward-compatible [hsas_marquee] shortcode still works
  • Cleans up old HSAS cron hooks on deactivation