VM Carousel响应式图片切换代码

版权:原创 更新时间:1年以上
[该文章底部包含文件资源,可根据自己情况,决定是否下载资源使用,时间>金钱,如有需要,立即查看资源]

以下是 VM Carousel响应式图片切换代码 的示例演示效果:

当前平台(PC电脑)
  • 平台:

部分效果截图:

VM Carousel响应式图片切换代码

HTML代码(index.html):

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VM Carousel响应式图片切换代码</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="css/zzsc.css">
<link rel="stylesheet" type="text/css" href="dist/jquery.vm-carousel.css">
<script src="js/modernizr.js"></script>
<style type="text/css">
	h2 {
		 margin-bottom: 40px;
		 margin-top: 40px;
	  }
	  .vmc-centered{ padding: 10px 0; }
	  .vmc-centered img { transition: all 0.3s ease; }
	  .vmc-centered .vmc_active img { transform: scale(1.2); }
</style>

</head>
<body>
<div class="container">
   <h2>VM Carousel</h2>

   <h3>Centered mode, initial slide index: 2</h3>

   <ul class="vmcarousel-centered vmc-centered">
	  <li><img src="images/1.jpg" alt="" width="200"></li>
	  <li><img src="images/2.jpg" alt="" width="200"></li>
	  <li><img src="images/3.jpg" alt="" width="200"></li>
	  <li><img src="images/4.jpg" alt="" width="200"></li>
	  <li><img src="images/5.jpg" alt="" width="200"></li>
	  <li><img src="images/6.jpg" alt="" width="200"></li>
   </ul>


   <h3>Centered infinite mode, initial slide index: 1</h3>

   <ul class="vmcarousel-centered-infitine vmc-centered">
	  <li><img src="images/1.jpg" alt="" width="200"></li>
	  <li><img src="images/2.jpg" alt="" width="200"></li>
	  <li><img src="images/3.jpg" alt="" width="200"></li>
	  <li><img src="images/4.jpg" alt="" width="200"></li>
	  <li><img src="images/5.jpg" alt="" width="200"></li>
	  <li><img src="images/6.jpg" alt="" width="200"></li>
   </ul>


   <h3>Normal mode</h3>

   <ul class="vmcarousel-normal">
	  <li><img src="images/1.jpg" alt="" width="200"></li>
	  <li><img src="images/2.jpg" alt="" width="200"></li>
	  <li><img src="images/3.jpg" alt="" width="200"></li>
	  <li><img src="images/4.jpg" alt="" width="200"></li>
	  <li><img src="images/5.jpg" alt="" width="200"></li>
	  <li><img src="images/6.jpg" alt="" width="200"></li>
   </ul>

</div>

<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js"></script>
<script src="dist/jquery.vm-carousel.js"></script>
<script type="text/javascript">
	jQuery(function($){
		  $('.vmcarousel-centered').vmcarousel({
			 centered: true,
			 start_item: 2,
			 autoplay: false,
			 infinite: false
		  });

		  $('.vmcarousel-centered-infitine').vmcarousel({
			 centered: true,
			 start_item: 1,
			 autoplay: false,
			 infinite: true
		  });

		  $('.vmcarousel-normal').vmcarousel({
			 centered: false,
			 start_item: 0,
			 autoplay: false,
			 infinite: false
		  });
	   });
</script>
</body>
</html>





JS代码(jquery.vm-carousel.js):

