主要功能css
固定中部导航栏(滚动到触发)html
滚动后可视内容和高亮标题一致(不少网站并未作到这一点)app
点击导航标题快速定位到内容网站
可自定义当触发标题时的标题样式this
基于JQuery实现code
(function() { $.fn.smint = function(fxd) { var lastScrollTop, menuHeight, myOffset, mySelector, optionLocs, scrollSpeed, settings, smint, smintA, smintH, smintLi; settings = $.extend({ 'scrollSpeed': 500, 'mySelector': 'div' }); $(this).addClass('smint'); optionLocs = new Array; lastScrollTop = 0; menuHeight = $('.smint').height(); smint = $('.smint'); smintLi = $('.smint li'); smintA = $('.smint a'); smintH = smintLi || smintA; myOffset = smint.height(); if (settings.scrollSpeed) { scrollSpeed = settings.scrollSpeed; } if (settings.mySelector) { mySelector = settings.mySelector; } return smintH.each(function(index) { var id, stickyMenu, stickyTop; id = $(this).find('a').attr('href').split('#')[1]; if (!$(this).hasClass('extLink')) { $(this).attr('id', id); } optionLocs.push(Array($(mySelector + '.' + id).position().top - menuHeight, $(mySelector + '.' + id).height() + $(mySelector + '.' + id).position().top, id)); stickyTop = smint.offset().top; stickyMenu = function(direction) { var scrollTop; scrollTop = $(window).scrollTop() + myOffset; if (scrollTop > stickyTop + myOffset) { smint.css({ 'position': 'fixed', 'top': 0 }).addClass('fxd'); } else { smint.css('position', 'relative').removeClass('fxd'); } if (optionLocs[index][0] <= scrollTop && scrollTop <= optionLocs[index][1]) { if (direction === 'up') { $('#' + id).addClass('active'); $('#' + optionLocs[index + 1][2]).removeClass('active'); } else if (index > 0) { $('#' + id).addClass('active'); $('#' + optionLocs[index - 1][2]).removeClass('active'); } else if (direction === void 0) { $('#' + id).addClass('active'); } $.each(optionLocs, function(i) { if (id !== optionLocs[i][2]) { $('#' + optionLocs[i][2]).removeClass('active'); } }); } }; stickyMenu(); $(window).scroll(function() { var direction, st; st = $(this).scrollTop() + myOffset; if ($(window).scrollTop() + $(window).height() === $(document).height()) { smintH.removeClass('active'); $('.smint li:not(\'.extLink\'):last').addClass('active'); } else { smintH.last().removeClass('active'); } if (st > lastScrollTop) { direction = 'down'; } else if (st < lastScrollTop) { direction = 'up'; } lastScrollTop = st; stickyMenu(direction); }); $(this).on('click', function(e) { var myOffset; var goTo, hash; myOffset = smint.height(); e.preventDefault(); hash = $(this).find('a').attr('href').split('#')[1]; goTo = $(mySelector + '.' + hash).offset().top - myOffset; $('html, body').stop().animate({ scrollTop: goTo }, scrollSpeed); if ($(this).hasClass('extLink')) { return false; } }); }); }; $.fn.smint.defaults = { 'scrollSpeed': 500, 'mySelector': 'div' }; })(jQuery);
根据此网站的代码 稍做修改rem
js中声明调用例如 导航的类“navbar-wrapper-middle”get
$('.navbar-wrapper-middle').smint('fxd') //fxd是本身css文件里按本身意愿定义好的类 //即导航栏固定后的样式