Commit: 6961058e02a54f5ac27b60389bd604b3d200f1f1 Author: Dejan Marjanovic <[email protected]> Sat, 23 Nov 2013 20:11:42 +0100 Parents: 4b24c64d665bdcdb900ff11d38cf276fdf592986 Branches: master
Link: http://git.php.net/?p=web/php.git;a=commitdiff;h=6961058e02a54f5ac27b60389bd604b3d200f1f1 Log: Fix # scroll (this time for real) Changed paths: M js/common.js Diff: diff --git a/js/common.js b/js/common.js index 9195570..44f6896 100755 --- a/js/common.js +++ b/js/common.js @@ -5,6 +5,44 @@ String.prototype.escapeSelector = function() return this.replace(/(.|#)([ #;&,.+*~\':"!^$\[\]\(\)=>|\/])/g, '$1' + '\\\\$2'); } +String.prototype.toInt = function() +{ + return parseInt(this); +} + +/* {{{ Hash Scroll */ +var jHtmlBody = $('html, body'); +function scroll(target, interval) +{ + if (typeof interval == 'undefined') + interval = 400; + + var hash = target; + target = $('[id="' + target.substring(1) + '"]'); + + var offsetTop = + target.offset().top + - 52 + - target.css('margin-top').toInt() + ; + + jHtmlBody.animate( + {scrollTop: offsetTop}, + interval, + function() + { + if (window.location.hash != hash) + { + window.location.hash = hash; + window.scrollTo(0, offsetTop); + } + } + ); + + return false; +} +/* }}} */ + /** {{{ * jQuery.ScrollTo - Easy element scrolling using jQuery. * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com @@ -17,6 +55,16 @@ String.prototype.escapeSelector = function() */ ;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); /*}}}*/ + +$(window).load(function() +{ + // Fire our scroll, webkit needs onload + if (window.location.hash) + { + scroll(window.location.hash, 0); + } +}); + $(document).ready(function() { // Ugh, cookie handling. @@ -58,6 +106,18 @@ $(document).ready(function() { $this.append("<a class='genanchor' href='#" + $this.attr('id') + "'> ΒΆ</a>"); }); + // Bind events for #[id] + $(window).on('hashchange', function(e) { + e.preventDefault(); + return false; + }); + + $('a[href^=#]').click(function(e) { + e.preventDefault(); + scroll($.attr(this, 'href'), 400); + return false; + }); + var $elephpants = $(".elephpants"); var $elephpantsImages = $elephpants.find('.images'); // load the elephpant images if elephpants div is in the dom. @@ -221,34 +281,6 @@ $(document).ready(function() { limit: 3 }); - // Hash scroll - var jHtmlBody = $('html, body'); - function scroll(target, interval) - { - if ( ! interval) - interval = 400; - - target = $('[id="' + target.substring(1) + '"]'); - - var top = 52; - - jHtmlBody.animate({ - scrollTop: target.offset().top - top - }, interval); - - return true; - } - - if (window.location.hash) - scroll(window.location.hash, 1) - - $('a[href^=#]').click(function(e){ - e.preventDefault(); - var hash = $.attr(this, 'href'); - scroll(hash); - window.location.hash = hash; - }); - }); /** -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