/* ========================================================================= *\vmcarousel plugin by Vedmant\* ========================================================================= */
(function ($,window,document,undefined){
	"use strict";
	var pluginName = 'vmcarousel';
	/** * Defaults * * @type{
}
*/
var defaults ={
	delay:4000,speed:500,autoplay:true,items_to_show:0,// 0 for auto calcmin_items_to_show:2,items_to_slide:1,dont_cut:true,centered:false,start_item:0,start_item_centered:false,infinite:false,changed_slide:$.noop()}
;
	/** * Plugin constructor * * @param element * @param options * @constructor */
function Plugin(element,options){
	this._name = pluginName;
	this.element = element;
	this.$element = $(element);
	var data_options = parse_data_options(this.$element.data('options'));
	this.options = $.extend({
}
,defaults,options);
	this.options = $.extend({
}
,this.options,data_options);
	this.init();
}
/** * Parse data-options attribute options * * @param data_options_raw * @returns{
	Array}
*/
function parse_data_options(data_options_raw){
	if(data_options_raw === undefined) return [];
	var options = [];
	data_options_raw.split(';
	').forEach(function(el){
	var pair = el.split(':');
	if(pair.length == 2) options[pair[0].trim()] = pair[1].trim();
}
);
	return options;
}
/** * Plugin functions */
Plugin.prototype ={
	/** * Plugin init */
init:function (){
	var that = this;
	// Add classthis.$element.addClass('vmcarousel');
	// Wrapthis.$viewport = this.$element.wrap('<div class="vmc-viewport"></div>').parent();
	this.$container = this.$viewport.wrap('<div class="vmc-container"></div>').parent();
	// Some initial procedures with slidesthis.init_slides();
	// Items varsthis.$orig_items = this.$element.find('>li');
	this.$items = this.$orig_items;
	this.orig_items_count = this.$orig_items.length;
	this.items_count = this.$items.length;
	this.orig_item_width = this.$items.outerWidth(true);
	this.item_width = this.orig_item_width;
	// Other varsthis.current_position = 0;
	// Init functionsthis.calc_variables();
	this.init_infinite(this.options.start_item);
	this.init_controls();
	this.update_state();
	// Reorder slides to make start item at the centerif(this.options.start_item_centered)this.reorder_to_center(this.options.start_item);
	// Initial set slideif( ! this.options.infinite)this.set_slide(this.options.start_item);
	elsethis.set_active_infinite(this.options.start_item);
	// Start timerif (this.options.autoplay) this.start_timer();
	// Window resize event$(window).resize(function (){
	that.resize()}
);
}
,/** * Calculate all needed variables */
calc_variables:function(){
	this.viewport_width = this.$viewport.width();
	// Calc items to showthis.items_to_show = this.options.items_to_show;
	if( ! this.options.items_to_show || (this.orig_item_width * this.items_to_show) > this.viewport_width){
	this.items_to_show = Math.floor(this.viewport_width / this.orig_item_width);
}
// Set odd number for centered type for not to cut itemsif(this.options.centered && this.options.dont_cut){
	this.items_to_show = this.items_to_show % 2 ? this.items_to_show:this.items_to_show - 1;
}
// Min items to showif(this.items_to_show < this.options.min_items_to_show) this.items_to_show = this.options.min_items_to_show;
	// Calc item width for centered or dont_cutif(this.options.centered || this.options.dont_cut){
	this.item_width = Math.floor(this.viewport_width / this.items_to_show);
	if(this.item_width < this.orig_item_width) this.item_width = this.orig_item_width;
	this.$items.width(this.item_width);
	this.full_items_width = this.item_width * this.items_count;
	this.$element.css({
	width:this.full_items_width + 'px'}
);
}
// Calc items to slidethis.items_to_slide = this.options.items_to_slide;
	if( ! this.options.items_to_slide)this.items_to_slide = Math.floor(this.viewport_width / this.item_width);
	if(this.items_to_slide > this.items_to_show) this.items_to_slide = this.items_to_show;
	if(this.items_to_slide <= 0) this.items_to_slide = 1;
	this.hide_controls = this.items_count <= this.items_to_show;
	this.infinite_initial_margin = - this.item_width;
	if(this.items_to_show % 2 == 0) this.infinite_initial_margin += this.item_width / 2;
}
,/** * Update carousel state (clases,so on) */
update_state:function(){
	this.$element.css({
	transition:'transform ' + this.options.speed / 1000 + 's'}
);
	if(this.hide_controls) this.$container.addClass('hide-controls');
	else this.$container.removeClass('hide-controls');
}
,/** * Set slides properties */
init_slides:function(){
	this.$element.find('>li').each(function(i){
	$(this).attr('data-slide',i);
}
);
}
,/** * Init controls */
init_controls:function(){
	var that = this;
	// Controlsthis.$btn_left = this.$container.append('<a href="" class="vmc-arrow-left"></a>').find('.vmc-arrow-left');
	this.$btn_right = this.$container.append('<a href="" class="vmc-arrow-right"></a>').find('.vmc-arrow-right');
	// Bind controlsthis.$btn_left.click(function (e){
	e.preventDefault();
	that.slide_relative(-1);
}
);
	this.$btn_right.click(function (e){
	e.preventDefault();
	that.slide_relative(1);
}
);
}
,/** * Reorder slider to place item at the center * * @param position */
reorder_to_center:function(position){
	// Dont reorder if 2 or less itemsif(this.orig_items_count < 3) return;
	// Calc shift times and directionvar shift_count = Math.floor(this.orig_items_count / 2) - position;
	var dir = shift_count > 0 ? -1:1;
	// Shift itemsshift_count = Math.abs(shift_count);
	for(var i = 0;
	i < shift_count;
	i++) this.switch_slides(dir);
}
,/** * Move to exact slide * * @param slide */
set_slide:function(slide){
	var position = this.$element.find('>[data-slide="'+slide+'"]').index();
	this.slide_relative(position);
}
,/** * Slide n items forth or back * * @param offset */
slide_relative:function (offset){
	if(this.options.centered && this.options.infinite)this.slide_relative_centered_infinite(offset);
	else if(this.options.centered)this.slide_relative_centered(offset);
	elsethis.slide_relative_left(offset);
}
,/** * Slide n items forth or back for left mode * * @param offset */
slide_relative_left:function (offset){
	var new_position = this.current_position + (offset * this.items_to_slide);
	// If now is ribbon tail on go back reverse to slide_count stepif (this.current_position == this.items_count && offset < 0){
	new_position = (Math.floor(this.items_count / this.items_to_slide) + offset) * this.items_to_slide;
	// Show ribbon tail (last slide to right border)}
else if (new_position < 0 || (this.items_to_slide > (this.items_count - new_position) && new_position < this.items_count)){
	new_position = this.items_count - this.items_to_show;
	// Scroll to beggining}
else if (new_position > (this.items_count - this.items_to_show)){
	new_position = 0;
}
var margin_left = - this.item_width * new_position;
	// Animate slidethis.animate_slide(margin_left);
	this.change_slide(new_position,new_position);
}
,/** * Slide n items forth or back for centered mode * * @param offset */
slide_relative_centered:function (offset){
	var new_position = this.current_position + (offset * this.items_to_slide);
	if (new_position < 0){
	new_position = this.items_count - 1;
	// Scroll to beggining}
else if (new_position >= this.items_count){
	new_position = 0;
}
var margin_left = this.viewport_width / 2 - (this.item_width * (new_position + 1) - this.item_width / 2);
	// Animate slidethis.animate_slide(margin_left);
	var new_active_slide = this.$items.eq(new_position).attr('data-slide');
	this.change_slide(new_position,new_active_slide);
}
,/** * Init infinite carousel feature */
init_infinite:function (start_item){
	if( ! this.options.infinite) return;
	this.make_clones();
	this.calc_variables();
	this.$element.css("margin-left",this.infinite_initial_margin + "px");
}
,/** * Make clones for infinite carousel */
make_clones:function (){
	var times = 1;
	if(this.items_count < this.items_to_show)times = Math.ceil(this.items_to_show / this.items_count);
	for(var i = 0;
	i < times;
	i++){
	this.$element.prepend(this.$orig_items.clone().addClass('vmc-clone'));
}
this.$items = this.$element.find('>li');
	this.items_count = this.$items.length;
}
,/** * Slide n items forth or back for centered mode with infinite mode * * @param offset */
slide_relative_centered_infinite:function (offset){
	var that = this;
	// Only one item to slideoffset = offset < 0 ? -1:1;
	var margin_left = this.infinite_initial_margin - this.item_width * offset;
	//if(this.items_to_show % 2 == 0) margin_left += this.item_width / 2;
	var new_position = Math.ceil(this.items_to_show / 2) + offset;
	var new_active_slide = this.$items.eq(new_position).attr('data-slide');
	this.animate_slide(margin_left,function(e){
	that.switch_slides(offset);
	that.$element.css("margin-left",that.infinite_initial_margin + "px");
}
,'margin');
	this.change_slide(new_position,new_active_slide);
}
,/** * Place first slide at the end or last slide before first * * @param dir */
switch_slides:function(dir){
	var that = this;
	// Switch last or first itemif(dir > 0){
	that.$items.last().after(that.$items.first());
}
else{
	that.$items.first().before(that.$items.last());
}
// Reload elementsthat.$items = that.$element.find('>li');
}
,/** * Set first active slide for infinite carousel * */
set_active_infinite:function(position){
	var center_position = Math.ceil(this.items_to_show / 2);
	for(var i = 0;
	i < this.orig_items_count;
	i++){
	this.switch_slides(1);
	if(this.$items.eq(center_position).attr('data-slide') == position){
	this.$items.eq(center_position).addClass('vmc_active');
	return true;
}
}
return false;
}
,/** * Change slide * * @param new_position * @param margin_left */
change_slide:function (new_position,new_active_slide){
	var that = this;
	// Update current positionthis.current_position = new_position;
	// Add active classthis.$items.removeClass('vmc_active').eq(this.current_position).addClass('vmc_active');
	// Restart timerif (this.options.autoplay) this.start_timer();
	// Call callbackif (typeof this.options.changed_slide === "function"){
	this.options.changed_slide.call(this,new_active_slide);
}
}
,/** * Slide animation * * @param margin_left */
animate_slide:function (margin_left,complete,type){
	var that = this;
	if(type == undefined) type = 'css3';
	if(complete == undefined) complete = $.noop();
	if (Modernizr.csstransitions && type == 'css3'){
	this.$element.css("transform","translate3d(" + margin_left + "px,0px,0px)");
	this.$element.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',complete);
}
else{
	this.$element.stop(true).animate({
	'margin-left':margin_left + 'px'}
,this.options.speed,'swing',complete);
}
}
,/** * Resize event */
resize:function (){
	this.calc_variables();
	this.update_state();
	// Update slider positionthis.slide_relative(0);
}
,/** * Start timer */
start_timer:function (){
	var that = this;
	if (this.timer_id != 0) clearTimeout(this.timer_id);
	this.timer_id = setTimeout(function (){
	that.slide_relative(1);
}
,this.options.delay);
}
,/** * Stop timer */
stop_timer:function (){
	clearTimeout(this.timer_id);
	this.timer_id = 0;
}
}
// Plugin.prototype/** * Attach to Jquery * * @param options * @returns{
	*}
