com web/php: Fix # scroll (this time for real): js/common.js
| From: | Dejan Marjanovic | Date: | Sat, 23 Nov 2013 19:53:10 +0000 |
| Subject: | com web/php: Fix # scroll (this time for real): js/common.js | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-17233@lists.php.net to get a copy of this message | ||
Commit: 6961058e02a54f5ac27b60389bd604b3d200f1f1
Author: Dejan Marjanovic <dejan.marjanovic@gmail.com> 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;
- });
-
});
/**