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

ap-viewport-watch

v0.1.43

Published

Npm version of https://github.com/wix/angular-viewport-watch

Downloads

1,130

Readme

Angular Viewport Watch Build Status Coverage Status

Boost performance of Angular's ng-repeat directive for long lists by disabling watchers while elements are not displayed inside viewport.

Demo: http://shahata.github.io/angular-viewport-watch/

BTW, ng-repeat is just an example, this directive will work on anything.

What it does

Displaying long lists of items is a big pain in angular since they add many more watchers to the scope which makes the digest loop longer. Since every model change in angular triggers a digest loop, even a simple thing like typing a name inside some input field might become sluggish if a long list of some items is displayed on the page at the same time.

Angular 1.3 added a bind-once mechanism which removes watchers once they receive a value, but this only helps if the list you are displaying is static. What about cases where your list contains dynamic information which might change at any moment? Bind-once will not help you in those cases.

This library introduces a simple directive named viewport-watch which solves this issue by disabling watchers that are currently out of the viewport and makes sure they get enabled and updated with their correct value the moment they come back into the viewport. This means that at any moment, the amount of items being watched is not greater then the amount of items that fit into the user's screen. This obviously cuts down the digest loop length by orders of magnitude.

Installation

Install using bower

bower install --save angular-viewport-watch

Include script tag in your html document.

<script src="bower_components/scrollMonitor/scrollMonitor.js"></script>
<script src="bower_components/angular-viewport-watch/angular-viewport-watch.js"></script>

Add a dependency to your application module.

angular.module('myApp', ['angularViewportWatch']);

Directive Usage

<div ng-repeat="item in items" viewport-watch>...</div>

Manual watcher toggling

In some cases you might want to disable or enable the watchers of some scope regardless of its position relative to the view port. This can be done easily by broadcasting an event to this scope (this will effect only scopes that have the viewport-watch directive on them):

scope.$broadcast('toggleWatchers', false); //turn off watchers
scope.$broadcast('toggleWatchers', true);  //turn watchers back on

License

The MIT License.

See LICENSE