这是一款非常实用的jQuery和css3自动轮换的用户评论留言插件。该用户评论插件通过进度条来控制用户评论显示的时间,当进度条到达100%时,该插件自动播放下一条用户留言。该插件同样通过media query媒体查询来处理各种屏幕的响应式问题。
<div id="cbp-qtrotator" class="cbp-qtrotator"> <div class="cbp-qtcontent"> <img src="images/1.jpg" alt="img01" /> <blockquote> <p>People eat meat and think they will become as strong as an ox, forgetting that the ox eats grass.</p> <footer>Pino Caruso</footer> </blockquote> </div> <div class="cbp-qtcontent"> <!-- ... --> </div> <div class="cbp-qtcontent"> <!-- ... --> </div> <div class="cbp-qtcontent"> <!-- ... --> </div> </div>
插件中用户留言面板的CSS样式非常简单,你可以构建自己的CSS样式来使它更加漂亮。
.cbp-qtrotator { position: relative; margin: 3em auto 5em auto; max-width: 800px; width: 100%; min-height: 400px; } .cbp-qtrotator .cbp-qtcontent { position: absolute; min-height: 200px; border-top: 1px solid #f4f4f4; border-bottom: 1px solid #f4f4f4; padding: 2em 0; top: 0; z-index: 0; opacity: 0; width: 100%; } .no-js .cbp-qtrotator .cbp-qtcontent { border-bottom: none; } /* Currently visible */ .cbp-qtrotator .cbp-qtcontent.cbp-qtcurrent, .no-js .cbp-qtrotator .cbp-qtcontent { position: relative; z-index: 100; pointer-events: auto; opacity: 1; } .cbp-qtrotator .cbp-qtcontent:before, .cbp-qtrotator .cbp-qtcontent:after { content: " "; display: table; } .cbp-qtrotator .cbp-qtcontent:after { clear: both; } .cbp-qtprogress { position: absolute; background: #47a3da; height: 1px; width: 0%; top: 0; z-index: 1000; } .cbp-qtrotator blockquote { margin: 0; padding: 0; } .cbp-qtrotator blockquote p { font-size: 2em; color: #888; font-weight: 300; margin: 0.4em 0 1em; } .cbp-qtrotator blockquote footer { font-size: 1.2em; } .cbp-qtrotator blockquote footer:before { content: '? '; } .cbp-qtrotator .cbp-qtcontent img { float: right; margin-left: 3em; } /* Example for media query */ @media screen and (max-width: 30.6em) { .cbp-qtrotator { font-size: 70%; } .cbp-qtrotator img { width: 80px; } }
有几个可用参数可以使用:
代码如下:
;( function( $, window, undefined ) { 'use strict'; // global var Modernizr = window.Modernizr; $.CBPQTRotator = function( options, element ) { this.$el = $( element ); this._init( options ); }; // the options $.CBPQTRotator.defaults = { // default transition speed (ms) speed : 700, // default transition easing easing : 'ease', // rotator interval (ms) interval : 8000 }; $.CBPQTRotator.prototype = { _init : function( options ) { // options this.options = $.extend( true, {}, $.CBPQTRotator.defaults, options ); // cache some elements and initialize some variables this._config(); // show current item this.$items.eq( this.current ).addClass( 'cbp-qtcurrent' ); // set the transition to the items if( this.support ) { this._setTransition(); } // start rotating the items this._startRotator(); }, _config : function() { // the content items this.$items = this.$el.children( 'div.cbp-qtcontent' ); // total items this.itemsCount = this.$items.length; // current item′s index this.current = 0; // support for CSS Transitions this.support = Modernizr.csstransitions; // add the progress bar if( this.support ) { this.$progress = $( '' ).appendTo( this.$el ); } }, _setTransition : function() { setTimeout( $.proxy( function() { this.$items.css( 'transition', 'opacity ' + this.options.speed + 'ms ' + this.options.easing ); }, this ), 25 ); }, _startRotator: function() { if( this.support ) { this._startProgress(); } setTimeout( $.proxy( function() { if( this.support ) { this._resetProgress(); } this._next(); this._startRotator(); }, this ), this.options.interval ); }, _next : function() { // hide previous item this.$items.eq( this.current ).removeClass( 'cbp-qtcurrent' ); // update current value this.current = this.current < this.itemscount="" -="" 1="" this.current="" +="" 1="" :="" 0;="" show="" next="" item="" this.$items.eq(="" this.current="" ).addclass('cbp-qtcurrent');="" },="" _startprogress="" :="" function()="" {="" settimeout(="" $.proxy(="" function()="" {="" this.$progress.css(="" {="" transition="" :="" 'width="" '="" +="" this.options.interval="" +="" 'ms="" linear',="" width="" :="" '100%'="" }="" );="" },="" this="" ),="" 25="" );="" },="" _resetprogress="" :="" function()="" {="" this.$progress.css(="" {="" transition="" :="" 'none',="" width="" :="" '0%'="" }="" );="" },="" destroy="" :="" function()="" {="" if(="" this.support="" )="" {="" this.$items.css(="" 'transition',="" 'none'="" );="" this.$progress.remove();="" }="" this.$items.removeclass(="" 'cbp-qtcurrent'="" ).css(="" {="" 'position'="" :="" 'relative',="" 'z-index'="" :="" 100,="" 'pointer-events'="" :="" 'auto',="" 'opacity'="" :="" 1="" }="" );="" }="" };="" var="" logerror="function(" message="" )="" {="" if="" (="" window.console="" )="" {="" window.console.error(="" message="" );="" }="" };="" $.fn.cbpqtrotator="function(" options="" )="" {="" if="" (="" typeof="" options="==" 'string'="" )="" {="" var="" args="Array.prototype.slice.call(" arguments,="" 1="" );="" this.each(function()="" {="" var="" instance="$.data(" this,="" 'cbpqtrotator'="" );="" if="" (="" !instance="" )="" {="" logerror(="" "cannot="" call="" methods="" on="" cbpqtrotator="" prior="" to="" initialization;="" "="" +="" "attempted="" to="" call="" method="" '"="" +="" options="" +="" "'"="" );="" return;="" }="" if="" (="" !$.isfunction(="" instance[options]="" )="" ||="" options.charat(0)="==" "_"="" )="" {="" logerror(="" "no="" such="" method="" '"="" +="" options="" +="" "'="" for="" cbpqtrotator="" instance"="" );="" return;="" }="" instance[="" options="" ].apply(="" instance,="" args="" );="" });="" }="" else="" {="" this.each(function()="" {="" var="" instance="$.data(" this,="" 'cbpqtrotator'="" );="" if="" (="" instance="" )="" {="" instance._init();="" }="" else="" {="" instance="$.data(" this,="" 'cbpqtrotator',="" new="" $.cbpqtrotator(="" options,="" this="" )="" );="" }="" });="" }="" return="" this;="" };="" }="" )(="" jquery,="" window="" );="">