Hey,
Pretty much the question in the title. But if you have any alternative that are easy to integrate it would be great.
All the best,
Hey,
Pretty much the question in the title. But if you have any alternative that are easy to integrate it would be great.
All the best,
This is my website: howickcatholic.org.nz - courtesy of Claude ![]()
If this is what you want, paste the following into a HTML module: -
.scrolling-line { position: fixed; bottom: 0; left: 0; width: 100%; background: #fff8e1; border-top: 2px solid #e6b800; color: black; overflow: hidden; z-index: 9999; padding: 6px 0; } .ticker-track { display: inline-flex; white-space: nowrap; padding: 4px 0; font-size: 1.1em; } ยทยทยทยทยท
</span>
<span class="ticker-copy">
Welcome to our parish website ยทยทยทยทยท
<span style="color:red;">ยทยทยทยทยท Next Alpha programme starts 2 August โ sign up now ยทยทยทยทยท </span>
ยทยทยทยทยท Visit the parish Noticeboard ยทยทยทยทยท
<span style="color:red;">ยทยทยทยทยท Pope Leo has issued a document about AI โ see Noticeboard. Also his life story there ยทยทยทยทยท </span>
</span>
let offset; // how far weโve scrolled (px). negative = text still coming in from right
let copyWidth;
let lastTime = null;
let pauseUntil = 0;
let initialized = false;
function init() {
copyWidth = copy.offsetWidth;
const containerWidth = track.parentElement.offsetWidth;
offset = -containerWidth; // start with text just off the right edge
initialized = true;
requestAnimationFrame(step);
}
function step(timestamp) {
if (!initialized) return;
if (!lastTime) lastTime = timestamp;
const now = timestamp;
if (now < pauseUntil) {
// Still pausing โ hold position, keep rAF alive
lastTime = now;
requestAnimationFrame(step);
return;
}
const delta = (now - lastTime) / 1000;
lastTime = now;
const prevOffset = offset;
offset += speed * delta;
// Did we cross zero this frame? (text start arriving at left edge)
if (prevOffset < 0 && offset >= 0) {
offset = 0;
pauseUntil = now + pauseMs;
track.style.transform = 'translateX(0px)';
requestAnimationFrame(step);
return;
}
// Seamless loop: once past one full copy, wrap back
if (offset >= copyWidth) {
const prevWas = offset;
offset -= copyWidth;
// If the wrap itself crossed zero, pause
if (prevWas >= copyWidth && offset >= 0 && offset < speed / 30) {
offset = 0;
pauseUntil = now + pauseMs;
track.style.transform = 'translateX(0px)';
requestAnimationFrame(step);
return;
}
}
track.style.transform = 'translateX(' + (-offset) + 'px)';
requestAnimationFrame(step);
}
setTimeout(init, 300);
})();
Formidable !
Best from France