*/
$.fn[pluginName] = function (options){
	var args = [].slice.call(arguments,1);
	return this.each(function (){
	if (!$.data(this,'plugin_' + pluginName))$.data(this,'plugin_' + pluginName,new Plugin(this,options));
	else if ($.isFunction(Plugin.prototype[options]))$.data(this,'plugin_' + pluginName)[options].apply($.data(this,'plugin_' + pluginName),args);
}
);
}
// Auto init for tags with data-vmcarousel attribute$('[data-vmcarousel]').vmcarousel();
}
)(jQuery,window,document);
	

JS代码(modernizr.js):

/*! * Modernizr v2.8.3 * www.modernizr.com * * Copyright (c) Faruk Ates,Paul Irish,Alex Sexton * Available under the BSD and MIT licenses:www.modernizr.com/license/ */
/* * Modernizr tests which native CSS3 and HTML5 features are available in * the current UA and makes the results available to you in two ways:* as properties on a global Modernizr object,and as classes on the * <html> element. This information allows you to progressively enhance * your pages with a granular level of control over the experience. * * Modernizr has an optional (not included) conditional resource loader * called Modernizr.load(),based on Yepnope.js (yepnopejs.com). * To get a build that includes Modernizr.load(),as well as choosing * which tests to include,go to www.modernizr.com/download/ * * Authors Faruk Ates,Paul Irish,Alex Sexton * Contributors Ryan Seddon,Ben Alman */
window.Modernizr = (function( window,document,undefined ){
	var version = '2.8.3',Modernizr ={
}
,/*>>cssclasses*/
 // option for enabling the HTML classes to be added enableClasses = true,/*>>cssclasses*/
 docElement = document.documentElement,/** * Create our "modernizr" element that we do most feature tests on. */
 mod = 'modernizr',modElem = document.createElement(mod),mStyle = modElem.style,/** * Create the input element for various Web Forms feature tests. */
 inputElem /*>>inputelem*/
 = document.createElement('input') /*>>inputelem*/
,/*>>smile*/
 smile = ':)',/*>>smile*/
 toString ={
}
.toString,// TODO::make the prefixes more granular /*>>prefixes*/
 // List of property values to set for css tests. See ticket #21 prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),/*>>prefixes*/
 /*>>domprefixes*/
 // Following spec is to expose vendor-specific style properties as:// elem.style.WebkitBorderRadius // and the following would be incorrect:// elem.style.webkitBorderRadius // Webkit ghosts their properties in lowercase but Opera & Moz do not. // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ // erik.eae.net/archives/2008/03/10/21.48.10/ // More here:github.com/Modernizr/Modernizr/issues/issue/21 omPrefixes = 'Webkit Moz O ms',cssomPrefixes = omPrefixes.split(' '),domPrefixes = omPrefixes.toLowerCase().split(' '),/*>>domprefixes*/
 /*>>ns*/
 ns ={
	'svg':'http://www.w3.org/2000/svg'}
,/*>>ns*/
 tests ={
}
,inputs ={
}
,attrs ={
}
,classes = [],slice = classes.slice,featureName,// used in testing loop /*>>teststyles*/
 // Inject element with style element and some CSS rules injectElementWithStyles = function( rule,callback,nodes,testnames ){
	var style,ret,node,docOverflow,div = document.createElement('div'),// After page load injecting a fake body doesn't work so check if body exists body = document.body,// IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element,so we fake it. fakeBody = body || document.createElement('body');
	if ( parseInt(nodes,10) ){
	// In order not to give false positives we create a node for each test // This also allows the method to scale for unspecified uses while ( nodes-- ){
	node = document.createElement('div');
	node.id = testnames ? testnames[nodes]:mod + (nodes + 1);
	div.appendChild(node);
}
}
// <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element // with a 'scoped' element,in our case the soft-hyphen entity as it won't mess with our measurements. // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx // Documents served as xml will throw if using &shy;
	so use xml friendly encoded version. See issue #277 style = ['&#173;
	','<style id="s',mod,'">',rule,'</style>'].join('');
	div.id = mod;
	// IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight,so insert it into body or fakebody. // Opera will act all quirky when injecting elements in documentElement when page is served as xml,needs fakebody too. #270 (body ? div:fakeBody).innerHTML += style;
	fakeBody.appendChild(div);
	if ( !body ){
	//avoid crashing IE8,if background image is used fakeBody.style.background = '';
	//Safari 5.13/5.1.4 OSX stops loading if::-webkit-scrollbar is used and scrollbars are visible fakeBody.style.overflow = 'hidden';
	docOverflow = docElement.style.overflow;
	docElement.style.overflow = 'hidden';
	docElement.appendChild(fakeBody);
}
ret = callback(div,rule);
	// If this is done after page load we don't want to remove the body so check if body exists if ( !body ){
	fakeBody.parentNode.removeChild(fakeBody);
	docElement.style.overflow = docOverflow;
}
else{
	div.parentNode.removeChild(div);
}
return !!ret;
}
,/*>>teststyles*/
 /*>>mq*/
 // adapted from matchMedia polyfill // by Scott Jehl and Paul Irish // gist.github.com/786768 testMediaQuery = function( mq ){
	var matchMedia = window.matchMedia || window.msMatchMedia;
	if ( matchMedia ){
	return matchMedia(mq) && matchMedia(mq).matches || false;
}
var bool;
	injectElementWithStyles('@media ' + mq + '{
	#' + mod + '{
	position:absolute;
}
}
',function( node ){
	bool = (window.getComputedStyle ? getComputedStyle(node,null):node.currentStyle)['position'] == 'absolute';
}
);
	return bool;
}
,/*>>mq*/
 /*>>hasevent*/
 // // isEventSupported determines if a given element supports the given event // kangax.github.com/iseventsupported/ // // The following results are known incorrects:// Modernizr.hasEvent("webkitTransitionEnd",elem) // false negative // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333 // ... isEventSupported = (function(){
	var TAGNAMES ={
	'select':'input','change':'input','submit':'form','reset':'form','error':'img','load':'img','abort':'img'}
