Giter Site home page Giter Site logo

roowilliams / react-ticker Goto Github PK

View Code? Open in Web Editor NEW

This project forked from andreasfaust/react-ticker

0.0 1.0 0.0 16.12 MB

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

Home Page: https://andreasfaust.github.io/react-ticker/

HTML 1.39% JavaScript 61.85% CSS 35.65% TypeScript 1.12%

react-ticker's Introduction

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.

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

react-ticker's People

Contributors

roowilliams avatar 9renpoto avatar davidohlin avatar dimo89 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.