Como criar efeitos de transição entre fotos sem utilizar flash que comprometem o desempenho da página?
Nessa busca me deparei com um plugin muito interessante do jQuery, o jQuery Cycle Plugin
Ele traz diversos efeitos de transição entre imagens, desde faders básicos até efeitos de rotação e zoom, tudo isso com uma excelente velocidade e tamanho
Primeiros Passos
Como requerimento para utilizar o Plugin é necessário referenciar o js do jQuery, que pode ser baixado em http://jquery.com/, e referenciar também o código do jQuery Cycle Plugin que pode ser baixado em http://www.malsup.com/jquery/cycle/
Como ele funciona
Ele fornece um método chamado cycle que é chamado em um container, onde cada elemento filho se tranforma em um slide.
- <script type=”text/javascript”>
- $(document).ready(function() {
- $(‘.slideshow’).cycle({
- fx: ‘fade’ // Tipo de transição.
- });
- });
- </script>
A estrutura html que devemos montar para que esse codigo funcione adequadamente é simplesmente um container com a classe slideshow e dentro dele imagens que serão os slides
- <div class=”slideshow”>
- <img height=”200″ width=”200″ src=”http://cloud.github.com/downloads/malsup/cycle/beach1.jpg”/>
- <img height=”200″ width=”200″ src=”http://cloud.github.com/downloads/malsup/cycle/beach2.jpg”/>
- <img height=”200″ width=”200″ src=”http://cloud.github.com/downloads/malsup/cycle/beach3.jpg”/>
- </div>
- <div style=”border: #000080 1px solid; color: #000; font-family: ‘Courier New’, Courier, Monospace; font-size: 10pt”>
- <div style=”background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px”>Code Snippet</div>
- <div style=”background: #ddd; max-height: 300px; overflow: auto”>
- <ol style=”background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;“>
- <li><span style=”color:#0000ff”><</span><span style=”color:#a31515″>div</span> <span style=”color:#ff0000″>class</span><span style=”color:#0000ff”>="slideshow"></span></li>
- <li style=”background: #f3f3f3″> <span style=”color:#0000ff”><</span><span style=”color:#a31515″>img</span> <span style=”color:#ff0000″>height</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>width</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>src</span><span style=”color:#0000ff”>="http://cloud.github.com/downloads/malsup/cycle/beach1.jpg"/></span></li>
- <li> <span style=”color:#0000ff”><</span><span style=”color:#a31515″>img</span> <span style=”color:#ff0000″>height</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>width</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>src</span><span style=”color:#0000ff”>="http://cloud.github.com/downloads/malsup/cycle/beach2.jpg"/></span></li>
- <li style=”background: #f3f3f3″> <span style=”color:#0000ff”><</span><span style=”color:#a31515″>img</span> <span style=”color:#ff0000″>height</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>width</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>src</span><span style=”color:#0000ff”>="http://cloud.github.com/downloads/malsup/cycle/beach3.jpg"/></span></li>
- <li> <span style=”color:#0000ff”><</span><span style=”color:#a31515″>img</span> <span style=”color:#ff0000″>height</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>width</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>src</span><span style=”color:#0000ff”>="http://cloud.github.com/downloads/malsup/cycle/beach4.jpg"/></span></li>
- <li style=”background: #f3f3f3″> <span style=”color:#0000ff”><</span><span style=”color:#a31515″>img</span> <span style=”color:#ff0000″>height</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>width</span><span style=”color:#0000ff”>="200"</span> <span style=”color:#ff0000″>src</span><span style=”color:#0000ff”>="http://cloud.github.com/downloads/malsup/cycle/beach5.jpg"/></span></li>
- <li><span style=”color:#0000ff”></</span><span style=”color:#a31515″>div</span><span style=”color:#0000ff”>></span></li>
- </ol>
- </div>
- </div>
Opções
O jQuery Cycle Plugin possui diversas opções para customizar seus efeitos, para isso é necessário sobrescrever suas propriedades default’s
- $.fn.cycle.defaults = {
- fx: ‘fade’, // name of transition effect (or comma separated names, ex: fade,scrollUp,shuffle)
- timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance)
- timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag)
- continuous: 0, // true to start next transition immediately after current one completes
- speed: 1000, // speed of the transition (any valid fx speed value)
- speedIn: null, // speed of the ‘in’ transition
- speedOut: null, // speed of the ‘out’ transition
- next: null, // selector for element to use as click trigger for next slide
- prev: null, // selector for element to use as click trigger for previous slide
- prevNextClick: null, // callback fn for prev/next clicks: function(isNext, zeroBasedSlideIndex, slideElement)
- pager: null, // selector for element to use as pager container
- pagerClick: null, // callback fn for pager clicks: function(zeroBasedSlideIndex, slideElement)
- pagerEvent: ‘click’, // name of event which drives the pager navigation
- pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement)
- before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
- after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
- end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
- easing: null, // easing method for both in and out transitions
- easeIn: null, // easing for “in” transition
- easeOut: null, // easing for “out” transition
- shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 }
- animIn: null, // properties that define how the slide animates in
- animOut: null, // properties that define how the slide animates out
- cssBefore: null, // properties that define the initial state of the slide before transitioning in
- cssAfter: null, // properties that defined the state of the slide after transitioning out
- fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
- height: ‘auto’, // container height
- startingSlide: 0, // zero-based index of the first slide to be displayed
- sync: 1, // true if in/out transitions should occur simultaneously
- random: 0, // true for random, false for sequence (not applicable to shuffle fx)
- fit: 0, // force slides to fit container
- containerResize: 1, // resize container to fit largest slide
- pause: 0, // true to enable “pause on hover”
- pauseOnPagerHover: 0, // true to pause when hovering over pager link
- autostop: 0, // true to end slideshow after X transitions (where X == slide count)
- autostopCount: 0, // number of transitions (optionally used with autostop to define X)
- delay: 0, // additional delay (in ms) for first transition (hint: can be negative)
- slideExpr: null, // expression for selecting slides (if something other than all children is required)
- cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE)
- cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
- nowrap: 0, // true to prevent slideshow from wrapping
- fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
- randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random
- rev: 0, // causes animations to transition in reverse
- manualTrump: true, // causes manual transition to stop an active transition instead of being ignored
- requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
- requeueTimeout: 250 // ms delay for requeue
- };
Alem disso, diversos exemplos de uso do Plugin podem ser vistos no site do projeto:
http://www.malsup.com/jquery/cycle/
Obrigado
Rodolfo