Advertisement
Guest User

responsiveanimatetedaccordian.js

a guest
Sep 29th, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*!
  2.  * classie - class helper functions
  3.  * from bonzo https://github.com/ded/bonzo
  4.  *
  5.  * classie.has( elem, 'my-class' ) -> true/false
  6.  * classie.add( elem, 'my-new-class' )
  7.  * classie.remove( elem, 'my-unwanted-class' )
  8.  * classie.toggle( elem, 'my-class' )
  9.  */
  10.  
  11. /*jshint browser: true, strict: true, undef: true */
  12. /*global define: false */
  13.  
  14. ( function( window ) {
  15.  
  16. 'use strict';
  17.  
  18. // class helper functions from bonzo https://github.com/ded/bonzo
  19.  
  20. function classReg( className ) {
  21.   return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
  22. }
  23.  
  24. // classList support for class management
  25. // altho to be fair, the api sucks because it won't accept multiple classes at once
  26. var hasClass, addClass, removeClass;
  27.  
  28. if ( 'classList' in document.documentElement ) {
  29.   hasClass = function( elem, c ) {
  30.     return elem.classList.contains( c );
  31.   };
  32.   addClass = function( elem, c ) {
  33.     elem.classList.add( c );
  34.   };
  35.   removeClass = function( elem, c ) {
  36.     elem.classList.remove( c );
  37.   };
  38. }
  39. else {
  40.   hasClass = function( elem, c ) {
  41.     return classReg( c ).test( elem.className );
  42.   };
  43.   addClass = function( elem, c ) {
  44.     if ( !hasClass( elem, c ) ) {
  45.       elem.className = elem.className + ' ' + c;
  46.     }
  47.   };
  48.   removeClass = function( elem, c ) {
  49.     elem.className = elem.className.replace( classReg( c ), ' ' );
  50.   };
  51. }
  52.  
  53. function toggleClass( elem, c ) {
  54.   var fn = hasClass( elem, c ) ? removeClass : addClass;
  55.   fn( elem, c );
  56. }
  57.  
  58. var classie = {
  59.   // full names
  60.   hasClass: hasClass,
  61.   addClass: addClass,
  62.   removeClass: removeClass,
  63.   toggleClass: toggleClass,
  64.   // short names
  65.   has: hasClass,
  66.   add: addClass,
  67.   remove: removeClass,
  68.   toggle: toggleClass
  69. };
  70.  
  71. // transport
  72. if ( typeof define === 'function' && define.amd ) {
  73.   // AMD
  74.   define( classie );
  75. } else {
  76.   // browser global
  77.   window.classie = classie;
  78. }
  79.  
  80. })( window );
  81.  
  82. //fake jQuery
  83. var $ = function(selector){
  84.   return document.querySelector(selector);
  85. }
  86. var accordion = $('.accordion');
  87.  
  88.  
  89.  
  90.  
  91.  
  92. //add event listener to all anchor tags with accordion title class
  93. accordion.addEventListener("click",function(e) {
  94.   e.stopPropagation();
  95.   e.preventDefault();
  96.   if(e.target && e.target.nodeName == "A") {
  97.     var classes = e.target.className.split(" ");
  98.     if(classes) {
  99.       for(var x = 0; x < classes.length; x++) {
  100.         if(classes[x] == "accordionTitle") {
  101.           var title = e.target;
  102.  
  103.           //next element sibling needs to be tested in IE8+ for any crashing problems
  104.           var content = e.target.parentNode.nextElementSibling;
  105.          
  106.           //use classie to then toggle the active class which will then open and close the accordion
  107.          
  108.           classie.toggle(title, 'accordionTitleActive');
  109.           //this is just here to allow a custom animation to treat the content
  110.           if(classie.has(content, 'accordionItemCollapsed')) {
  111.             if(classie.has(content, 'animateOut')){
  112.               classie.remove(content, 'animateOut');
  113.             }
  114.             classie.add(content, 'animateIn');
  115.  
  116.           }else{
  117.              classie.remove(content, 'animateIn');
  118.              classie.add(content, 'animateOut');
  119.           }
  120.           //remove or add the collapsed state
  121.           classie.toggle(content, 'accordionItemCollapsed');
  122.  
  123.  
  124.  
  125.          
  126.         }
  127.       }
  128.     }
  129.    
  130.   }
  131. });//@ sourceURL=pen.js
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement