Advertisement
Guest User

Untitled

a guest
May 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function() {
  2. var fixedWidgetConf = {
  3.     'widget': {
  4.         /* Id of the widget to fix */
  5.         'widget': 'topcasino',
  6.         /* Levels to go up in the DOM tree to get the widget container to fix */
  7.         'widget_container_lvl': 2,
  8.         /* Id of the sidebar */
  9.         'sidebar': 'sidebar-wrapper'
  10.     },
  11.     'fixed': {
  12.         'cssclass': 'fixed-sidebar-widget-elem'
  13.     },
  14.     'style': [
  15.         [ 'position', 'fixed' ],
  16.         [ 'top', '45px' ],
  17.         [ 'box-sizing', 'border-box' ],
  18.         [ 'transition', 'top 0.4s ease-out' ]
  19.     ]
  20. };//fixedWidgetConf
  21. var fixedWidget = function(conf){
  22.  
  23. var fwConfig = {};
  24.  
  25. var unfixWidget = function(elem, conf){
  26.     var fixed_element_class = conf.fixed.cssclass;
  27.     if(elem.classList.contains(fixed_element_class)){
  28.         elem.classList.remove(fixed_element_class);
  29.     }
  30. };
  31. var fixWidget = function(elem, conf){
  32.     var fixed_element_class = conf.fixed.cssclass;
  33.     if(!elem.classList.contains(fixed_element_class)){
  34.         elem.classList.add(fixed_element_class);
  35.     }
  36. };
  37. var onEvtScroll = function(widget, sidebar, conf){
  38.     if(sidebar.getBoundingClientRect().bottom<=0){
  39.         fixWidget(widget, conf);
  40.     }else{
  41.         unfixWidget(widget, conf);
  42.     }
  43. };
  44. var fwInit = function(addListenerFn){
  45.     /* Get elements */
  46.     /* - Get widget container */
  47.     var widget = document.getElementById(fwConfig.widget.widget); if(!widget) return false;
  48.     for(var j=0; j<fwConfig.widget.widget_container_lvl; j++){
  49.         widget = widget.parentNode; if(!widget) return false;
  50.     }
  51.     /* - Get sidebar */
  52.     var sidebar = document.getElementById(fwConfig.widget.sidebar); if(!sidebar) return false;
  53.     /* Add style for floated sidebar widget. */
  54.     var appendStyle = document.createElement('style');
  55.     appendStyle.setAttribute('type', 'text/css');
  56.     appendStyle.innerHTML = widget.tagName.toLowerCase()+'.'+widget.classList.toString().replace(/\s/g, '.')+' {';
  57.     appendStyle.innerHTML += 'top: 0;';
  58.     appendStyle.innerHTML += '} ';
  59.     appendStyle.innerHTML += widget.tagName.toLowerCase()+'.'+widget.classList.toString().replace(/\s/g, '.')+'.'+fwConfig.fixed.cssclass + ' { ';
  60.     for(var i=0; i<fwConfig.style.length; i++){
  61.         var s = fwConfig.style[i];
  62.         appendStyle.innerHTML += s[0] + ': ' + s[1] + ';';
  63.     }
  64.     appendStyle.innerHTML += 'width: ' + widget.getBoundingClientRect().width + 'px;';
  65.     appendStyle.innerHTML += 'max-width: ' + widget.getBoundingClientRect().width + 'px;';
  66.     appendStyle.innerHTML += '} ';
  67.     document.head.appendChild(appendStyle);
  68.     /* Call event listener function */
  69.     var scrollEventListener = function(){
  70.         onEvtScroll(widget, sidebar, fwConfig);
  71.     };
  72.     document.addEventListener('scroll', scrollEventListener);
  73. };
  74. if(!jQuery && !window.jQuery) return;
  75. if(!jQuery && window.jQuery) jQuery = window.jQuery;
  76. fwConfig = JSON.parse(JSON.stringify(conf));
  77. jQuery(document).ready(function(){ fwInit(); });
  78. };//fixedWidget
  79. fixedWidget(fixedWidgetConf);
  80. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement