Code Monkey home page Code Monkey logo

react-visibility-sensor's Introduction

React Visibility Sensor

Build Status

Sensor component for React that notifies you when it goes in or out of the window viewport.

Sponsored by X-Team

Install

npm install react-visibility-sensor

Including the script directly

Useful if you want to use with bower, or in a plain old <script> tag.

In this case, make sure that React and ReactDOM are already loaded and globally accessible.

Take a look at the umd example to see this in action

Example

View an example on codesandbox

Or if you'd like to try building an example yourself locally, here's another:

View the example

To run the example locally:

  • npm run build-example
  • open example/index.html in a browser

General usage goes something like:

const VisibilitySensor = require('react-visibility-sensor');

function onChange (isVisible) {
  console.log('Element is now %s', isVisible ? 'visible' : 'hidden');
}

function MyComponent (props) {
  return (
    <VisibilitySensor onChange={onChange}>
      <div>...content goes here...</div>
    </VisibilitySensor>
  );
}

You can also pass a child function, which can be convenient if you don't need to store the visibility anywhere:

function MyComponent (props) {
  return (
    <VisibilitySensor>
      {({isVisible}) =>
        <div>I am {isVisible ? 'visible' : 'invisible'}</div>
      }
    </VisibilitySensor>
  );
}

Props

  • onChange: callback for whenever the element changes from being within the window viewport or not. Function is called with 1 argument (isVisible: boolean)
  • active: (default true) boolean flag for enabling / disabling the sensor. When active !== true the sensor will not fire the onChange callback.
  • partialVisibility: (default false) consider element visible if only part of it is visible. Also possible values are - 'top', 'right', 'bottom', 'left' - in case it's needed to detect when one of these become visible explicitly.
  • offset: (default {}) with offset you can define amount of px from one side when the visibility should already change. So in example setting offset={{top:10}} means that the visibility changes hidden when there is less than 10px to top of the viewport. Offset works along with partialVisibility
  • minTopValue: (default 0) consider element visible if only part of it is visible and a minimum amount of pixels could be set, so if at least 100px are in viewport, we mark element as visible.
  • intervalCheck: (default true) when this is true, it gives you the possibility to check if the element is in view even if it wasn't because of a user scroll
  • intervalDelay: (default 100) integer, number of milliseconds between checking the element's position in relation the the window viewport. Making this number too low will have a negative impact on performance.
  • scrollCheck: (default: false) by making this true, the scroll listener is enabled.
  • scrollDelay: (default: 250) is the debounce rate at which the check is triggered. Ex: 250ms after the user stopped scrolling.
  • scrollThrottle: (default: -1) by specifying a value > -1, you are enabling throttle instead of the delay to trigger checks on scroll event. Throttle supercedes delay.
  • resizeCheck: (default: false) by making this true, the resize listener is enabled. Resize listener only listens to the window.
  • resizeDelay: (default: 250) is the debounce rate at which the check is triggered. Ex: 250ms after the user stopped resizing.
  • resizeThrottle: (default: -1) by specifying a value > -1, you are enabling throttle instead of the delay to trigger checks on resize event. Throttle supercedes delay.
  • containment: (optional) element to use as a viewport when checking visibility. Default behaviour is to use the browser window as viewport.
  • delayedCall: (default false) if is set to true, wont execute on page load ( prevents react apps triggering elements as visible before styles are loaded )
  • children: can be a React element or a function. If you provide a function, it will be called with 1 argument {isVisible: ?boolean, visibilityRect: Object}

It's possible to use both intervalCheck and scrollCheck together. This means you can detect most visibility changes quickly with scrollCheck, and an intervalCheck with a higher intervalDelay will act as a fallback for other visibility events, such as resize of a container.

Thanks

Special thanks to contributors

License

MIT

react-visibility-sensor's People

Contributors

andarist avatar b-stefan avatar bramschulting avatar camjc avatar chiefgui avatar danistefanovic avatar eugenehlushko avatar falcon1kr avatar gaearon avatar jedwards1211 avatar joshwnj avatar julienbachmann avatar kaptron avatar klaasvaak avatar kof avatar kompot avatar mackenziekira avatar neeharv avatar neurosnap avatar nguongphuc avatar npmcdn-to-unpkg-bot avatar rmariuzzo avatar rosswarren avatar shirokoff avatar stevewillard avatar timtyrrell avatar williamboman avatar zakness avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-visibility-sensor's Issues

Problem with ReactDOM.findDOMNode(this) in visibility-sensor.js

I had a bug which after some investigation I tracked down to the following in visibility-sensor.js

  var el = ReactDOM.findDOMNode(this);

For me this was selecting the child span in the sensor rather than the actual sensor element. This was throwing off the results from getBoundingClientRect on the next line.

I'm not familiar enough with React yet to know why the child node is being returned instead of the component node. I've read up on it and my understanding is that it should return the parent.

For now I've edited the line to be:

var el = ReactDOM.findDOMNode(this).parentNode;

Which selects the correct element. But I would like to know why. Does anyone have any insight.

Could it be related to the sensor elements being absolutely positioned?

Unable to build the example

npm run build-example

> [email protected] build-example /Users/dan/p/react-visibility-sensor
> browserify -t reactify -o example/dist/bundle.js example/main.js

events.js:141
      throw er; // Unhandled 'error' event
            ^
Error: ENOENT: no such file or directory, open 'example/dist/bundle.js'

Revamp API to cleanly separate configuration and effects

This is a more philosophical question about the API of this lib

Currently, the component depends on its effects propagating upwards by a lifecycle-ish onChange method, which usually triggers a change in state of the parent component / update store etc. However, this approach merges together the configuration of the component (scrollDelay, intervalDelay etc), with its effects (onChange), which makes it slightly confusing to grok IMO.

Inspired by React Router v4, I propose the following API

const MyVisibilitySensor = createSensor({
  delayInterval : 200,
  // other opts
});

const App = () => (
  <MyVisibilitySensor>
    {
      ({ isVisible }) => (
        isVisible ? <MainImage /> : <PlaceholderImage />
      )
    }
  </MyVisibilitySensor>
);

This separates concerns very nicely, and also avoids the overhead of having a situation where we have a hierarchy of parent component -> visibility sensor, and the onChange callback triggers a re-render from the parent component downwards. It helps avoid one layer of lifting state up, and is easier to read IMO.

Thoughts?

Partial visibility issue

Scenario:

  1. List of observed items and checking partial visibility with containment
  2. New item added to the list -> componentDidMount with active flag so watching begins
  3. as I have partialVisibility on I get isVisible and onChange fires
  4. my custom callback depends on the second parameter as I need to check against visibilityRect.bottom which is false at the moment - my component had no chance yet to scroll down
  5. my component scrolling down in its componentDidUpdate
  6. checker checking each interval against this.state.isVisible !== isVisible to fire callback again and its previous run get me true cause of the partialVisibility and once again its true cause nothing changes

However for my use case it is a change I need to detect.

I have in my mind couple workaround for this issue, but I think this should be somehow tackled by a library and I can fix it, but aint sure what kind of fix should I apply. Any ideas @joshwnj?

Unable to use this with Require Js

Attempted using this nice component with Require Js using UMD way

Issue - Since It tries to locate React and ReactDOM in globally(window object) and fails as requires doesn't do global exports.

var React = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
var ReactDOM = (typeof window !== "undefined" ? window['ReactDOM'] : typeof global !== "undefined" ? global['ReactDOM'] : null);

With my basic understanding, i managed to get it to work if above piece of code somehow checks require('react') and require('react-dom').

Request suggestion to solve this.

containment prop doesn't seem to work with position absolute frame

I'm trying to do an infinite scrolling pagination with the code below. I have a leftPanel component which is within a dashboard layout, so I thought by setting the containment will be fine. The problem is the onChange method called during the first render, I wonder what's wrong.


import { Component, PropTypes } from 'react'

// helpers
import { isEmpty, map, isEqual } from 'lodash'
import { routeUrl } from '~/utils/stringHelper'

// components
import { Link } from 'react-router'
import EmptyState from '~/components/common/EmptyState'
import Loading from '~/components/common/Loading'
import VisibilitySensor from 'react-visibility-sensor'

//styles
import './index.less'

class LeftPanel extends Component {

	constructor() {
		super()
		this.state = {
			page: 1,
			noMore: false
		}
	}

	componentWillReceiveProps(nextProps) {
		if(isEmpty(nextProps.conversations)){
			this.setState({ page: 1 })
		}
	}


	componentDidMount() {

	    this.container = document.getElementById('subjects-container')
	}

	componentWillUnmount() {
	}

	handleLoaderInview = () => {

		console.log('call') // triggered on the first time although the loader is not visible

		if(this.props.conversations.length !== this.props.conversationsTotal) {
			this.setState({
				page: this.state.page + 1
			}, () => {
				console.log('fetchConversations')
				this.props.fetchConversations(this.state.page)
			})
		}else{
			this.setState({
				noMore: true
			})
		}
	}

	render() {
		const { openArchive } = this.props

	    return(
	        <div className="leftPanel">
	        	<div id="subjects-container" className="subjects-wrap">
	        		{(!this.props.isLoading && isEmpty(this.props.conversations)) && <EmptyState style={{marginTop:'40px'}} message={Lang.get('inbox.conversations.emptystate')} />}
					{!isEmpty(this.props.conversations) &&
		        		map(this.props.conversations, (conversation, index) => (
							<Subject
								className={this.props.selectedConversationId === conversation.id ? 'active': '' }
								key={index} 
								index={index}
								conversation={conversation} 
								getConversationMsg={this.props.getConversationMsg}
							/>
						))
	        		}

        			<VisibilitySensor scrollCheck={true} active={!this.state.noMore && this.props.conversations.length !== this.props.conversationsTotal} containment={this.container} onChange={this.handleLoaderInview} >
						<Loading className="loading-sm" />
        			</VisibilitySensor>
	        	</div>

	        	{openArchive && <Archive {...this.props} />}
	        </div>
	    )
	}
}

export default LeftPanel

Set isVisible manually via props

I have a need to reset isVisible value manually via props. The reason I need it is because I am using active: false option, which means auto check of visibility is disabled. The logical consequence of that is an element doesn't get a signal when its hidden and once it becomes visible again it "thinks" it is already visible and doesn't triggers the onChange callback.

I will send you a pull request in a bit.

containment example

Hi @kof, thanks for your recent contribution. I had a go at adding this to the example page: http://joshwnj.github.io/react-visibility-sensor/ It's pretty ugly but hopefully gets the functionality across :P

When you have a moment could you please take a look and let me know if this is the way you imagined it being used? Also let me know if you think there is anything else that would be good to demonstrate on the example page.

Thanks!

Support 0.14

Probably it's time to update react version number in package.json?

this.props.containment.getBoundingClientRect is not a function when using containment props

I'm not sure if this is a bug or a wrong usage issue.
Task: call view method if div is in the viewport.
My implementation:

render() {
  const onChange = function (isVisible) {
    return isVisible ? this.view : null;
  };

  return (
    <VisibilitySensor onChange={onChange} containment>
       <div className="thediv"></div>
    </VisibilitySensor>
  )
}

I get this.props.containment.getBoundingClientRect is not a function in the console. What am I doing wrong?

Update to React 16

This warning gets printed when you install react-visibility-sensor in a project that uses React 16:

npm WARN [email protected] requires a peer of react@^0.14.0 || ^15.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of react-dom@^0.14.0 || ^15.0.0 but none is installed. You must install peer dependencies yourself.

It seems to work fine though

VisibilitySensor onChange triggers on render

My component looks something like this

class MyComponent extends Component {
   onChange(isVisible){
       this.setState({visCount : this.state.visCount + 1}) // 
   }
   render(){
       return <div><VisibilitySensor onChange={(v)=>this.onChange(v)} /></div>
   }
}

