Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Vanilla javascript slider for all purposes.

License

NotificationsYou must be signed in to change notification settings

ganlanyuan/tiny-slider

Repository files navigation

version

Tiny slider for all purposes, inspired byOwl Carousel.

Demos

Test results

Previous versions:v1,v0

Warning: tiny-slider works with static content and it works in the browser only. If the HTML is loaded dynamically, make sure to calltns() after its loading.

Contents

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 tolocalStorage, so they will not be recheck again until browser get upgraded or user clear the localStorage manually.
  • More options available forresponsive. (Start fromv2.1.0,issue 53)
  • Insertcontrols andnavbefore slider instead of after (issue 4)
  • Moveautoplay button out ofnav container. (Start fromv2.1.0)
  • Some selector changes intiny-slider.scss

Migrating to v2

  • Updatecontrols and / ornav styles based on their position changes.
  • Update theslider selectors accordingly if used in your CSS or JS.
  • Update styles related toautoplay button.

top↑

Features

 Carousel *Gallery
Horizontal *Vertical
Percentage Width *Fixed WidthAuto Width
Loop
Rewind 
Slide by 
Gutter
Edge padding 
Center (v2.9.2+)  
Responsive
Lazyload
Autoplay
Auto height
Touch/drag
Arrow keys
Customize controls/nav
Accessibility
Respond to DOM visibility changes
Custom events
Nested
* Default

top↑

Install

bower install tiny-slider ornpm install tiny-slider

Usage

1. Add CSS (and IE8 polyfills if needed)

<linkrel="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

<divclass="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:

<scriptsrc="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: Importtns viawebpack orrollup:

// yourScript.jsimport{tns}from"./node_modules/tiny-slider/src/tiny-slider"

Option C: Importtns directly start from v2.8.2

<scripttype="module">import{tns}from'./src/tiny-slider.js';varslider=tns({container:'.my-slider',items:3,slideBy:'page',autoplay:true});</script>

top↑

Options

