Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/Ultimate_VC_Addons/assets/js/easy-ticker.js |
/*
* jQuery - Easy Ticker plugin - v3.2.1
* https://www.aakashweb.com/
* Copyright 2021, Aakash Chakravarthy
* Released under the MIT License.
*/
;(function ($, window, document, undefined) {
var name = "easyTicker",
defaults = {
direction: 'up',
easing: 'swing',
speed: 'slow',
interval: 2000,
height: 'auto',
visible: 0,
mousePause: true,
controls: {
up: '',
down: '',
toggle: '',
playText: 'Play',
stopText: 'Stop'
},
callbacks: {
before: false,
after: false
}
};
// Constructor
function EasyTicker(el, options) {
var s = this;
s.opts = $.extend({}, defaults, options);
s.elem = $(el);
s.targ = $(el).children(':first-child');
s.timer = 0;
init();
start();
tabFocusHandle();
if(s.opts.mousePause){
s.elem.on('mouseenter', function(){
s.timerTemp = s.timer;
stop();
}).on('mouseleave', function(){
if(s.timerTemp !== 0)
start();
});
}
$(s.opts.controls.up).on('click', function(e){
e.preventDefault();
moveDir('up');
});
$(s.opts.controls.down).on('click', function(e){
e.preventDefault();
moveDir('down');
});
$(s.opts.controls.toggle).on('click', function(e){
e.preventDefault();
if(s.timer == 0) start();
else stop();
});
function init(){
s.elem.children().css('margin', 0).children().css('margin', 0);
s.elem.css({
position: 'relative',
height: s.opts.height,
overflow: 'hidden'
});
s.targ.css({
'position': 'absolute',
'margin': 0
});
s.heightTimer = setInterval(function(){
adjustHeight(false);
}, 100);
}
function start(){
if(s.timer != 0)
return;
s.timer = setInterval(function(){
move(s.opts.direction);
}, s.opts.interval);
$(s.opts.controls.toggle).addClass('et-run').html(s.opts.controls.stopText);
}
function stop(){
clearInterval(s.timer);
s.timer = 0;
$(s.opts.controls.toggle).removeClass('et-run').html(s.opts.controls.playText);
}
function move(dir){
var sel, eq, appType;
if(!s.elem.is(':visible')) return;
if(dir == 'up'){
sel = ':first-child';
eq = '-=';
appType = 'appendTo';
}else{
sel = ':last-child';
eq = '+=';
appType = 'prependTo';
}
var selChild = s.targ.children(sel);
var height = selChild.outerHeight();
if(typeof s.opts.callbacks.before === 'function'){
s.opts.callbacks.before.call(s, s.targ, selChild);
}
s.targ.stop(true, true).animate({
'top': eq + height + 'px'
}, s.opts.speed, s.opts.easing, function(){
selChild.hide()[appType](s.targ).fadeIn();
s.targ.css('top', 0);
adjustHeight(true);
if(typeof s.opts.callbacks.after === 'function'){
s.opts.callbacks.after.call(s, s.targ, selChild);
}
});
}
function moveDir(dir){
stop();
if(dir == 'up') move('up'); else move('down');
// start();
}
function setFullHeight(){
var height = 0;
var tempDisplay = s.elem.css('display'); // Get the current el display value
s.elem.css('display', 'block');
s.targ.children().each(function(){
height += $(this).outerHeight();
});
s.elem.css({
'display': tempDisplay,
'height': height
});
}
function setVisibleHeight(animate){
var wrapHeight = 0;
var visibleItemClass = 'et-item-visible';
s.targ.children().removeClass(visibleItemClass);
s.targ.children(':lt(' + s.opts.visible + ')').each(function(){
wrapHeight += $(this).outerHeight();
$(this).addClass(visibleItemClass);
});
if(animate){
s.elem.stop(true, true).animate({height: wrapHeight}, s.opts.speed);
}else{
s.elem.css('height', wrapHeight);
}
}
function adjustHeight(animate){
if(s.opts.height == 'auto'){
if(s.opts.visible > 0){
setVisibleHeight(animate);
}else{
setFullHeight();
}
}
if(!animate){
clearInterval(s.heightTimer);
}
}
function tabFocusHandle(){
var hidden, visibilityChange;
if(typeof document.hidden !== 'undefined'){
hidden = 'hidden';
visibilityChange = 'visibilitychange';
}else if (typeof document.msHidden !== 'undefined'){
hidden = 'msHidden';
visibilityChange = 'msvisibilitychange';
}else if (typeof document.webkitHidden !== 'undefined'){
hidden = 'webkitHidden';
visibilityChange = 'webkitvisibilitychange';
}
document.addEventListener(visibilityChange, function(){
if(document[hidden]){
stop();
}else{
start();
}
}, false);
}
return {
up: function(){ moveDir('up'); },
down: function(){ moveDir('down'); },
start: start,
stop: stop,
options: s.opts
};
}
// Attach the object to the DOM
$.fn[name] = function(options) {
return this.each(function () {
if (!$.data(this, name)) {
$.data(this, name, new EasyTicker(this, options));
}
});
};
})(jQuery, window, document);