-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathjQuery.hoverForMore.min.js
3 lines (3 loc) · 3.94 KB
/
jQuery.hoverForMore.min.js
1
2
3
// http://lukifer.github.com/HoverForMore.js 1.2.1
// opensource.org/licenses/mit-license.php
!function(e){var t=!!e.fn.jquery,s=/Firefox/.test(navigator.userAgent),r=/Mobile/.test(navigator.userAgent),o={speed:60,gap:20,loop:!0,removeTitle:!0,snapback:!0,alwaysOn:!1,addStyles:!0,target:!1,startEvent:r?"touchstart":t?"mouseenter":"mouseover",stopEvent:r?"touchend":t?"mouseleave":"mouseout"};e.fn.hoverForMore=function(t){var a,n,l,i=this,c=document.getElementsByTagName("head")[0];t=e.extend({},o,t);var d=t.target||i.selector;t.alwaysOn&&(t.loop=!0,t.startEvent="startLooping");var f=document.body.style.animationName?!0:!1,v="animation",p="transition",m="transform",y="",u="Webkit Moz O ms Khtml".split(" "),h="";if(f===!1)for(var g=0;g<u.length;g++)if(void 0!==document.body.style[u[g]+"AnimationName"]){h=u[g],v=h+"Animation",p=h+"Transition",m=h+"Transform",y="-"+h.toLowerCase()+"-",f=!0;break}if(t.addStyles&&c.appendChild(e('<style type="text/css">'+i.selector+"{cursor:default;text-align:left;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;"+y+"user-select: none;}</style>")[0]),!f)return e(t.target||i.selector).each(function(t,s){var r=e(s);r.attr("title",e.trim(r.text()))}),i;if(t.loop){var w=e('<style type="text/css"></style>'),x=e('<style type="text/css"></style>');c.appendChild(w[0]),c.appendChild(x[0])}else e(i.selector).each(function(e,t){t.style[m]="translateX(0px)"});return e(d).on(t.startEvent,function(){l=(new Date).getTime();var o=e(t.target?i.selector:this).filter(":first");if(!o.length)return!0;var c=o.parent(),d=o[0].scrollWidth-o.width();if(0>=d)return!0;if(t.removeTitle&&o.removeAttr("title"),n=n||c.css("overflow"),a=a||o.css("overflow"),c.css("overflow","hidden"),r&&t.addStyles&&e("body").css(y+"user-select","none"),o.css("overflow","visible").addClass("scrolling"),t.loop){o.children(".hoverForMoreContent").remove();var f=e('<span class="hoverForMoreContent" />').css({paddingLeft:parseInt(t.gap)+"px"}).text(o.text());o.append(f);var u=f.width()+parseInt(t.gap),h="@"+y+"keyframes hoverForMoreSlide { from {"+y+"transform:translateX( 0 ) }to {"+y+"transform:translateX( -"+u+"px ) }}";w[0].innerHTML=h;var g=u/parseFloat(t.speed);o[0].style[v]="hoverForMoreSlide "+g+"s linear infinite"}else{var g=d/parseFloat(t.speed);o[0].style[p]=y+"transform "+g+"s linear",s?setTimeout(function(){o[0].style[m]="translateX(-"+d+"px)"},0):o[0].style[m]="translateX(-"+d+"px)"}}),t.alwaysOn||e(d).on(t.stopEvent,function(){var o=e(t.target?i.selector:this).filter(":first");if(!o.length)return!0;if(t.loop)if(t.snapback){var c=o.children(".hoverForMoreContent").width()+parseInt(t.gap),d=.001*((new Date).getTime()-l),f=d*t.speed%c,u=f>c/2,h="@"+y+"keyframes hoverForMoreSlideReverse { from {"+y+"transform:translateX( "+(0-f)+"px ) }to {"+y+"transform:translateX( "+(u?0-c:0)+"px ) }}";x[0].innerHTML=h;var g=.2*(u?c-f:f)/parseFloat(t.speed);o[0].style[v]="hoverForMoreSlideReverse "+(g>1?1:g)+"s linear",o.removeClass("scrolling"),setTimeout(function(){o.is(".scrolling")||(o.children(".hoverForMoreContent").remove(),o.css("overflow",a),o.parent().css("overflow",n),r&&t.addStyles&&e("body").css(y+"user-select","text"))},1e3*g- -50)}else o[0].style[v]="",o.css("overflow",a).find(".hoverForMoreContent").remove(),o.parent().css("overflow",n),r&&t.addStyles&&e("body").css(y+"user-select","text");else{var d=((new Date).getTime()-l)/1e3,w=o[0].style[p].match(/transform (.*)s/),g=w&&w[1]&&parseFloat(w[1])<d?parseFloat(w[1]):d;g*=.5,o[0].style[p]=t.snapback?y+"transform "+g+"s linear":"",o.removeClass("scrolling"),s?setTimeout(function(){o[0].style[m]="translateX(0px)"},0):o[0].style[m]="translateX(0px)",t.snapback?setTimeout(function(){o.is(".scrolling")||(o.css("overflow",a),r&&t.addStyles&&e("body").css(y+"user-select","text"))},1e3*g):(o.css("overflow",a),r&&t.addStyles&&e("body").css(y+"user-select","text"))}}),i.refresh=function(){e(i.selector).each(function(s,r){e(r).not(".scrolling").trigger(t.startEvent)})},t.alwaysOn&&i.refresh(),i}}(window.jQuery||$);