OptionTypeDescription
containerNode | StringDefault:'.slider'.
The slider container element or selector.
mode"carousel" | "gallery"Default: "carousel".
Controls animation behaviour.
Withcarousel everything slides to the side, whilegallery uses fade animations and changes all slides at once.
axis"horizontal" | "vertical"Default: "horizontal".
The axis of the slider.
itemspositive numberDefault: 1.
Number of slides being displayed in the viewport.
If slides less or equal thanitems, the slider won't be initialized.
gutterpositive integerDefault: 0.
Space between slides (in "px").
edgePaddingpositive integerDefault: 0.
Space on the outside (in "px").
fixedWidthpositive integer | falseDefault: false.
Controlswidth attribute of the slides.
autoWidthBooleanDefault: false.
Iftrue, the width of each slide will be its natural width as ainline-block box.
viewportMax (wasfixedWidthViewportWidth)positive integer | falseDefault: false.
Maximum viewport width forfixedWidth/autoWidth.
slideBypositive number | "page"Default: 1.
Number of slides going on one "click".
center (v2.9.2+)BooleanDefault: false.
Center the active slide in the viewport.
controlsBooleanDefault: true.
Controls the display and functionalities ofcontrols components (prev/next buttons). Iftrue, display thecontrols and add all functionalities.
For better accessibility, when a prev/next button is focused, user will be able to control the slider using left/right arrow keys.
controlsPosition"top" | "bottom"Default: "top".
Controlscontrols position.
controlsText(Text | Markup) ArrayDefault: ["prev", "next"].
Text or markup in the prev/next buttons.
controlsContainerNode | String | falseDefault: false.
The container element/selector around the prev/next buttons.
controlsContainer must have at least 2 child elements.
prevButtonNode | String | falseDefault: false.
Customized previous buttons.
This option will be ignored ifcontrolsContainer is a Node element or a CSS selector.
nextButtonNode | String | falseDefault: false.
Customized next buttons.
This option will be ignored ifcontrolsContainer is a Node element or a CSS selector.
navBooleanDefault: true.
Controls the display and functionalities ofnav components (dots). Iftrue, display thenav and add all functionalities.
navPosition"top" | "bottom"Default: "top".
Controlsnav position.
navContainerNode | String | falseDefault: false.
The container element/selector around the dots.
navContainer must have at least same number of children as the slides.
navAsThumbnailsBooleanDefault: false.
Indicate if the dots are thumbnails. Iftrue, they will always be visible even when more than 1 slides displayed in the viewport.
arrowKeysBooleanDefault: false.
Allows using arrow keys to switch slides.
speedpositive integerDefault: 300.
Speed of the slide animation (in "ms").
autoplayBooleanDefault: false.
Toggles the automatic change of slides.
autoplayPosition"top" | "bottom"Default: "top".
Controlsautoplay position.
autoplayTimeoutpositive integerDefault: 5000.
Time between 2autoplay slides change (in "ms").
autoplayDirection"forward" | "backward"Default: "forward".
Direction of slide movement (ascending/descending the slide index).
autoplayTextArray (Text | Markup)Default: ["start", "stop"].
Text or markup in the autoplay start/stop button.
autoplayHoverPauseBooleanDefault: false.
Stops sliding on mouseover.
autoplayButtonNode | String | falseDefault: false.
The customized autoplay start/stop button or selector.
autoplayButtonOutputBooleanDefault: true.
OutputautoplayButton markup whenautoplay is true but a customizedautoplayButton is not provided.
autoplayResetOnVisibilityBooleanDefault: true.
Pauses the sliding when the page is invisible and resumes it when the page become visiable again. (Page Visibility API)
animateInStringDefault: "tns-fadeIn".
Name of intro animationclass.
animateOutStringDefault: "tns-fadeOut".
Name of outro animationclass.
animateNormalStringDefault: "tns-normal".
Name of default animationclass.
animateDelaypositive integer | falseDefault: false.
Time between eachgallery animation (in "ms").
loopBooleanDefault: true.
Moves throughout all the slides seamlessly.
rewindBooleanDefault: false.
Moves to the opposite edge when reaching the first or last slide.
autoHeightBooleanDefault: false.
Height of slider container changes according to each slide's height.
responsiveObject: {
 breakpoint: {
  key: value
 }
} | false
Default: false.
Breakpoint: Integer.
Defines options for different viewport widths (seeResponsive Options).
lazyloadBooleanDefault: false.
Enables lazyloading images that are currently not viewed, thus saving bandwidth (seedemo).
NOTE:
+ Class.tns-lazy-img need to be set on every image you want to lazyload if optionlazyloadSelector is not specified;
+data-src attribute with its value of the real imagesrc is required;
+width attribute for every image is required forautoWidth slider.
lazyloadSelector (v2.9.1+)StringDefault:'.tns-lazy-img'.
The CSS selector for lazyload images.
touchBooleanDefault: true.
Activates input detection for touch devices.
mouseDragBooleanDefault: false.
Changing slides by dragging them.
swipeAnglepositive integer | BooleanDefault: 15.
Swipe or drag will not be triggered if the angle is not inside the range when set.
preventActionWhenRunning (v2.9.1+)BooleanDefault: false.
Prevent next transition while slider is transforming.
preventScrollOnTouch (v2.9.1+)"auto" | "force" | falseDefault: false.
Prevent page from scrolling ontouchmove. If set to "auto", the slider will first check if the touch direction matches the slider axis, then decide whether prevent the page scrolling or not. If set to "force", the slider will always prevent the page scrolling.
nested"inner" | "outer" | falseDefault: false.
Define the relationship between nested sliders. (seedemo)
Make sure you run the inner slider first, otherwise the height of the inner slider container will be wrong.
freezableBooleanDefault: true.
Indicate whether the slider will be frozen (controls,nav,autoplay and other functions will stop work) when all slides can be displayed in one page.
disableBooleanDefault: false.
Disable slider.
startIndexpositive integerDefault: 0.
The initialindex of the slider.
onInitFunction | falseDefault: false.
Callback to be run on initialization.
useLocalStorageBooleanDefault: true.
Save browser capability variables tolocalStorage and without detecting them everytime the slider runs if set totrue.
nonceString / falseDefault: false.
Optional Nonce attribute for inline style tag to allow slider usage without `unsafe-inline Content Security Policy source.

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')

top↑

Responsive options

The following options can be redefined inresponsive 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 versiongetInfo:info(),events:events,// ObjectgoTo:goTo(),play:play(),pause:pause(),isOn:isOn,// BooleanupdateSliderHeight:updateInnerWrapperHeight(),refresh:initSliderTransform(),destroy:destroy(),rebuild:rebuild()}

To get the slider information, you can either use thegetInfo() method or subscribe to an Event. Both return an Object:

{container:container,// slider containerslideItems:slideItems,// slides listnavContainer:navContainer,// nav containernavItems:navItems,// dots listcontrolsContainer:controlsContainer,// controls containerhasControls:hasControls,// indicate if controls existprevButton:prevButton,// previous buttonnextButton:nextButton,// next buttonitems:items,// items on a pageslideBy:slideBy// items slide bycloneCount:cloneCount,// cloned slide countslideCount:slideCount,// original slide countslideCountNew:slideCountNew,// total slide count after initializationindex:index,// current indexindexCached:indexCached,// previous indexdisplayIndex:getCurrentSlide(),// display index starts from 1navCurrent:navCurrent,// current dot indexnavCurrentCached:navCurrentCached,// previous dot indexpages:pages,// visible nav indexespagesCached:pagesCached,sheet:sheet,event:e||{},// event object if available};

getInfo

Get slider information.

slider.getInfo();document.querySelector('.next-button').onclick=function(){// get slider infovarinfo=slider.getInfo(),indexPrev=info.indexCached,indexCurrent=info.index;// update style based on indexinfo.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 whenautoplay: true.

slider.play();

pause

Programmatically stop slider autoplay whenautoplay: true.

slider.pause();

updateSliderHeight

Manually adjust slider height whenautoHeight istrue.

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 anddragEnd.

varcustomizedFunction=function(info,eventName){// direct access to info objectconsole.log(info.event.type,info.container.id);}// bind function to eventslider.events.on('transitionEnd',customizedFunction);// remove function bindingslider.events.off('transitionEnd',customizedFunction);

top↑

Fallback

.no-js .your-slider {overflow-x: auto; }.no-js .your-slider>div {float: none; }

Browser Support

Desktop:Firefox 8+ ✓Chrome 15+ ✓ (Should works onChrome 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

Browser Stack
Live tests and Automated Tests

Cross Browser Testing
Live tests, Screenshots and Automated Tests

Cdnjs
Images on demo page are fromhttps://unsplash.com/.

License

This project is available under theMIT license.


[8]ページ先頭

©2009-2025 Movatter.jp