forked from linab/alphascroll
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathjquery.alphascroll.min.js
1 lines (1 loc) · 2.66 KB
/
jquery.alphascroll.min.js
1
!function(t){t.fn.extend({alphascroll:function(){return this.each(function(){function e(){t(a).each(function(e,o){u+=t.inArray(o,c)>-1?'<li data-letter="'+o+'" class="alphascroll-item" unselectable="on">'+o.toUpperCase()+"</li>":'<li data-letter="'+o+'" unselectable="on">'+o.toUpperCase()+"</li>"});var e=t("body");e.append('<ul id="alphascroll">'+u+"</ul>");var o=e.children("#alphascroll");t(o).bind("touchmove",function(t){if(t.preventDefault(),t.originalEvent){var e=t.originalEvent.touches[0]||t.originalEvent.changedTouches[0];n(e.pageY)}}),t(o).on("click","li.alphascroll-item",function(){var e=t(this).data("letter"),o=t("li."+e),l=o.offset();t("body").scrollTo(l.top)}),t(o).on("click","li:not(.alphascroll-item)",function(){var e=t(this).prevAll(".alphascroll-item").first();if(e.length)var o=e.data("letter"),l=t("li[data-first-letter="+o+"]").last(),n=l.offset().top;else var n=0;t("body").scrollTo(n)}),t(o).bind("mousedown",function(){t("body").bind("mousemove",function(e){t(this).css({"-webkit-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"}),n(e.pageY)}),t("body").bind("mouseup",function(){t("body").unbind("mousemove"),t(this).css({"-webkit-user-select":"text","-moz-user-select":"text","-ms-user-select":"text","user-select":"text"})})}),t(window).height()<=326&&l()}function o(){t("#alphascroll").length>0&&t(".alphascroll").is(":visible")&&(t("#alphascroll").unwrap().remove(),u="",e())}function l(){t("#alphascroll > li").each(function(){t.inArray(t(this).html().toLowerCase(),r)<0&&t(this).html("·").addClass("truncated")})}function n(e){t("#alphascroll li").each(function(){if(!(e<=t(this).offset().top||e>=t(this).offset().top+t(this).outerHeight())){var o=t(this).data("letter"),l=t("."+o),n=l.offset();if(t.inArray(o,c)>-1)return t("html, body").scrollTo(n.top),!1;if("a"==o)return t("html, body").scrollTo(0),!1}})}var i,s=t(this),a=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],r=["a","c","e","g","i","k","m","o","q","s","u","w","y"],c=[],u="";t(s).find('li[data-role="list-divider"]').each(function(){i=t(this).html().toLowerCase(),c.push(i.trim()),t(this).addClass(i)}),t(window).bind("orientationchange",function(){o()}),e()})}})}(jQuery),$.fn.scrollTo=function(t,e,o){"function"==typeof e&&2==arguments.length&&(o=e,e=t);var l=$.extend({scrollTarget:t,offsetTop:50,duration:0,easing:"swing"},e);return this.each(function(){var t=$(this),e="number"==typeof l.scrollTarget?l.scrollTarget:$(l.scrollTarget),n="number"==typeof e?e:e.offset().top+t.scrollTop()-parseInt(l.offsetTop);t.animate({scrollTop:n},parseInt(l.duration),l.easing,function(){"function"==typeof o&&o.call(this)})})};