2010-02-15 5 views
2

저는 프로젝트에서 작업 중이며 Ariel Flesler의 jquery.scrollTo.js를 사용하고 있습니다. & jquery.localScroll.js ... 페이지의 여러 div로 스크롤하는 로컬 링크가 있습니다.JQuery로 부정적 위치 지정 scrollTo/localScroll

내가 가진 문제는 페이지 상단에 고정 위치 navbar가 있고 스크롤 한 곳을 (정확하게) 계산하지 않고 스크롤 위치를 계산한다는 것입니다. 아래 scrollTo.js 파일 ... 누군가가 표시 할 수 있습니까? 어디서 어떻게 Y 축 스크롤 위치가 + [Y] px가되는 코드를 삽입 할 것인가?

/** 
* jQuery.ScrollTo - Easy element scrolling using jQuery. 
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com 
* Dual licensed under MIT and GPL. 
* Date: 3/9/2009 
* @author Ariel Flesler 
* @version 1.4.1 
* 
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html 
*/ 
;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery); 

/** 
    * jQuery.LocalScroll - Animated scrolling navigation, using anchors. 
    * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com 
    * Dual licensed under MIT and GPL. 
    * Date: 3/11/2009 
    * @author Ariel Flesler 
    * @version 1.2.7 
    **/ 

;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery); 
+0

그 코드를 난독처럼, 해시 오프셋 뭔가를 사용하여 추가 할 수 있습니다. 리버스 엔지니어링하기가 다소 어렵습니다. 그러나 초기 오프셋을 설정할 수있는 플러그인 옵션이있을 수 있습니다. – Joel

+0

사실,이 코드는 단지 ScrollTo 플러그인의 축소 버전입니다. 그들의 홈페이지는 가득 차있는 버전을 또한 제공하고, 움켜 잡고 편집한다. – BalusC

+0

소형화 ... 난독 화하기에 충분합니다. ;) 어느 쪽이든, 옵션이 내장되어있을 때 소스를 수정하는 이유는 무엇입니까? – Joel

답변