jquery-ui/demos/functional/js/behaviour.js

205 lines
5.3 KiB
JavaScript

$(document).ready(function() {
// link demos
$(".demoflow div.wrapper").click(function() {
var demo = $(this).children('img').attr('_demo');
if (demo) {
location.href = '/repository/real-world/' + demo;
}else {
//alert('Under construction!');
}
});
if ($("div.demoflow").size()) {
var inst = new $.ui.carousel($("div.demoflow")[0], { height: 200, width: 310 });
$("div.demoflow-button-left, div.demoflow-button-right").bind("mousedown", function() {
var right = this.className.indexOf("right") == -1;
if(inst.autoRotator) window.clearInterval(inst.autoRotator);
inst.timer = window.setInterval(function() { inst.rotate(right ? "right" : null); }, 13);
})
.bind("mouseup", function() {
window.clearInterval(inst.timer);
});
$('.demoflow div.shadow').hover(function() {
this._lastopacity = $(this).css('opacity');
$(this).stop().animate({opacity: 0 }, 300);
}, function() {
$(this).stop().animate({opacity: this._lastopacity }, 300);
});
window.setTimeout(function() {
inst.element.animate({ opacity: 1 },2000); inst.rotate(0,2000,0.45);
window.setTimeout(function() {
inst.autoRotator = window.setInterval(function() { inst.rotate(0,2000,0.45); },5000);
},3000);
},0);
}
$('a').click(function(){
this.blur();
});
// smooth hover effects by DragonInteractive
var hover = hoverEffects();
hover.init();
});
$.ui.carousel = function(element, options) {
this.element = $(element);
this.options = $.extend({}, options);
var self = this;
$.extend(this, {
start: Math.PI/2,
step: 2*Math.PI/$("> *", this.element).length,
radiusX: 400,
radiusY: -45,
paddingX: this.element.outerWidth() / 2,
paddingY: this.element.outerHeight() / 2
});
$("> *", this.element).css({ position: "absolute", top: 0, left: 0, zIndex: 1 });
this.rotate();
this.rotate("right");
this.element.parent().bind("mousewheel", function(event ,delta) {
if(self.autoRotator) window.clearInterval(self.autoRotator);
self.rotate(delta < 0 ? "right" : "left");
return false;
});
};
$.ui.carousel.prototype.rotate = function(d,ani,speed) {
this.start = this.start + (d == "right" ? -(speed || 0.03) : (speed || 0.03));
var o = this.options;
var self = this;
setTimeout(function(){
$("> *", self.element).each(function(i) {
var angle = self.start + i * self.step;
var x = self.radiusX * Math.cos(angle);
var y = self.radiusY * Math.sin(angle);
var _self = this;
var width = o.width * ((self.radiusY+y) / (2 * self.radiusY));
width = (width * width * width) / (o.width * o.width); //This makes the pieces smaller
var height = parseInt(width * o.height / o.width);
//This is highly custom - it will hide the elements at the back
$(_self).css({ visibility: height < 30 ? "hidden" : "visible" });
if(height < 30 && !ani) return; //This imrpoves the speed, but cannot be used with animation
if(ani) {
$(_self).animate({
top: Math.round(self.paddingY + y - height/2) + "px",
left: Math.round(self.paddingX + x - width/2) + "px",
width: Math.round(width) + "px",
height: Math.round(height) + "px"
},{ duration: ani, easing: "easeOutQuad" });
$(_self).css({ zIndex: Math.round(parseInt(100 * (self.radiusY+y) / (2 * self.radiusY))) });
} else {
$(_self).css({
top: self.paddingY + y - height/2 + "px",
left: self.paddingX + x - width/2 + "px",
width: width + "px",
height: height + "px",
zIndex: parseInt(100 * (self.radiusY+y) / (2 * self.radiusY))
});
}
$("div.shadow",_self).css({ opacity: 1 - (width / o.width) });
});
}, 0);
}
/**
* All credit here goes to DragonInteractive and Yuri Vishnevsky
*/
var hoverEffects = function() {
var me = this;
var args = arguments;
var self = {
c: {
navItems: '.download .click-to-download, #launch-pad .launch-pad-button, div.demoflow-button-left, div.demoflow-button-right',
navSpeed: ($.browser.safari ? 600: 350),
snOpeningSpeed: ($.browser.safari ? 400: 250),
snOpeningTimeout: 150,
snClosingSpeed: function() {
if (self.subnavHovered()) return 123450;
return 150
},
snClosingTimeout: 700
},
init: function() {
//$('.bg', this.c.navItems).css({
// 'opacity': 0
//});
this.initHoverFades()
},
subnavHovered: function() {
var hovered = false;
$(self.c.navItems).each(function() {
if (this.hovered) hovered = true
});
return hovered
},
initHoverFades: function() {
//$('#navigation .bg').css('opacity', 0);
$(self.c.navItems).hover(function() {
self.fadeNavIn.apply(this)
},
function() {
var el = this;
setTimeout(function() {
if (!el.open) self.fadeNavOut.apply(el)
},
10)
})
},
fadeNavIn: function() {
$('.bg', this).stop().animate({
'opacity': 1
},
self.c.navSpeed)
},
fadeNavOut: function() {
$('.bg', this).stop().animate({
'opacity': 0
},
self.c.navSpeed)
},
initSubmenus: function() {
$(this.c.navItems).hover(function() {
$(self.c.navItems).not(this).each(function() {
self.fadeNavOut.apply(this);
});
this.hovered = true;
var el = this;
self.fadeNavIn.apply(el);
},
function() {
this.hovered = false;
var el = this;
if (!el.open) self.fadeNavOut.apply(el);
})
}
};
return self;
};