Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function() {
- var fixedWidgetConf = {
- 'widget': {
- /* Id of the widget to fix */
- 'widget': 'topcasino',
- /* Levels to go up in the DOM tree to get the widget container to fix */
- 'widget_container_lvl': 2,
- /* Id of the sidebar */
- 'sidebar': 'sidebar-wrapper'
- },
- 'fixed': {
- 'cssclass': 'fixed-sidebar-widget-elem'
- },
- 'style': [
- [ 'position', 'fixed' ],
- [ 'top', '45px' ],
- [ 'box-sizing', 'border-box' ],
- [ 'transition', 'top 0.4s ease-out' ]
- ]
- };//fixedWidgetConf
- var fixedWidget = function(conf){
- var fwConfig = {};
- var unfixWidget = function(elem, conf){
- var fixed_element_class = conf.fixed.cssclass;
- if(elem.classList.contains(fixed_element_class)){
- elem.classList.remove(fixed_element_class);
- }
- };
- var fixWidget = function(elem, conf){
- var fixed_element_class = conf.fixed.cssclass;
- if(!elem.classList.contains(fixed_element_class)){
- elem.classList.add(fixed_element_class);
- }
- };
- var onEvtScroll = function(widget, sidebar, conf){
- if(sidebar.getBoundingClientRect().bottom<=0){
- fixWidget(widget, conf);
- }else{
- unfixWidget(widget, conf);
- }
- };
- var fwInit = function(addListenerFn){
- /* Get elements */
- /* - Get widget container */
- var widget = document.getElementById(fwConfig.widget.widget); if(!widget) return false;
- for(var j=0; j<fwConfig.widget.widget_container_lvl; j++){
- widget = widget.parentNode; if(!widget) return false;
- }
- /* - Get sidebar */
- var sidebar = document.getElementById(fwConfig.widget.sidebar); if(!sidebar) return false;
- /* Add style for floated sidebar widget. */
- var appendStyle = document.createElement('style');
- appendStyle.setAttribute('type', 'text/css');
- appendStyle.innerHTML = widget.tagName.toLowerCase()+'.'+widget.classList.toString().replace(/\s/g, '.')+' {';
- appendStyle.innerHTML += 'top: 0;';
- appendStyle.innerHTML += '} ';
- appendStyle.innerHTML += widget.tagName.toLowerCase()+'.'+widget.classList.toString().replace(/\s/g, '.')+'.'+fwConfig.fixed.cssclass + ' { ';
- for(var i=0; i<fwConfig.style.length; i++){
- var s = fwConfig.style[i];
- appendStyle.innerHTML += s[0] + ': ' + s[1] + ';';
- }
- appendStyle.innerHTML += 'width: ' + widget.getBoundingClientRect().width + 'px;';
- appendStyle.innerHTML += 'max-width: ' + widget.getBoundingClientRect().width + 'px;';
- appendStyle.innerHTML += '} ';
- document.head.appendChild(appendStyle);
- /* Call event listener function */
- var scrollEventListener = function(){
- onEvtScroll(widget, sidebar, fwConfig);
- };
- document.addEventListener('scroll', scrollEventListener);
- };
- if(!jQuery && !window.jQuery) return;
- if(!jQuery && window.jQuery) jQuery = window.jQuery;
- fwConfig = JSON.parse(JSON.stringify(conf));
- jQuery(document).ready(function(){ fwInit(); });
- };//fixedWidget
- fixedWidget(fixedWidgetConf);
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement