levmyshkin / tiny-slider
Fork from ganlanyuan/tiny-slider. Tiny slider for all purposes, inspired by Owl Carousel.
Installs: 6 434
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 786
Language:HTML
Type:drupal-library
This package is auto-updated.
Last update: 2024-10-28 17:02:26 UTC
README
Tiny slider for all purposes, inspired by Owl Carousel.
Warning: tiny-slider works with static content and it works in the browser only. If the HTML is loaded dynamically, make sure to call tns()
after its loading.
Contents
- What's new
- Features
- Install
- Usage
- Options
- Responsive options
- Methods
- Custom Events
- Fallback
- Browser Support
- Support
- License
What's new
- Using
%
instead ofpx
(No more recalculation of each slide width on window resize) - Using CSS Mediaqueries if supported
- Save browser capability values to localStorage, so they will not be recheck again until browser get upgraded or user clear the localStorage manually.
- More options available for
responsive
. (Start from v2.1.0, issue 53) - Insert
controls
andnav
before slider instead of after (issue 4) - Move
autoplay
button out ofnav
container. (Start from v2.1.0) - Some selector changes in
tiny-slider.scss
Migrating to v2
- Update
controls
and / ornav
styles based on their position changes. - Update the
slider selectors
accordingly if used in your CSS or JS. - Update styles related to
autoplay
button.
Features
* DefaultInstall
bower install tiny-slider
or npm install tiny-slider
Usage
1. Add CSS (and IE8 polyfills if needed)
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/tiny-slider.css"> <!--[if (lt IE 9)]><script src="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/min/tiny-slider.helper.ie8.js"></script><![endif]-->
2. Add markup
<div class="my-slider"> <div></div> <div></div> <div></div> </div> <!-- or ul.my-slider > li -->
3. Call tns()
Option A: Add tiny-slider.js to your page:
<script src="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.2/min/tiny-slider.js"></script> <!-- NOTE: prior to v2.2.1 tiny-slider.js need to be in <body> -->
Option B: Import tns
via webpack
or rollup
:
// yourScript.js import { tns } from "./node_modules/tiny-slider/src/tiny-slider"
Option C: Import tns
directly start from v2.8.2
<script type="module"> import {tns} from './src/tiny-slider.js'; var slider = tns({ container: '.my-slider', items: 3, slideBy: 'page', autoplay: true }); </script>
Options
NOTE: Prior to v2.0.2, options "container", "controlsContainer", "navContainer" and "autoplayButton" still need to be DOM elements. E.g. container: document.querySelector('.my-slider')
Responsive options
The following options can be redefined in responsive
field:
startIndex
,
items
,
slideBy
,
speed
,
autoHeight
,
fixedWidth
,
edgePadding
,
gutter
,
center
,
controls
,
controlsText
,
nav
,
autoplay
,
autoplayHoverPause
,
autoplayResetOnVisibility
,
autoplayText
,
autoplayTimeout
,
touch
,
mouseDrag
,
arrowKeys
,
disable
<script> var slider = tns({ container: '.my-slider', items: 1, responsive: { 640: { edgePadding: 20, gutter: 20, items: 2 }, 700: { gutter: 30 }, 900: { items: 3 } } }); </script>
NOTE:
- The breakpoints behave like
(min-width: breakpoint)
in CSS, so an undefined option will be inherited from previous small breakpoints. fixedWidth
can only be changed to other positive integers. It can't be changed to negative integer, 0 or other data type. top↑
Methods
The slider returns a slider object with some properties and methods once it's initialized:
{ version: version, // tiny-slider version getInfo: info(), events: events, // Object goTo: goTo(), play: play(), pause: pause(), isOn: isOn, // Boolean updateSliderHeight: updateInnerWrapperHeight(), refresh: initSliderTransform(), destroy: destroy(), rebuild: rebuild() }
To get the slider information, you can either use the getInfo()
method or subscribe to an Event. Both return an Object:
{ container: container, // slider container slideItems: slideItems, // slides list navContainer: navContainer, // nav container navItems: navItems, // dots list controlsContainer: controlsContainer, // controls container hasControls: hasControls, // indicate if controls exist prevButton: prevButton, // previous button nextButton: nextButton, // next button items: items, // items on a page slideBy: slideBy // items slide by cloneCount: cloneCount, // cloned slide count slideCount: slideCount, // original slide count slideCountNew: slideCountNew, // total slide count after initialization index: index, // current index indexCached: indexCached, // previous index displayIndex: getCurrentSlide(), // display index starts from 1 navCurrent: navCurrent, // current dot index navCurrentCached: navCurrentCached, // previous dot index pages: pages, // visible nav indexes pagesCached: pagesCached, sheet: sheet, event: e || {}, // event object if available };
getInfo
Get slider information.
slider.getInfo(); document.querySelector('.next-button').onclick = function () { // get slider info var info = slider.getInfo(), indexPrev = info.indexCached, indexCurrent = info.index; // update style based on index info.slideItems[indexPrev].classList.remove('active'); info.slideItems[indexCurrent].classList.add('active'); };
goTo
Go to specific slide by number or keywords.
slider.goTo(3); slider.goTo('prev'); slider.goTo('next'); slider.goTo('first'); slider.goTo('last'); document.querySelector('.goto-button').onclick = function () { slider.goTo(3); };
play
Programmatically start slider autoplay when autoplay: true
.
slider.play();
pause
Programmatically stop slider autoplay when autoplay: true
.
slider.pause();
updateSliderHeight
Manually adjust slider height when autoHeight
is true
.
slider.updateSliderHeight();
destroy
Destroy the slider.
slider.destroy();
rebuild
Rebuild the slider after destroy.
slider = slider.rebuild(); // this method returns a new slider Object with the same options with the original slider
Custom Events
Available events include: indexChanged
, transitionStart
, transitionEnd
, newBreakpointStart
, newBreakpointEnd
, touchStart
, touchMove
, touchEnd
, dragStart
, dragMove
and dragEnd
.
var customizedFunction = function (info, eventName) { // direct access to info object console.log(info.event.type, info.container.id); } // bind function to event slider.events.on('transitionEnd', customizedFunction); // remove function binding slider.events.off('transitionEnd', customizedFunction);
Fallback
.no-js .your-slider { overflow-x: auto; } .no-js .your-slider > div { float: none; }
Browser Support
Desktop: Firefox 8+ ✓ Chrome 15+ ✓ (Should works on Chrome 4-14 as well, but I couldn't test it.) Safari 4+ ✓ Opera 12.1+ ✓ IE 8+ ✓
Mobile: Android Browser 4.2+ ✓ Chrome Mobile 63+ ✓ Firefox Mobile 28+ ✓ Maxthon 4+ ✓
Support
Live tests and Automated Tests
Live tests, Screenshots and Automated Tests
Cdnjs
Images on demo page are from https://unsplash.com/.
License
This project is available under the MIT license.