The issue is onChange is getting triggered on every render, which then triggers another render so visCount keep auto-incrementing. Am I doing something wrong here? How are you supposed to use setState in onChange?

Deprecated warning

Hey @joshwnj,

First, thanks for this usefull component 👍
I got this warning:

Warning: VisibilitySensor.getDOMNode(...) is deprecated. Please use ReactDOM.findDOMNode(instance) instead.

findDOMNode was called on an unmounted component

We're using react-visibilty-sensor to animate pictures on our home page, and we use https://sentry.io to monitor errors on client side.

We've got multiple reports on the following issue: "Invariant Violation: findDOMNode was called on an unmounted component"
This happens in visibility-sensor.js, there:

  /**
   * Check if the element is within the visible viewport
   */
  check: function () {
    var el = ReactDOM.findDOMNode(this);
    var rect;
    var containmentRect;

(on Chrome mobile 56.0.2924)

I can't reproduce on my computer, but looks related to the tabs "Je suis propriétaire / Je suis acquéreur".

What I understand from your code is that at the end there's no real issue, because if you can't find the node you do nothing. But that warning is a bit annoying.

I presume the issue comes from a last check() call by "debounceCheck", because you don't clear the setTimeout l.21 on stopWatching

Need help with using "offset" properly

Hi @joshwnj, community members,

Thanks for building and maintaining this package. It has turned out to be of great help !

--
In a project I'm working on, I need to track the visibility of divs that stay on screen. The vertical height of each div might be greater than that of the viewport (window in my case), and hence I'm using :

partialVisibility={'top'} // also tried true
offset={{top: 100}} // also tried negative offset on bottom

What I want to achieve is if more than kpx from the top is in the viewport, than mark it as visible.

I've created a small widget to check the visibility in real time. And my code above doesn't seem to work. Here is the wrapper that I use over the visibility sensor :

import React from 'react';
import ReactVisibilitySensor from 'react-visibility-sensor';

class VisibilitySensor extends React.Component {
  render() {
    return (<div>
      <ReactVisibilitySensor
        onChange={this.props.onChange}
        scrollCheck={true}
        resizeCheck={true}
        scrollThrottle={100}
        intervalDelay={8000}
        partialVisibility={'top'}
        offset={{
          top: 100
        }}
      >
        {this.props.children}
      </ReactVisibilitySensor>
    </div>);
  }
}

export default VisibilitySensor;

And here is a screenshot of my app :
(As you can see on the right, no page is marked visible, I want the partial page in viewport, to be marked visible)
screen shot 2017-05-13 at 7 52 53 pm

What am I doing wrong here ?

Thanks.

VisibilitySensor should accept attributes

So that I can use VisibilitySensor as a container for the contents instead of having additional element just for the position/size measurements.

Also right now even if I want to put this as a separate element, it needs to get the same width and hight as the element I want to be notified about viewport. So it needs to support width/height or className over props anyways.

How to use it with older version of React 0.14.7

Hi, We are using react 0.14.7, we will not be able to upgrade the version. When I try to use this component, I get following warning
Warning: Failed propType: Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types

View port of a parent optionally

Hi, can we add posibilty to check whether the element is in viewport relatively to an optionally passed parent element? This is for scrollable containers, when you want to know if an element is outside of the visible area and container needs to be scrolled.

Does not handle components that can render to null

Scenario:

const Foo = (props) => (
  {props.greet ? <div>Hello, there.</div> : null}
)

<VisibilitySensor>
  <Foo greet={false} />
</VisibilitySensor>

In this case, VisibilitySensor breaks with the following error:

Uncaught TypeError: Cannot read property 'getBoundingClientRect' of null

[v2.1.0] Setting state inside callback causes infinite loop

If I perform something as simple as

this.setState({
internal_visibility: visibility
}, function() {
console.log("Hello from follow up method");
});

It triggers this callback again and again with given delay. Is this by design? If I don't do anything inside the callback function except for a console.log message, it handles it the way I expect it to, i.e. the callback function is not fired except when viewport / window changes / scrolls.

Also noticed that isVisible state variable becomes null inside VisibilitySensor component whenever I change a state variable on the callback function in parent.

UMD: Uncaught Error: Cannot find module 'react'

Have an issue with the versions >= 3.9.0, most probably because of 'Migrated deprecated React.PropTypes and React.createClass' update.

Example: using the visibility sensor at url https://unpkg.com/[email protected]/dist/visibility-sensor.js after the react,js script I get:

Uncaught Error: Cannot find module 'react'
at s (visibility-sensor.3.10.1.js:1)
at visibility-sensor.3.10.1.js:1
at Object.3../factory (visibility-sensor.3.10.1.js:779)
at s (visibility-sensor.3.10.1.js:1)
at visibility-sensor.3.10.1.js:1
at Object. (visibility-sensor.3.10.1.js:1737)
at Object.14../lib/is-visible-with-offset (visibility-sensor.3.10.1.js:2057)
at s (visibility-sensor.3.10.1.js:1)
at e (visibility-sensor.3.10.1.js:1)
at visibility-sensor.3.10.1.js:1

Also using the umd versions for:
react-15.6.1
mobx.3.2.2
mobx-react.4.2.2
babel-standalone.6.23.1
babel-polyfill.6.23.0

peer dependency problem

Hello.
I'm a big fan of ur package and I really have used it well.

but, recently I tried to upgrade package version.
then I met peer dependency problem with react 15.3.1.

below is the error message.

└── UNMET PEER DEPENDENCY [email protected] invalid

and it installed 3.2.1 version. (what I tried was 3.4.0)

and I use [email protected] at node v6.5.0

Modernise codebase discussion

Looking to kickstart some discussion around modernising the code base and future features

  • Switch to ES6 classes instead of create-react-class - much easier for newcomers to React to understand the code with this, plus it's increasingly the recommended way across the ecosystem
  • Switch to ES6 for the codebase - (this isn't a lot actually, mostly var -> let/const, arrow functions etc)
  • Use the setState(fn) form rather than the setState(obj) form in anticipation of priorities in fiber
  • Figure out build process if using ES6 (rollup/webpack + babel)
  • Add support for requestAnimationFrame for high performance scroll listeners
  • Support passive event listeners for better perf
  • In modern browsers with Intersection Observer support, use that instead of JS calculations (eventually over time this lib should become a wrapper around that w/ polyfill for older browsers?)
  • More "functional" API (refer #74)

Don't wrap the children

Is there any real need to wrap the children in a div?
React.findDOMNode will work just fine even if you just return this.props.children from render.

For extra safety, you can return React.Children.only(this.props.children). This will force the consumer to supply a single child (which is the DOM node that will be tracked).

support for style.display check

Hello.

onChange reports isVisible === true even though this DOM display style is none.
Would you consider supporting the check of the display style?

// visibility-sensor.js
if(this.props.displayCheck) {
    var elStyle = window.getComputedStyle(el);
    isVisible = isVisible && elStyle.display !== 'none';
}
<VisibilitySensor displayCheck={ true } onChange={ whatever }>
  <div style={ {display: 'none'} }> Testing Div </div>
</VisibilitySensor>

problem with the library when it is working inside the webview

I have some problem with the library when it is working inside the webview
actually our all videos is start playing as the page get rendered and the video is still not in the viewport
and we have enabled the setMediaPlaybackRequiresUserGesture 'true' in the android webview.

Improve examples

Now that we've got quite a few different options it would be great to make examples that cover all the bases.

Maybe a bunch of jsbin / codepen examples showing different combinations of options.

Maybe even an interactive demo where you can adjust / switch props and see how it changes behaviour.

Collaborators

Dear

thank you for your past contribution to this project! If you would be interested to become a collaborator, I would love to collaborate with you :) Just put your name down and we can talk plans.

Next week I'll kick off a discussion around next steps, including:

  • improving demos & documentation
  • rewrite for version 4, and important considerations for upgrade path
  • your idea!

Thanks again for your help

Upgrade path from v1 to v2

@kof & @gaearon, continuing from #13 I'd like to get your thoughts on how to make a smooth transition.

I like the improved transparency of assigning child DOM nodes directly, rather than passing className and style as props. But I understand there may be more implications to the change than I've thought through.

@kof could you please give some details about what broke in your code with the upgrade, and whether you see any other concerns or blockers to making a smooth transition?

Remove the reactify transform from package.json

Since I replaced reactify by babelify, I get the following error when I try to browserify my project using your module:

Error: Cannot find module 'reactify' from '/Users/mvila/Projects-next/avc-online/node_modules/react-visibility-sensor'

I think you should remove the reactify transform from your package.json and find another way to reactify your tests/examples.

Offset for partialVisibility

I think a good addition would be to add an offset to partialVisibility (required px from different sides in order for the element to be visible or not) it would be very useful for elements that are almost as big as the viewport.

Same as how the offset from jquery appear plugin works. I can try to implement and send a PR but after #41 is merged.

Evaluate IntersectionObserver support

Suggested by @Andarist in #54 (comment)

What would you say about implementing IntersectionObserver support? It could even be the default with scroll and interval being used only as a fallback settings. Its already implemented in 2 browsers.

https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API

It would be cool to try this, and compare to the current approach. We can try the polyfill for browsers that don't support it yet:

https://github.com/WICG/IntersectionObserver/tree/gh-pages/polyfill

http://caniuse.com/#search=Intersection

Reporting isVisible for free element

For elements that do not have a size in the DOM, react-visibility-sensor currently reports that it is visible.

I think this should be the first check:

if (rect.top + rect.right + rect.bottom + rect.left + rect.width === 0) {
  isVisible = false;
}

Offset doesn't seem to work

Hello, I tried out different combinations of direction and positive/negative values for the offset but it seems it doesn't work.

If I have the offset enabled the sensor never fires.

visibilitysensor for horizontal elements

I have a div which has many children and div has overflow-x scroll, as soon as parents div comes in viewport it fires isVisible true for all child, but I want isVisible true only when child elements comes in visible part of viewport.

is it support old Android Browser?

First of all, sorry for it's not an issue.

and I really appreciate your package.

but I really wonder that it works well at the some old Android browsers. (maybe 4.2~4.4?)

Problem with element that is bigger than viewport

When I have an element that is bigger that the viewport the onChange will never trigger with true.

That's because we're doing the following check:

var visibilityRect = {
      top: rect.top >= containmentRect.top,
      left: rect.left >= containmentRect.left,
      bottom: rect.bottom <= containmentRect.bottom,
      right: rect.right <= containmentRect.right
    };

So in any given moment the rect.bottom <= containmentRect.bottom && rect.top >= containmentRect.top will be true.

The solution is to change state to be some kind of enum (NONE, TOP, BOTTOM, COMPLETE), so we'll able to trigger onChange(true) when TOP && BOTTOM exists.

As mixin?

This would be amazingly useful as a mixin, rather than a component, so you can do

var MyComponent = React.createClass({
  mixins: [
    require("react-visibility-sensor")
  ],

  render: function() {
    if(this.state.visible) { ... }
    else { ... }
  },

  ...
});

where the mixin taps into getInitialState to add the visible property, and the componentDidMount and componentWillUnmount to add/remove the event listeners, respectively

Elements taller than the page can be shown as not even partially visible

If your element is taller than the page, and it's top is above the page, and it's bottom is below the page, partialVertical can still end up as false.

Here's the problem:

var partialVertical =
        (rect.top >= containmentRect.top && rect.top <= containmentRect.bottom)
     || (rect.bottom >= containmentRect.top && rect.bottom <= containmentRect.bottom);

I suggest adding
|| (rect.top <= containmentRect.top && rect.bottom >= containmentRect.bottom);

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.