npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-ticker

v1.3.2

Published

React Ticker is a lightweight, performant React component, that moves text, images and videos infinitely like a newsticker.

Downloads

36,781

Readme

React Ticker

NPM JavaScript Style Guide

React Ticker is a lightweight, performant React component, that moves text, images and videos infinitely like a newsticker.

It can be used to replace the deprecated marquee-HTML-tag.

Check out the Demo!

Features:

  • Move its child-elements from right to left or left to right.
  • Dynamically create child-elements, for example from an API. (Does not work for dynamic widths yet!)
  • Repeat the elements infinitely.
  • Three different modes of repetition.
  • Control speed, starting and stopping.
  • Define start offset.

Getting started

  1. Install the package with npm or yarn

    npm install react-ticker

    yarn add react-ticker

  2. Use it in your React components!

import React from 'react'
import Ticker from 'react-ticker'

const MoveStuffAround = () => (
    <Ticker>
        {({ index }) => (
            <>
                <h1>This is the Headline of element #{index}!</h1>
                <img src="www.my-image-source.com/" alt=""/>
            </>
        )}
    </Ticker>
)

export default MoveStuffAround

Take a look at the CodeSandbox.

Props

| Name | Type | Default | Description | | :-------- | :--------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | speed | number | 5 | | | direction | string | toLeft | Opposite direction: toRight | | mode | string | chain | chain By default, the elements follow one and another immediately. await A new element appears as soon as the previous one has disappeared completely. smooth A new element appears as soon as the previous one starts to disappear. | | height | string or number | auto | Auto-height: By default, the Ticker will adapt the height of its highest visible child. Fixed height: Alternatively you can give it a fixed height: A number will be set as pixels, a string can be everything. | | offset | string or number | 0 | By default, the first element in the Ticker will align to the Tickers left side. Fixed Offset: A number will move the Ticker's first child to the right by n pixel. Relative Offset: The offset can also be defined in percent of the Ticker’s width. Run-in: The string run-in hides the first element, so the Ticker starts empty. | | move | boolean | true | Set to false stops the Ticker. | | onNext | function | (index) => {} | Return the index of the next element to the parent component | | onFinish | function | () => {} | Tell the parent component that one element is out of screen |

Gotchas

Await loading webfonts

If you want to move text around, be sure, that your webfonts have loaded, before you initiate the Ticker-component! Otherwise the widths might be calculated wrong for the first iteration. To await your webfonts, try out Web Font Loader.

Avoid linebreaks

If you want to avoid linebreaks in your text-elements, use the CSS-property white-space: nowrap;.

Dynamic loading of elements

It is possible to dynamically load new elements. This feature is still experimental. It only works properly, if you use the property offset="run-in" and provide a placeholder while loading.

const GetRatesFromAPI = () => {
  const [rates, setRates] = useState("");
  useEffect(() => {
    async function fetchData() {
      const ratesFromAPI = await makeAPICall();
      setRates(ratesFromAPI);
    }
    fetchData();
  }, []);
  // A placeholder is needed, to tell react-ticker, that width and height might have changed
  // It uses MutationObserver internally
  return rates ? (
    <p style={{ whiteSpace: "nowrap" }}>{rates.join(" +++ ")} +++ </p>
  ) : (
    <p style={{ visibility: "hidden" }}>Placeholder</p>
  );
};

function StockTicker() {
  return (
    <Ticker offset="run-in" speed={10}>
      {() => <GetRatesFromAPI />}
    </Ticker>
  );
}

export default StockTicker;

React Ticker calls its function-as-child anytime it runs out of content. It does not matter, if this function is a static component or a component, that loads content from an API. It is important, that you provide a placeholder during the loading time of the API-call, to trigger the mutation observer when the content has arrived.

Render only if browser-tab is visible

Currently react-ticker runs out of elements, when you leave the browser tab. To fix it, there is this workaround using the Page Visibility API utilized by this great Module: react-page-visibility

import React, { useState } from 'react'
import Ticker from 'react-ticker'
import PageVisibility from 'react-page-visibility'

const MoveStuffAround = () => {
  const [pageIsVisible, setPageIsVisible] = useState(true)

  const handleVisibilityChange = (isVisible) => {
    setPageIsVisible(isVisible)
  }

  return (
    <PageVisibility onChange={handleVisibilityChange}>
      {pageIsVisible && (
        <Ticker>
          {({ index }) => (
              <>
                  <h1>This is the Headline of element #{index}!</h1>
                  <img src="www.my-image-source.com/" alt=""/>
              </>
          )}
        </Ticker>
      )}
    </PageVisibility>
  )
}

export default MoveStuffAround

Dependencies

React Ticker has no dependecies besides React 16+ (the minimum minor-release still has to be looked up).

Browser Support

React Ticker should work in all current browsers as well as Internet Explorer 11. If you discover bugs in older browser versions, please file an issue!

Contributing

Every contribution is very much appreciated. Feel free to file bugs, feature- and pull-requests.

If this plugin is helpful for you, please star it on GitHub.

License

MIT © https://github.com/AndreasFaust