/** * 点击导航链接 跳转到指定容器的位置,类似于锚点的功能,增加了动画效果 * 扩展 当窗口宽度小于容器宽度,内容居中显示。 * 动画算法参考 http://www.cnblogs.com/cloudgamer/archive/2009/01/06/tween.html * @param {object} resizewrap 用于容器宽度的方法,不使用此功能可以删除。 * @param {object} nav 用于导航锚点跳转功能,不使用此功能可以删除。 * * @example resizewrap : { * wrap : 'wrap', {string} 外容器的id名 * maxwidth : 600 {number} 窗口小于多少宽度开始裁剪 * } * * @example nav : { * id : 'nav', {string} 导航的id名 * current : 'current', {string} 选中的class名,默认为 current * speed : 25, {number} 动画速度,越小越快 * fixpx : 40 {number} 在导航使用绝对定位且在窗口上方,容器与导航的差,可以不填写,默认为0; * } * * @author m.j * @url http://webjyh.com * @demo http://demo.webjyh.com/navscroll/ * @time 2014/03/07 * @update 2014/03/28 * @ver 1.2.0 */ (function(){ var navscroll = function( params ){ if ( !params ) return false; var _this = this; if ( params.resizewrap ) { _this.resizewrap( params.resizewrap.wrap, params.resizewrap.maxwidth ); _this.bind( params.resizewrap.wrap, params.resizewrap.maxwidth ); } if ( params.nav ){ _this.current = params.nav.current ? params.nav.current : 'current'; _this.fixpx = params.nav.fixpx ? params.nav.fixpx : 0; _this.init( params.nav.id, params.nav.speed ); } }; navscroll.prototype = { addeventcheck : function( obj, evt, fn ){ if ( obj.addeventlistener ){ obj.addeventlistener( evt, fn, false ); } else if ( obj.attachevent ){ obj.attachevent( 'on'+evt, fn ); } }, resizewrap : function( obj, maxwidth ){ var _this = this, screen = document.body.clientwidth, m = ( screen < maxwidth ) ? parseint( ( screen - maxwidth ) / 2 ) + 'px' : 'auto'; document.getelementbyid( obj ).style.marginleft = m; }, init : function( obj, speed ){ var _this = this, li = document.getelementbyid( obj ).getelementsbytagname('li'), re = new regexp( '#+(.*)', 'i' ), offsettop = []; for ( var i=0; i