Git Product home page Git Product logo

budgie's Introduction

Budgie

An infinite scrolling plugin, that tackles grid layout of the items being scrolled, and can adapt as the list of items it is scrolling changes.

Demos

https://adammcfadden.github.io/budgie/

Instalation

Install currently out of date. Will publish new npm package upon request.

npm install @helios-interactive/budgie --save

Usage

Note:

Budgie element refers to the whole element, with all items contained inside of it.

Budgie item refers to a single items within the Budgie Element

Currently including the script file is the only way to use budgie.

Budgie will be available in the global namespace once it has been included with the script tag

<script src="node_modules/@helios-interactive/budgie/dist/budgie.min.js" type="text/javascript"></script>

To create a Budgie element, you will need a list of items that you want to make up the tiles within the Budgie element. You will also need to have an empty div on your page that will contain the Budgie element. You can also supply additional optional configuration as an options object

<script>
    new Budgie(items, '.element', options)
</script>

What can it display?

Budgie accepts three types of content as Budgie items.

  • Elements
    • Any HTMLElement can be passed as an item to budgie.
  • Images - as a source string
    • The following extensions wil be created as images: ['jpg', 'gif', 'png', 'bmp', 'jpeg']
  • Videos - as a source string
    • The following extensions wil be created as videos: ['mp4','ogg', 'webm']

You can send the whole list as one of these types, or mix and match them as desired.

How can I customize the styling?

Budgie intentionally does very little with styling so that the user can have full control of that aspect. All styles applied by budgie are applied as classes, so issues with specificty should be rare.

All Budgie items will have the class of budgie-item. You can use this to select the items and apply a class, or add your styling to that class.

The Budgie element will have a class of budgie-container

Can I have multiple Budgie containers on the same page?

Yep. Each Budgie will generate a code to keep it uniquely identified. This is stored on the Budgie object as budgieId

If you have multiple budgie elements, then you can use the budgieId to select the one you want. Budgie items will have the class budgie-item-<budgieId>. The Budgie element will have the class budgie-container-<budgieId>

Configuration

Configuration options are passed on initialization as an options object.

Option Type Choices Default Description
numberHigh Integer 1...n 1 This determines the number of Budgie items that will be stacked vertically.
numberWide Integer 1...n 1 This determines the number of Budgie items that will be stacked horizontally.
direction String 'vertical', 'horizontal' 'vertical' This will set which axis the Budgie element will scroll on.
inverted Boolean true, false false By default horizontal will scroll from left to right, and vertical will scroll from top to bottom. This will invert those directions so that horizontal will scroll from right to left, and vertical will scroll from bottom to top. This is only used if autoScroll is true.
fps Integer 1...n 60 This determines how often Budgie animates. A higher fps will provide a smoother animation, at the cost of performance. Between 30 and 60 is usually optimal. This is only used if autoScroll is true.
secondsOnPage Float 1.0...n 1.0 This determines how long a Budgie Item stays within the Budgie element (how long the viewer can see it before it goes off screen). The lower the number, the faster it will go. This combined with the size of the Budgie Element will determine the speed of the scroll. This is only used if autoScroll is true.
infiniteScroll Boolean true, false true If this is set to true, then scrolling will wrap around allowing for infinite scrolling (scrolling down will wrap around and put you at the top, or vice versa).
autoScroll Boolean true, false true If autoScroll is on, then Budgie will automatically scroll through the elements using the secondsOnPage and Budgie element size to determine speed.
autoStart Boolean true, false true If this is true, then the Budgie element will automatically start on new Budgie. Otherwise it can be manually started with Budgie.budgieAnimate() This is only used if autoScroll is true.

Methods available

The following methods are available on the Budgie object that is returned from new Budgie.

Method Arguments Description
setItems items - the array of items that you want budgie to display This method will compare the items passed as arguments, to Budgie's previous set of items. It will then update Budgie, adding/removing elements where needed.
budgieAnimate Will start Budgie autoscrolling
stopAnimate Will stop Budgie from autoscrolling
changeInversion Will toggle the inversion to the opposite of it's current setting
removeBudgie Will remove the budgie element from the dom. It cannot be added back, and will need replaced with a new Budgie

The following array methods will update the Budgie element if executed on the array of items passed to budgie.

Method Description
pop Normal Array behavior. Will pop the associated element off of Budgie
push Normal Array behavior. Will push the associated element onto Budgie
shift Normal Array behavior. Will shift the associated element off of Budgie
unshift Normal Array behavior. Will unshift the associated element off of Budgie
splice Normal Array behavior. Will splice the associated element(s) on/off of Budgie

Browser support

  • IE11
  • Edge11
  • Chrome 49
  • Opera 42
  • Safari 9.2
  • Firefox 50
  • Sorry, no Netscape Navigator or Lynx support :/

For more support add:

License

MIT License

Copyright (c) [2017] [Adam McFadden]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

budgie's People

Contributors

adammcfadden avatar alecheliosinteractive avatar mneil avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

adammcfadden

budgie's Issues

No break set in switch statements

Break is not being called on switch statements. If you do not call break the expression is evaluated against all cases. Not only is this a performance issue โ€” but if you specify a default it will break (pun intended) your code. Example:

switch(true){case true: console.log('true');default: console.log('false');}

Throw that in your console and run it.

Always call break in a switch.

My favorite way to avoid this pitfall is to not use switches, ever ;)

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.