スマフォのフリックにも対応しているカルーセルを実装できるJSライブラリ・inflickity

Ads

フリックに対応したカルーセルを
実装するライブラリ・inflickity
です。動きもかなり軽快ですので、
使いどころも多々ありそうです。
よくあるUIキットにも似たような
ものが含まれてますけど、こうして
単体で使えるのも欲しいところです。

永久にフリックできるカルーセル、みたいなのを作れるライブラリです。

inflickity


PCではドラッグで操作できます。


スマフォはフリックで動かせます。と言ってもiPhoneでしかテストしてませんが。

Sample

以下サンプル。スマフォはQRからどうぞ。

Sample

斜めのと混同してて操作はしにくくなっていますがその点はご了承下さい。

コード

<script src="inflickity.js"></script>
<script>
var init = function() {
  var slider1 = document.getElementById('slider1');
  var slider2 = document.getElementById('slider2');
  var cats = document.getElementById('cats');
  var myFlick = new Inflickity( slider1 );
  var myDutchFlick = new Inflickity( slider2, {
    offsetAngle: -Math.PI / 3
  })
  window.myFlick = myFlick
};
window.addEventListener( 'DOMContentLoaded', init, false);
</script>

ライブラリを読み込んでエレメントを取得してイベント処理します。斜めになっているやつはCSS3ではなく、Math.PIで処理しています。ただ、これだけだとデモのように滑らかな動きを実現できません。

この動きを実現する為にrequestAnimationFrameというのを併用してあげます。

/**
* requestAnimationFrame polyfill by Erik Möller & Paul Irish et. al.
* https://gist.github.com/1866474
*
* http://paulirish.com/2011/requestanimationframe-for-smart-animating/
* http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
**/
/*jshint asi: false, browser: true, curly: true, eqeqeq: true, forin: false, newcap: true, noempty: true, strict: true, undef: true */
(function( window ) {
'use strict';
var lastTime = 0;
var prefixes = 'webkit moz ms o'.split(' ');
// get unprefixed rAF and cAF, if present
var requestAnimationFrame = window.requestAnimationFrame;
var cancelAnimationFrame = window.cancelAnimationFrame;
// loop through vendor prefixes and get prefixed rAF and cAF
var prefix;
for( var i = 0; i < prefixes.length; i++ ) {
if ( requestAnimationFrame && cancelAnimationFrame ) {
break;
}
prefix = prefixes[i];
requestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];
cancelAnimationFrame = cancelAnimationFrame || window[ prefix + 'CancelAnimationFrame' ] ||
window[ prefix + 'CancelRequestAnimationFrame' ];
}
// fallback to setTimeout and clearTimeout if either request/cancel is not supported
if ( !requestAnimationFrame || !cancelAnimationFrame ) {
requestAnimationFrame = function( callback, element ) {
var currTime = new Date().getTime();
var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) );
var id = window.setTimeout( function() {
callback( currTime + timeToCall );
}, timeToCall );
lastTime = currTime + timeToCall;
return id;
};
cancelAnimationFrame = function( id ) {
window.clearTimeout( id );
};
}
// put in global namespace
window.requestAnimationFrame = requestAnimationFrame;
window.cancelAnimationFrame = cancelAnimationFrame;
})( window );

これを一緒に読み込んであげればOKです。

ライブラリはGithubで公開されていました。便利そうなのでもう少し検証して使ってみようかと思います。

inflickity