;
	function isEventSupported( eventName,element ){
	element = element || document.createElement(TAGNAMES[eventName] || 'div');
	eventName = 'on' + eventName;
	// When using `setAttribute`,IE skips "unload",WebKit skips "unload" and "resize",whereas `in` "catches" those var isSupported = eventName in element;
	if ( !isSupported ){
	// If it has no `setAttribute` (i.e. doesn't implement Node interface),try generic element if ( !element.setAttribute ){
	element = document.createElement('div');
}
if ( element.setAttribute && element.removeAttribute ){
	element.setAttribute(eventName,'');
	isSupported = is(element[eventName],'function');
	// If property was created,"remove it" (by setting value to `undefined`) if ( !is(element[eventName],'undefined') ){
	element[eventName] = undefined;
}
element.removeAttribute(eventName);
}
}
element = null;
	return isSupported;
}
return isEventSupported;
}
)(),/*>>hasevent*/
 // TODO::Add flag for hasownprop ? didn't last time // hasOwnProperty shim by kangax needed for Safari 2.0 support _hasOwnProperty = ({
}
).hasOwnProperty,hasOwnProp;
	if ( !is(_hasOwnProperty,'undefined') && !is(_hasOwnProperty.call,'undefined') ){
	hasOwnProp = function (object,property){
	return _hasOwnProperty.call(object,property);
}
;
}
else{
	hasOwnProp = function (object,property){
	/* yes,this can give false positives/negatives,but most of the time we don't care about those */
 return ((property in object) && is(object.constructor.prototype[property],'undefined'));
}
;
}
// Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js // es5.github.com/#x15.3.4.5 if (!Function.prototype.bind){
	Function.prototype.bind = function bind(that){
	var target = this;
	if (typeof target != "function"){
	throw new TypeError();
}
var args = slice.call(arguments,1),bound = function (){
	if (this instanceof bound){
	var F = function(){
}
;
	F.prototype = target.prototype;
	var self = new F();
	var result = target.apply( self,args.concat(slice.call(arguments)) );
	if (Object(result) === result){
	return result;
}
return self;
}
else{
	return target.apply( that,args.concat(slice.call(arguments)) );
}
}
;
	return bound;
}
;
}
/** * setCss applies given styles to the Modernizr DOM node. */
 function setCss( str ){
	mStyle.cssText = str;
}
/** * setCssAll extrapolates all vendor-specific css strings. */
 function setCssAll( str1,str2 ){
	return setCss(prefixes.join(str1 + ';
	') + ( str2 || '' ));
}
/** * is returns a boolean for if typeof obj is exactly type. */
 function is( obj,type ){
	return typeof obj === type;
}
/** * contains returns a boolean for if substr is found within str. */
 function contains( str,substr ){
	return !!~('' + str).indexOf(substr);
}
/*>>testprop*/
 // testProps is a generic CSS / DOM property test. // In testing support for a given CSS property,it's legit to test:// `elem.style[styleName] !== undefined` // If the property is supported it will return an empty string,// if unsupported it will return undefined. // We'll take advantage of this quick test and skip setting a style // on our modernizr element,but instead just testing undefined vs // empty string. // Because the testing of the CSS property names (with "-",as // opposed to the camelCase DOM properties) is non-portable and // non-standard but works in WebKit and IE (but not Gecko or Opera),// we explicitly reject properties with dashes so that authors // developing in WebKit or IE first don't end up with // browser-specific content by accident. function testProps( props,prefixed ){
	for ( var i in props ){
	var prop = props[i];
	if ( !contains(prop,"-") && mStyle[prop] !== undefined ){
	return prefixed == 'pfx' ? prop:true;
}
}
return false;
}
/*>>testprop*/
 // TODO::add testDOMProps /** * testDOMProps is a generic DOM property test;
	if a browser supports * a certain property,it won't return undefined for it. */
 function testDOMProps( props,obj,elem ){
	for ( var i in props ){
	var item = obj[props[i]];
	if ( item !== undefined){
	// return the property name as a string if (elem === false) return props[i];
	// let's bind a function if (is(item,'function')){
	// default to autobind unless override return item.bind(elem || obj);
}
// return the unbound function or obj or value return item;
}
}
return false;
}
/*>>testallprops*/
 /** * testPropsAll tests a list of DOM properties we want to check against. * We specify literally ALL possible (known and/or likely) properties on * the element including the non-vendor prefixed one,for forward- * compatibility. */
 function testPropsAll( prop,prefixed,elem ){
	var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
	// did they call .prefixed('boxSizing') or are we just testing a prop? if(is(prefixed,"string") || is(prefixed,"undefined")){
	return testProps(props,prefixed);
	// otherwise,they called .prefixed('requestAnimationFrame',window[,elem])}
else{
	props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
	return testDOMProps(props,prefixed,elem);
}
}
/*>>testallprops*/
 /** * Tests * ----- */
 // The *new* flexbox // dev.w3.org/csswg/css3-flexbox tests['flexbox'] = function(){
	return testPropsAll('flexWrap');
}
;
	// The *old* flexbox // www.w3.org/TR/2009/WD-css3-flexbox-20090723/ tests['flexboxlegacy'] = function(){
	return testPropsAll('boxDirection');
}
;
	// On the S60 and BB Storm,getContext exists,but always returns undefined // so we actually have to call getContext() to verify // github.com/Modernizr/Modernizr/issues/issue/97/ tests['canvas'] = function(){
	var elem = document.createElement('canvas');
	return !!(elem.getContext && elem.getContext('2d'));
}
;
	tests['canvastext'] = function(){
	return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText,'function'));
}
;
	// webk.it/70117 is tracking a legit WebGL feature detect proposal // We do a soft detect which may false positive in order to avoid // an expensive context creation:bugzil.la/732441 tests['webgl'] = function(){
	return !!window.WebGLRenderingContext;
}
;
	/* * The Modernizr.touch test only indicates if the browser supports * touch events,which does not necessarily reflect a touchscreen * device,as evidenced by tablets running Windows 7 or,alas,* the Palm Pre / WebOS (touch) phones. * * Additionally,Chrome (desktop) used to lie about its support on this,* but that has since been rectified:crbug.com/36415 * * We also test for Firefox 4 Multitouch Support. * * For more info,see:modernizr.github.com/Modernizr/touch.html */
 tests['touch'] = function(){
	var bool;
	if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch){
	bool = true;
}
else{
	injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{
	#modernizr{
	top:9px;
	position:absolute}
}
'].join(''),function( node ){
	bool = node.offsetTop === 9;
}
);
}
return bool;
}
;
	// geolocation is often considered a trivial feature detect... // Turns out,it's quite tricky to get right:// // Using !!navigator.geolocation does two things we don't want. It:// 1. Leaks memory in IE9:github.com/Modernizr/Modernizr/issues/513 // 2. Disables page caching in WebKit:webk.it/43956 // // Meanwhile,in Firefox < 8,an about:config setting could expose // a false positive that would throw an exception:bugzil.la/688158 tests['geolocation'] = function(){
	return 'geolocation' in navigator;
}
;
	tests['postmessage'] = function(){
	return !!window.postMessage;
}
;
	// Chrome incognito mode used to throw an exception when using openDatabase // It doesn't anymore. tests['websqldatabase'] = function(){
	return !!window.openDatabase;
}
;
	// Vendors had inconsistent prefixing with the experimental Indexed DB:// - Webkit's implementation is accessible through webkitIndexedDB // - Firefox shipped moz_indexedDB before FF4b9,but since then has been mozIndexedDB // For speed,we don't test the legacy (and beta-only) indexedDB tests['indexedDB'] = function(){
	return !!testPropsAll("indexedDB",window);
}
;
	// documentMode logic from YUI to filter out IE8 Compat Mode // which false positives. tests['hashchange'] = function(){
	return isEventSupported('hashchange',window) && (document.documentMode === undefined || document.documentMode > 7);
}
;
	// Per 1.6:// This used to be Modernizr.historymanagement but the longer // name has been deprecated in favor of a shorter and property-matching one. // The old API is still available in 1.6,but as of 2.0 will throw a warning,// and in the first release thereafter disappear entirely. tests['history'] = function(){
	return !!(window.history && history.pushState);
}
;
	tests['draganddrop'] = function(){
	var div = document.createElement('div');
	return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
}
;
	// FF3.6 was EOL'ed on 4/24/12,but the ESR version of FF10 // will be supported until FF19 (2/12/13),at which time,ESR becomes FF17. // FF10 still uses prefixes,so check for it until then. // for more ESR info,see:mozilla.org/en-US/firefox/organizations/faq/ tests['websockets'] = function(){
	return 'WebSocket' in window || 'MozWebSocket' in window;
}
;
	// css-tricks.com/rgba-browser-support/ tests['rgba'] = function(){
	// Set an rgba() color and check the returned value setCss('background-color:rgba(150,255,150,.5)');
	return contains(mStyle.backgroundColor,'rgba');
}
;
	tests['hsla'] = function(){
	// Same as rgba(),in fact,browsers re-map hsla() to rgba() internally,// except IE9 who retains it as hsla setCss('background-color:hsla(120,40%,100%,.5)');
	return contains(mStyle.backgroundColor,'rgba') || contains(mStyle.backgroundColor,'hsla');
}
;
	tests['multiplebgs'] = function(){
	// Setting multiple images AND a color on the background shorthand property // and then querying the style.background property value for the number of // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! setCss('background:url(https://),url(https://),red url(https://)');
	// If the UA supports multiple backgrounds,there should be three occurrences // of the string "url(" in the return value for elemStyle.background return (/(url\s*\(.*?){
	3}
/).test(mStyle.background);
}
;
	// this will false positive in Opera Mini // github.com/Modernizr/Modernizr/issues/396 tests['backgroundsize'] = function(){
	return testPropsAll('backgroundSize');
}
;
	tests['borderimage'] = function(){
	return testPropsAll('borderImage');
}
;
	// Super comprehensive table about all the unique implementations of // border-radius:muddledramblings.com/table-of-css3-border-radius-compliance tests['borderradius'] = function(){
	return testPropsAll('borderRadius');
}
;
	// WebOS unfortunately false positives on this test. tests['boxshadow'] = function(){
	return testPropsAll('boxShadow');
}
;
	// FF3.0 will false positive on this test tests['textshadow'] = function(){
	return document.createElement('div').style.textShadow === '';
}
;
	tests['opacity'] = function(){
	// Browsers that actually have CSS Opacity implemented have done so // according to spec,which means their return values are within the // range of [0.0,1.0] - including the leading zero. setCssAll('opacity:.55');
	// The non-literal . in this regex is intentional:// German Chrome returns this value as 0,55 // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 return (/^0.55$/).test(mStyle.opacity);
}
;
	// Note,Android < 4 will pass this test,but can only animate // a single property at a time // goo.gl/v3V4Gp tests['cssanimations'] = function(){
	return testPropsAll('animationName');
}
;
	tests['csscolumns'] = function(){
	return testPropsAll('columnCount');
}
;
	tests['cssgradients'] = function(){
	/** * For CSS Gradients syntax,please see:* webkit.org/blog/175/introducing-css-gradients/ * developer.mozilla.org/en/CSS/-moz-linear-gradient * developer.mozilla.org/en/CSS/-moz-radial-gradient * dev.w3.org/csswg/css3-images/#gradients- */
 var str1 = 'background-image:',str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));
	',str3 = 'linear-gradient(left top,#9f9,white);
	';
	setCss( // legacy webkit syntax (FIXME:remove when syntax not in use anymore) (str1 + '-webkit- '.split(' ').join(str2 + str1) + // standard syntax // trailing 'background-image:' prefixes.join(str3 + str1)).slice(0,-str1.length) );
	return contains(mStyle.backgroundImage,'gradient');
}
;
	tests['cssreflections'] = function(){
	return testPropsAll('boxReflect');
}
;
	tests['csstransforms'] = function(){
	return !!testPropsAll('transform');
}
;
	tests['csstransforms3d'] = function(){
	var ret = !!testPropsAll('perspective');
	// Webkit's 3D transforms are passed off to the browser's own graphics renderer. // It works fine in Safari on Leopard and Snow Leopard,but not in Chrome in // some conditions. As a result,Webkit typically recognizes the syntax but // will sometimes throw a false positive,thus we must do a more thorough check:if ( ret && 'webkitPerspective' in docElement.style ){
	// Webkit allows this media query to succeed only if the feature is enabled. // `@media (transform-3d),(-webkit-transform-3d){
	...}
` injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){
	#modernizr{
	left:9px;
	position:absolute;
	height:3px;
}
}
',function( node,rule ){
	ret = node.offsetLeft === 9 && node.offsetHeight === 3;
}
);
}
return ret;
}
;
	tests['csstransitions'] = function(){
	return testPropsAll('transition');
}
;
	/*>>fontface*/
 // @font-face detection routine by Diego Perini // javascript.nwbox.com/CSSSupport/ // false positives:// WebOS github.com/Modernizr/Modernizr/issues/342 // WP7 github.com/Modernizr/Modernizr/issues/538 tests['fontface'] = function(){
	var bool;
	injectElementWithStyles('@font-face{
	font-family:"font";
	src:url("https://")}
',function( node,rule ){
	var style = document.getElementById('smodernizr'),sheet = style.sheet || style.styleSheet,cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText:sheet.cssText || ''):'';
	bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
}
);
	return bool;
}
;
	/*>>fontface*/
 // CSS generated content detection tests['generatedcontent'] = function(){
	var bool;
	injectElementWithStyles(['#',mod,'{
	font:0/0 a}
#',mod,':after{
	content:"',smile,'";
	visibility:hidden;
	font:3px/1 a}
'].join(''),function( node ){
	bool = node.offsetHeight >= 3;
}
);
	return bool;
}
;
	// These tests evaluate support of the video/audio elements,as well as // testing what types of content they support. // // We're using the Boolean constructor here,so that we can extend the value // e.g. Modernizr.video // true // Modernizr.video.ogg // 'probably' // // Codec values from:github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 // thx to NielsLeenheer and zcorpan // Note:in some older browsers,"no" was a return value instead of empty string. // It was live in FF3.5.0 and 3.5.1,but fixed in 3.5.2 // It was also live in Safari 4.0.0 - 4.0.4,but fixed in 4.0.5 tests['video'] = function(){
	var elem = document.createElement('video'),bool = false;
	// IE9 Running on Windows Server SKU can cause an exception to be thrown,bug #224 try{
	if ( bool = !!elem.canPlayType ){
	bool = new Boolean(bool);
	bool.ogg = elem.canPlayType('video/ogg;
	codecs="theora"') .replace(/^no$/,'');
	// Without QuickTime,this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546 bool.h264 = elem.canPlayType('video/mp4;
	codecs="avc1.42E01E"') .replace(/^no$/,'');
	bool.webm = elem.canPlayType('video/webm;
	codecs="vp8,vorbis"').replace(/^no$/,'');
}
}
catch(e){
}
return bool;
}
;
	tests['audio'] = function(){
	var elem = document.createElement('audio'),bool = false;
	try{
	if ( bool = !!elem.canPlayType ){
	bool = new Boolean(bool);
	bool.ogg = elem.canPlayType('audio/ogg;
	codecs="vorbis"').replace(/^no$/,'');
	bool.mp3 = elem.canPlayType('audio/mpeg;
	') .replace(/^no$/,'');
	// Mimetypes accepted:// developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements // bit.ly/iphoneoscodecs bool.wav = elem.canPlayType('audio/wav;
	codecs="1"') .replace(/^no$/,'');
	bool.m4a = ( elem.canPlayType('audio/x-m4a;
	') || elem.canPlayType('audio/aac;
	')) .replace(/^no$/,'');
}
}
catch(e){
}
return bool;
}
;
	// In FF4,if disabled,window.localStorage should === null. // Normally,we could not test that directly and need to do a // `('localStorage' in window) && ` test first because otherwise Firefox will // throw bugzil.la/365772 if cookies are disabled // Also in iOS5 Private Browsing mode,attempting to use localStorage.setItem // will throw the exception:// QUOTA_EXCEEDED_ERRROR DOM Exception 22. // Peculiarly,getItem and removeItem calls do not throw. // Because we are forced to try/catch this,we'll go aggressive. // Just FWIW:IE8 Compat mode supports these features completely:// www.quirksmode.org/dom/html5.html // But IE8 doesn't support either with local files tests['localstorage'] = function(){
	try{
	localStorage.setItem(mod,mod);
	localStorage.removeItem(mod);
	return true;
}
catch(e){
	return false;
}
}
;
	tests['sessionstorage'] = function(){
	try{
	sessionStorage.setItem(mod,mod);
	sessionStorage.removeItem(mod);
	return true;
}
catch(e){
	return false;
}
}
;
	tests['webworkers'] = function(){
	return !!window.Worker;
}
;
	tests['applicationcache'] = function(){
	return !!window.applicationCache;
}
;
	// Thanks to Erik Dahlstrom tests['svg'] = function(){
	return !!document.createElementNS && !!document.createElementNS(ns.svg,'svg').createSVGRect;
}
;
	// specifically for SVG inline in HTML,not within XHTML // test page:paulirish.com/demo/inline-svg tests['inlinesvg'] = function(){
	var div = document.createElement('div');
	div.innerHTML = '<svg/>';
	return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
}
;
	// SVG SMIL animation tests['smil'] = function(){
	return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg,'animate')));
}
;
	// This test is only for clip paths in SVG proper,not clip paths on HTML content // demo:srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg // However read the comments to dig into applying SVG clippaths to HTML content here:// github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491 tests['svgclippaths'] = function(){
	return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg,'clipPath')));
}
;
	/*>>webforms*/
 // input features and input types go directly onto the ret object,bypassing the tests loop. // Hold this guy to execute in a moment. function webforms(){
	/*>>input*/
 // Run through HTML5's new input attributes to see if the UA understands any. // We're using f which is the <input> element created early on // Mike Taylr has created a comprehensive resource for testing these attributes // when applied to all input types:// miketaylr.com/code/input-type-attr.html // spec:www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary // Only input placeholder is tested while textarea's placeholder is not. // Currently Safari 4 and Opera 11 have support only for the input placeholder // Both tests are available in feature-detects/forms-placeholder.js Modernizr['input'] = (function( props ){
	for ( var i = 0,len = props.length;
	i < len;
	i++ ){
	attrs[ props[i] ] = !!(props[i] in inputElem);
}
if (attrs.list){
	// safari false positive's on datalist:webk.it/74252 // see also github.com/Modernizr/Modernizr/issues/146 attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
}
return attrs;
}
)('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
	/*>>input*/
 /*>>inputtypes*/
 // Run through HTML5's new input types to see if the UA understands any. // This is put behind the tests runloop because it doesn't return a // true/false like all the other tests;
	instead,it returns an object // containing each input type with its corresponding true/false value // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/ Modernizr['inputtypes'] = (function(props){
	for ( var i = 0,bool,inputElemType,defaultView,len = props.length;
	i < len;
	i++ ){
	inputElem.setAttribute('type',inputElemType = props[i]);
	bool = inputElem.type !== 'text';
	// We first check to see if the type we give it sticks.. // If the type does,we feed it a textual value,which shouldn't be valid. // If the value doesn't stick,we know there's input sanitization which infers a custom UI if ( bool ){
	inputElem.value = smile;
	inputElem.style.cssText = 'position:absolute;
	visibility:hidden;
	';
	if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ){
	docElement.appendChild(inputElem);
	defaultView = document.defaultView;
	// Safari 2-4 allows the smiley as a value,despite making a slider bool = defaultView.getComputedStyle && defaultView.getComputedStyle(inputElem,null).WebkitAppearance !== 'textfield' && // Mobile android web browser has false positive,so must // check the height to see if the widget is actually there. (inputElem.offsetHeight !== 0);
	docElement.removeChild(inputElem);
}
else if ( /^(search|tel)$/.test(inputElemType) ){
	// Spec doesn't define any special parsing or detectable UI // behaviors so we pass these through as true // Interestingly,opera fails the earlier test,so it doesn't // even make it here.}
else if ( /^(url|email)$/.test(inputElemType) ){
	// Real url and email support comes with prebaked validation. bool = inputElem.checkValidity && inputElem.checkValidity() === false;
}
else{
	// If the upgraded input compontent rejects the:) text,we got a winner bool = inputElem.value != smile;
}
}
inputs[ props[i] ] = !!bool;
}
return inputs;
}
)('search tel url email datetime date month week time datetime-local number range color'.split(' '));
	/*>>inputtypes*/
}
/*>>webforms*/
 // End of test definitions // ----------------------- // Run through all tests and detect their support in the current UA. // todo:hypothetically we could be doing an array of tests and use a basic loop here. for ( var feature in tests ){
	if ( hasOwnProp(tests,feature) ){
	// run the test,throw the return value into the Modernizr,// then based on that boolean,define an appropriate className // and push it into an array of classes we'll join later. featureName = feature.toLowerCase();
	Modernizr[featureName] = tests[feature]();
	classes.push((Modernizr[featureName] ? '':'no-') + featureName);
}
}
/*>>webforms*/
 // input tests need to run. Modernizr.input || webforms();
	/*>>webforms*/
 /** * addTest allows the user to define their own feature tests * the result will be added onto the Modernizr object,* as well as an appropriate className set on the html element * * @param feature - String naming the feature * @param test - Function returning true if feature is supported,false if not */
 Modernizr.addTest = function ( feature,test ){
	if ( typeof feature == 'object' ){
	for ( var key in feature ){
	if ( hasOwnProp( feature,key ) ){
	Modernizr.addTest( key,feature[ key ] );
}
}
}
else{
	feature = feature.toLowerCase();
	if ( Modernizr[feature] !== undefined ){
	// we're going to quit if you're trying to overwrite an existing test // if we were to allow it,we'd do this:// var re = new RegExp("\\b(no-)?" + feature + "\\b");
	// docElement.className = docElement.className.replace( re,'' );
	// but,no rly,stuff 'em. return Modernizr;
}
test = typeof test == 'function' ? test():test;
	if (typeof enableClasses !== "undefined" && enableClasses){
	docElement.className += ' ' + (test ? '':'no-') + feature;
}
Modernizr[feature] = test;
}
return Modernizr;
	// allow chaining.}
;
	// Reset modElem.cssText to nothing to reduce memory footprint. setCss('');
	modElem = inputElem = null;
	/*>>shiv*/
 /** * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
;
	(function(window,document){
	/*jshint evil:true */
 /** version */
 var version = '3.7.0';
	/** Preset options */
 var options = window.html5 ||{
}
;
	/** Used to skip problem elements */
 var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
	/** Not all elements can be cloned in IE **/
 var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
	/** Detect whether the browser supports default html5 styles */
 var supportsHtml5Styles;
	/** Name of the expando,to work with multiple documents or to re-shiv one document */
 var expando = '_html5shiv';
	/** The id for the the documents expando */
 var expanID = 0;
	/** Cached data for each document */
 var expandoData ={
}
;
	/** Detect whether the browser supports unknown elements */
 var supportsUnknownElements;
	(function(){
	try{
	var a = document.createElement('a');
	a.innerHTML = '<xyz></xyz>';
	//if the hidden property is implemented we can assume,that the browser supports basic HTML5 Styles supportsHtml5Styles = ('hidden' in a);
	supportsUnknownElements = a.childNodes.length == 1 || (function(){
	// assign a false positive if unable to shiv (document.createElement)('a');
	var frag = document.createDocumentFragment();
	return ( typeof frag.cloneNode == 'undefined' || typeof frag.createDocumentFragment == 'undefined' || typeof frag.createElement == 'undefined' );
}
());
}
catch(e){
	// assign a false positive if detection fails => unable to shiv supportsHtml5Styles = true;
	supportsUnknownElements = true;
}
}
());
	/*--------------------------------------------------------------------------*/
 /** * Creates a style sheet with the given CSS text and adds it to the document. * @private * @param{
	Document}
ownerDocument The document. * @param{
	String}
cssText The CSS text. * @returns{
	StyleSheet}
The style element. */
 function addStyleSheet(ownerDocument,cssText){
	var p = ownerDocument.createElement('p'),parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
	p.innerHTML = 'x<style>' + cssText + '</style>';
	return parent.insertBefore(p.lastChild,parent.firstChild);
}
/** * Returns the value of `html5.elements` as an array. * @private * @returns{
	Array}
An array of shived element node names. */
 function getElements(){
	var elements = html5.elements;
	return typeof elements == 'string' ? elements.split(' '):elements;
}
/** * Returns the data associated to the given document * @private * @param{
	Document}
ownerDocument The document. * @returns{
	Object}
An object of data. */
 function getExpandoData(ownerDocument){
	var data = expandoData[ownerDocument[expando]];
	if (!data){
	data ={
}
;
	expanID++;
	ownerDocument[expando] = expanID;
	expandoData[expanID] = data;
}
return data;
}
/** * returns a shived element for the given nodeName and document * @memberOf html5 * @param{
	String}
nodeName name of the element * @param{
	Document}
ownerDocument The context document. * @returns{
	Object}
The shived element. */
 function createElement(nodeName,ownerDocument,data){
	if (!ownerDocument){
	ownerDocument = document;
}
if(supportsUnknownElements){
	return ownerDocument.createElement(nodeName);
}
if (!data){
	data = getExpandoData(ownerDocument);
}
var node;
	if (data.cache[nodeName]){
	node = data.cache[nodeName].cloneNode();
}
else if (saveClones.test(nodeName)){
	node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
}
else{
	node = data.createElem(nodeName);
}
// Avoid adding some elements to fragments in IE < 9 because // * Attributes like `name` or `type` cannot be set/changed once an element // is inserted into a document/fragment // * Link elements with `src` attributes that are inaccessible,as with // a 403 response,will cause the tab/window to crash // * Script elements appended to fragments will execute when their `src` // or `text` property is set return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node):node;
}
/** * returns a shived DocumentFragment for the given document * @memberOf html5 * @param{
	Document}
ownerDocument The context document. * @returns{
	Object}
The shived DocumentFragment. */
 function createDocumentFragment(ownerDocument,data){
	if (!ownerDocument){
	ownerDocument = document;
}
if(supportsUnknownElements){
	return ownerDocument.createDocumentFragment();
}
data = data || getExpandoData(ownerDocument);
	var clone = data.frag.cloneNode(),i = 0,elems = getElements(),l = elems.length;
	for(;
	i<l;
	i++){
	clone.createElement(elems[i]);
}
return clone;
}
/** * Shivs the `createElement` and `createDocumentFragment` methods of the document. * @private * @param{
	Document|DocumentFragment}
ownerDocument The document. * @param{
	Object}
data of the document. */
 function shivMethods(ownerDocument,data){
	if (!data.cache){
	data.cache ={
}
;
	data.createElem = ownerDocument.createElement;
	data.createFrag = ownerDocument.createDocumentFragment;
	data.frag = data.createFrag();
}
ownerDocument.createElement = function(nodeName){
	//abort shiv if (!html5.shivMethods){
	return data.createElem(nodeName);
}
return createElement(nodeName,ownerDocument,data);
}
;
	ownerDocument.createDocumentFragment = Function('h,f','return function(){
	' + 'var n=f.cloneNode(),c=n.createElement;
	' + 'h.shivMethods&&(' + // unroll the `createElement` calls getElements().join().replace(/[\w\-]+/g,function(nodeName){
	data.createElem(nodeName);
	data.frag.createElement(nodeName);
	return 'c("' + nodeName + '")';
}
) + ');
	return n}
' )(html5,data.frag);
}
/*--------------------------------------------------------------------------*/
 /** * Shivs the given document. * @memberOf html5 * @param{
	Document}
ownerDocument The document to shiv. * @returns{
	Document}
The shived document. */
 function shivDocument(ownerDocument){
	if (!ownerDocument){
	ownerDocument = document;
}
var data = getExpandoData(ownerDocument);
	if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS){
	data.hasCSS = !!addStyleSheet(ownerDocument,// corrects block display not defined in IE6/7/8/9 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{
	display:block}
' + // adds styling not present in IE6/7/8/9 'mark{
	background:#FF0;
	color:#000}
' + // hides non-rendered elements 'template{
	display:none}
' );
}
if (!supportsUnknownElements){
	shivMethods(ownerDocument,data);
}
return ownerDocument;
}
/*--------------------------------------------------------------------------*/
 /** * The `html5` object is exposed so that more elements can be shived and * existing shiving can be detected on iframes. * @type Object * @example * * // options can be changed before the script is included * html5 ={
	'elements':'mark section','shivCSS':false,'shivMethods':false}
;
	*/
 var html5 ={
	/** * An array or space separated string of node names of the elements to shiv. * @memberOf html5 * @type Array|String */
 'elements':options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',/** * current version of html5shiv */
 'version':version,/** * A flag to indicate that the HTML5 style sheet should be inserted. * @memberOf html5 * @type Boolean */
 'shivCSS':(options.shivCSS !== false),/** * Is equal to true if a browser supports creating unknown/HTML5 elements * @memberOf html5 * @type boolean */
 'supportsUnknownElements':supportsUnknownElements,/** * A flag to indicate that the document's `createElement` and `createDocumentFragment` * methods should be overwritten. * @memberOf html5 * @type Boolean */
 'shivMethods':(options.shivMethods !== false),/** * A string to describe the type of `html5` object ("default" or "default print"). * @memberOf html5 * @type String */
 'type':'default',// shivs the document according to the specified `html5` object options 'shivDocument':shivDocument,//creates a shived element createElement:createElement,//creates a shived documentFragment createDocumentFragment:createDocumentFragment}
;
	/*--------------------------------------------------------------------------*/
 // expose html5 window.html5 = html5;
	// shiv the document shivDocument(document);
}
(this,document));
	/*>>shiv*/
 // Assign private properties to the return object with prefix Modernizr._version = version;
	// expose these for the plugin API. Look in the source for how to join() them against your input /*>>prefixes*/
 Modernizr._prefixes = prefixes;
	/*>>prefixes*/
 /*>>domprefixes*/
 Modernizr._domPrefixes = domPrefixes;
	Modernizr._cssomPrefixes = cssomPrefixes;
	/*>>domprefixes*/
 /*>>mq*/
 // Modernizr.mq tests a given media query,live against the current state of the window // A few important notes:// * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false // * A max-width or orientation query will be evaluated against the current state,which may change later. // * You must specify values. Eg. If you are testing support for the min-width media query use:// Modernizr.mq('(min-width:0)') // usage:// Modernizr.mq('only screen and (max-width:768)') Modernizr.mq = testMediaQuery;
	/*>>mq*/
 /*>>hasevent*/
 // Modernizr.hasEvent() detects support for a given event,with an optional element to test on // Modernizr.hasEvent('gesturestart',elem) Modernizr.hasEvent = isEventSupported;
	/*>>hasevent*/
 /*>>testprop*/
 // Modernizr.testProp() investigates whether a given style property is recognized // Note that the property names must be provided in the camelCase variant. // Modernizr.testProp('pointerEvents') Modernizr.testProp = function(prop){
	return testProps([prop]);
}
;
	/*>>testprop*/
 /*>>testallprops*/
 // Modernizr.testAllProps() investigates whether a given style property,// or any of its vendor-prefixed variants,is recognized // Note that the property names must be provided in the camelCase variant. // Modernizr.testAllProps('boxSizing') Modernizr.testAllProps = testPropsAll;
	/*>>testallprops*/
 /*>>teststyles*/
 // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards // Modernizr.testStyles('#modernizr{
	position:absolute}
',function(elem,rule){
	...}
) Modernizr.testStyles = injectElementWithStyles;
	/*>>teststyles*/
 /*>>prefixed*/
 // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input // Modernizr.prefixed('boxSizing') // 'MozBoxSizing' // Properties must be passed as dom-style camelcase,rather than `box-sizing` hypentated style. // Return values will also be the camelCase variant,if you need to translate that to hypenated style use:// // str.replace(/([A-Z])/g,function(str,m1){
	return '-' + m1.toLowerCase();
}
).replace(/^ms-/,'-ms-');
	// If you're trying to ascertain which transition end event to bind to,you might do something like... // // var transEndEventNames ={
	// 'WebkitTransition':'webkitTransitionEnd',// 'MozTransition':'transitionend',// 'OTransition':'oTransitionEnd',// 'msTransition':'MSTransitionEnd',// 'transition':'transitionend' //}
,// transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
	Modernizr.prefixed = function(prop,obj,elem){
	if(!obj){
	return testPropsAll(prop,'pfx');
}
else{
	// Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame',window) // 'mozRequestAnimationFrame' return testPropsAll(prop,obj,elem);
}
}
;
	/*>>prefixed*/
 /*>>cssclasses*/
 // Remove "no-js" class from <html> element,if it exists:docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/,'$1$2') + // Add the new classes to the <html> element. (enableClasses ? ' js ' + classes.join(' '):'');
	/*>>cssclasses*/
 return Modernizr;
}
)(this,this.document);
	

CSS代码(jquery.vm-carousel.css):

/* ========================================================================= *\ vmcarousel plugin\* ========================================================================= */
.vmc-container{position:relative;}
.vmc-viewport{overflow:hidden;}
.vmcarousel{list-style-type:none;padding:0;margin:0;width:1000%;}
.vmcarousel:after{content:'';display:table;clear:both;}
.vmcarousel > li{float:left;}
.vmcarousel > li img{display:block;margin:0 auto;max-width:100%;}
.vmc-container.hide-controls .vmc-arrow-left,.vmc-container.hide-controls .vmc-arrow-right{display:none;}
.vmc-arrow-left,.vmc-arrow-right{position:absolute;top:50%;left:-15px;width:50px;height:50px;margin-top:-25px;overflow:hidden;opacity:0;border-radius:50%;transition:opacity 0.3s ease;text-align:center;}
.vmc-arrow-right{left:auto;right:-15px;}
.vmc-container:hover .vmc-arrow-left,.vmc-container:hover .vmc-arrow-right{opacity:1;}
.vmc-arrow-left:after,.vmc-arrow-right:after{content:'';display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;font-size:50px;line-height:50px;color:white;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:2px 2px #000;}
.vmc-arrow-left:hover:after,.vmc-arrow-right:hover:after{color:white;}
.vmc-arrow-left:after{content:"\e079";}
.vmc-arrow-right:after{content:"\e080";}
.vmc-container img[src$=".svg"]{width:100% !important;height:auto !important;max-height:100%;}
.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;-ms-transition:none !important;transition:none !important;}

CSS代码(zzsc.css):

body,html{font-size:100%;padding:0;margin:0;}
/* Reset */
*,*:after,*:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
/* Clearfix hack by Nicolas Gallagher:http://nicolasgallagher.com/micro-clearfix-hack/ */
.clearfix:before,.clearfix:after{content:" ";display:table;}
.clearfix:after{clear:both;}
body{background:#494A5F;color:#D5D6E2;font-weight:500;font-size:1.05em;font-family:"Microsoft YaHei","Segoe UI","Lucida Grande",Helvetica,Arial,sans-serif;}
a{color:rgba(255,255,255,0.6);outline:none;text-decoration:none;-webkit-transition:0.2s;transition:0.2s;}
a:hover,a:focus{color:#74777b;text-decoration:none;}
附件:下载该文件资源,减少时间成本(增值服务)
留言
该资源可下载
File Source
.rar
1.01 MB
Html Js 图片切换触摸2
最新结算
jquery虚拟键盘中文打字效果js代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
jquery虚拟键盘中文打字效果js代码
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
HTML5实现CSS滤镜图片切换特效代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
jQuery头像裁剪插件cropbox js代码
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
jQuery头像裁剪插件cropbox js代码
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 2.31¥ 状态: 待结算 详细>
CSS3制作3D图片立方体旋转特效
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
jQuery+css3实现信封效果
类型: .rar 金额: CNY 0.29¥ 状态: 待结算 详细>
我们力求给您提供有用的文章,再此基础上,会附加营收资源,不做任何广告,让平台可以更好发展 若您发现您的权利被侵害,或使用了您的版权,请发邮件联系 sunlifel@foxmail.com ggbig觉得 : 不提供源码的文章不是好文章
合作伙伴
联系我们
  • QQ:21499807
  • 邮箱:sunlifel@foxmail.com
  • QQ扫一扫加QQ
    QQ扫一扫
Copyright 2023-2024 ggbig.com·皖ICP备2023004211号-1
打赏文章