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

bokehfy

v0.2.2

Published

Add a flickering bokeh experience to any DOM element.

Downloads

18

Readme

Bokehfy

A small library to add animated bokeh effects to the DOM

Demo

Screenshot

Getting Started

In Node.js:

npm i -S bokehfy
import bokehfy from 'bokehfy'

or

const bokehfy = require('bokehfy')

In the browser:

Add bokehfy.min.js to your webpage.

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/bokehfy.min.js"></script>

Downloaded

Download Minified library

import bokehfy from './bokehfy.min.js'

Create a new Bokeh field instance by calling bokehfy()

bokehfy()

Save the result of bokehfy() to a variable to have access to additional methods during runtime.

const field = bokehfy()

Instantiation parameters

Valid parameters: no parameters, a DOM element, a settings object (with or without a DOM element parent included)

  • No parameters: it will create a full-size instance with default parameters and prepend it to the window.document.body.

    const field = bokehfy()
  • Valid DOM element: an instance will be created and prepended to the DOM element with default paramters.

    const container = document.getElementById('container')
    const field = bokehfy(container)
  • Settings object with key/value pair {parent: Valid DOM Element}.

    const container = document.getElementById('container')
    
    const settings = {
        backgroundColor: '#00FF00', 
        parent: container
    }
    
    const field = bokehfy(settings)
  • Settings object with no parent key then the DOM body will be assumed.

    const setup = {
        dx: 0,
        dy: 0,
        framerate: 10,
        gradient: ['red', 'pink'],
        density: 200,
        radius: 100,
        halflife: 1000,
        transparent: false,
        backgroundColor: '#AAA'
    }
    
    const field = bokehfy(setup)

bokehfy() will return null in the case of an invalid parent element being passed, either alone or in the settings object.

Valid initial settings parameters:

  • parent: DOM Element,
  • backgroundColor: string,
  • transparent: boolean,
  • color: string,
  • star: string,
  • gradient: array of strings,
  • radius: number (0.00001 - 1000),
  • halflife: number (0.00001 - 10000),
  • density: number (0 - 2000),
  • framerate: number (0 - 10000),
  • dx: number (0 - 10000),
  • dy: number (0 - 10000)

Note: Color, star, and gradient will overwrite each other. JS does not guarantee which order an object will be iterated through and it's not possible to guarantee which value will end up being processed last and therefore displayed.

Note: The canvas object that bokeh creates is absolutely positioned. If the element you attach it to does not have relative positioning set, the canvas may not behave as expected.


*bokehfy() makes use of Tiny Color for color validation and conversion. Any valid CSS color format should work.

If you wish to use a smaller custom version of this library without color verification. You can easily remove Tiny Color from the Bokeh API color methods and it should reduce the bundle size by 60%*


Methods

start

field.start()

stop

field.stop()

pause

field.pause()

Cancel requestAnimationFrame until pause() or start() is called again.

delete

field.delete()

Stop animation, remove window listeners, and remove the field instance from its DOM parent.

getSettings

const currentState = field.getSettings()
//{
//    transparent: false,
//    backgroundColor: {r: 0, g: 0, b: 0, a: 0.5},
//    gradient: [
//        {r: 255, g: 255, b: 255, a: 1},
//        {r: 255, g: 255, b: 255, a: 1},
//        {r: 255, g: 255, b: 255, a: 1}
//    ],
//    radius: 88,
//    halflife: 450,
//    dx: 5,
//    dy: 0.2,
//    density: 100   
//}

Returns an object representing the current field settings. (Individual points will deviate from the inital maximum dx, dy, and radius settings).

NOTE: Colors will be returned as an object with r,g,b,a keys.

toggleBackground

field.toggleBackground()

Toggle background transparency. No parameters.

transparent

field.transparent(true)

default = false

Set background transparency by passing a boolean value.

backgroundColor

field.backgroundColor('purple')
field.backgroundColor('#00FF00')

default = 'rgba(49, 159, 159, 1)'

Set new background color by passing a valid color as a string. Alpha values are supported for background color.

color

field.color('#ABC')

no default

Creates a solid color point with no gradient. Equivalent to calling gradient with an array with one element. eg field.gradient(['white]) Alpha values not supported (auto generated)

gradient

field.gradient(['white'])
field.gradient(['orangered', 'salmon'])
field.gradient(['white', 'red', 'blue'])

default = ['white', 'white', 'white']

Accepts an array of colors in order of colorstop from 0-1 (more than three will be truncated to the first three).

  • One color will create a solid color point with no gradient.
  • Two colors will create a gradient with the first color at stop 0 and the second at stop 1.
  • Three colors will create a gradient with the first color at stop 0, the third at stop 1, and the second at a randomized stop somewhere between 0.4 and 0.6. Alpha values not supported (auto generated)

star

field.star('blue')

no default

Passing a single color will create a 3 stop gradient using white as the first stop and the passed color as the next two. Alpha values not supported (auto generated)

radius

field.radius(10)

default = 120

Pass valid number. Accepted range is 0.00001 - 1000. Valid numbers outside that range will be coerced to the nearest acceptable value.

stepRadius

field.stepRadius(0.5)

Pass valid number. Current radius will be incremented by passed value.

NOTE: If you increment the radius value directly with field.radius(), it will be randomized as if initially seeding. Use this method for smooth animations.

NOTE: If you seed radius at 0, all values will be equal sized. To have a range of point sizes, seed with a non-zero value before animating with this function.

halflife

field.halflife(500)

default = 750

Pass valid number. Accepted range is 0.00001 - 10000. Valid numbers outside that range will be coerced to the nearest acceptable value.

Halflife and radius work hand in hand. To better understand the relationship, you may want to play with the demo

density

field.density(100)

default = 90

Increase the number of points. Pass valid number. Accepted range is 0 - 2000. Valid numbers outside that range will be coerced to the nearest acceptable value.

Abusing the density is the quickest way to 'hot lap syndrome'

framerate

field.framerate(5)

default = 30

Pass valid number. Accepted range is 0 - 10000. Valid numbers outside that range will be coerced to the nearest acceptable value.

dx

field.dx(0)

default = 2

Horizontal point speed. Pass valid number. Accepted range is 0 - 10000. Valid numbers outside that range will be coerced to the nearest acceptable value.

stepDx

field.stepDx(0.5)

Pass valid number. Current dx will be incremented by passed value. NOTE: If you increment the dx value directly with field.dx(), it will be randomized as if initially seeding. Use this method for smooth animations.

dy

field.dy(10)

default = 2

Vertical point speed. Pass valid number. Accepted range is 0 - 10000. Valid numbers outside that range will be coerced to the nearest acceptable value.

stepDy

field.stepDy(0.5)

Pass valid number. Current dy will be incremented by passed value. NOTE: If you increment the dy value directly with field.dy(), it will be randomized as if initially seeding. Use this method for smooth animations.

settings

const setup = {
    dx: 0,
    dy: 0,
    framerate: 10,
    gradient: ['red', 'pink'],
    density: 200,
    radius: 100,
    halflife: 1000,
    transparent: false,
    backgroundColor: '#AAA'
}

field.settings(setup)

Allows you to pass an object with multiple settings during runtime. The object takes the same values as the initial setup object (except for parent which will be disregarded) - see instantiation parameters section for valid keys.


NOTE: