Skip to content

Instantly share code, notes, and snippets.

@ErDmKo
Created April 4, 2014 08:52
Show Gist options
  • Save ErDmKo/9970746 to your computer and use it in GitHub Desktop.
Save ErDmKo/9970746 to your computer and use it in GitHub Desktop.
JavaScript poper and slider
function extend(cls, superCls)
{
var construct = function () {};
construct.prototype = superCls.prototype;
cls.prototype = new construct();
cls.prototype.constructor = cls;
var obj = superCls;
cls.index = 0;
cls.extend_array = [obj];
while (typeof obj != 'undefined' && obj.hasOwnProperty('super'))
{
obj = superCls.super;
cls.extend_array.push(obj);
cls.index ++;
}
cls.super = superCls;
}
var ajax_validation = function(){
var
self = {
def_option:{
form_selector: 'form[name="send"], #popuper form'
}
},
form,
insert_info = function(info){
if (form.attr('name') == "send")
return $('.order_info .simple_form').html(info);
return form.replaceWith(info);
},
cls = function(options){
for (var k in options)
self.def_option[k] = options[k];
$(self.def_option.form_selector).live('submit',function(e,flag)
{
form = $(this);
if(!flag)
{
e.preventDefault();
$.post('/ajax/!/', form.serializeArray(), function(info)
{
info!='ok'
&&
$('body,html').animate({
scrollTop: insert_info(info).position().top
}, 100)
||
form.trigger('submit', 1)
all_wrap(form);
});
}
});
};
return cls;
}();
var popUper = (function(){
//private
var self = {
def_option:{
body_selector: 'body',
popup_selector: '#popuper',
close_selector: '.close_button',
}
},
windowWidth = 0,
windowHeight = 0,
doc = document.documentElement,
body = document.body,
_get_window_Yscroll = function () {
return window.pageYOffset ||
document.body.scrollTop ||
document.documentElement.scrollTop || 0;
},
_set_window_Yscroll = function (y) {
document.documentElement.scrollTop = y;
document.body.scrollTop = y;
},
set_size = function(is_open)
{
var NwindowWidth = $(window).width(),
NwindowHeight = $(window).height();
if (is_open)
{
if (windowWidth != NwindowWidth)
{
self.$body.css('width', windowWidth);
self.$popuper.css('overflow-y', 'scroll');
}
else
{
self.$body.css('width', '100%');
self.$popuper.css('overflow-y', '');
}
/*TO do для ширины*/
}
windowWidth = NwindowWidth;
windowHeight = NwindowHeight;
self.$popuper.css({
top: self.bodyScrollY,
left: self.bodyScrolX,
width: windowWidth,
height: windowHeight,
});
},
fixBody = function()
{
self.bodyScrollY = _get_window_Yscroll();
self.bodyScrollX = (doc && doc.scrollLeft || body && body.scrollLeft || 0);
self.$body.css({
position:'fixed',
width:'100%',
top: -self.bodyScrollY,
left: -self.bodyScrolX,
height:'100%',
});
self.is_open = true;
set_size(true);
},
clearBody = function()
{
self.$body.css({
position:'',
width:'',
top: '',
left: '',
height:'',
});
_set_window_Yscroll(self.bodyScrollY);
set_size();
};
//pub
self.is_open = false;
self.bodyScrollY = 0;
self.bodyScrollX = 0;
self.$body = $();
self.$popuper = $(self.def_option.popup_selector);
self.clickHandler= function(e)
{
self.$popuper.children('div').find(':not('+self.def_option.close_selector+')').remove();
fixBody();
self.$popuper.fadeIn();
};
self.closerHandler= function(e)
{
var target = $(e.target);
if (target.is(self.$popuper) || target.is(self.$popuper.find(self.def_option.close_selector)))
{
self.$popuper.fadeOut();
clearBody();
}
};
var cls = function(options){
self.$body = $(self.def_option.body_selector);
self.$popuper = $(self.def_option.popup_selector);
for (var k in options)
self.def_option[k] = options[k];
self.$popuper.bind('click', self.closerHandler);
};
cls.prototype = self;
set_size();
$(window).bind('resize', set_size);
return cls;
})();
var ticketFormPopuper = function(){
var
self = this;
cls = function(options){
this.constructor.extend_array.shift().call(this, options);
self = this;
$(self.def_option.button_selector).each(function(){
var
linc = $(this),
info_selector = linc.attr('href');
linc.bind('click', function(e){self.clickHandler(e, info_selector)});
});
};
extend(cls, popUper);
cls.prototype.clickHandler = function(e, popup_content)
{
e.preventDefault();
cls.super.prototype.clickHandler.call(self, e);
self.$popuper.children('div').append($(popup_content).clone().show());
}
return cls;
}()
var imagePopuper = (function(){
var
self,
cls = function(options)
{
this.constructor.extend_array.shift().call(this, options);
self = this;
$(self.def_option.images_selector).bind('click', self.clickHandler);
}
extend(cls, popUper);
cls.prototype.clickHandler = function(e)
{
cls.super.prototype.clickHandler.call(self, e);
var img = e.target;
self.$popuper.children('div').append('<img src="'+img.getAttribute('href')+'"/>');
}
return cls;
})();
var slideImagePopuer = (function(){
var self,
proportion,
leftPosition,
onloader = function (call)
{
var loaderTimer = setInterval(function()
{
if (!$(self.def_option.slider_selector).find('img').filter(function(){ return !this.complete}).length)
{
clearInterval(loaderTimer);
call();
}
}, 100);
},
cls = function(options)
{
this.constructor.extend_array.shift().call(this, options);
self = this;
self.$slider = $(self.def_option.slider_selector)
onloader(function()
{
if (self.$slider.length)
{
proportion = self.$slider[0].scrollWidth/self.$slider.width()-1;
leftPosition = self.$slider.offset().left;
self.$slider.bind('mousemove', self.mouseMoveHandler);
}
});
};
extend(cls, imagePopuper);
cls.prototype.mouseMoveHandler = function(e){
var relative = e.pageX - leftPosition;
self.$slider.scrollLeft(relative*proportion);
};
return cls;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment