B2B平台整套模板
企业商铺模板
会员中心模板
免费模板
移动端整套模板
移动端商铺模板
移动免费模板
收费插件
免费插件
模板定制
模板仿制
二次开发
免费素材
网页特效
图片制作
编程开发
FTP工具
站长查询工具
关于我们
增值服务
域名注册
企业邮箱
云主机
服务器租用托管
400电话
商标注册
POS机
选择频道搜索
个人主页
我的收藏
我的发布
应用市场
教程中心
我要投稿
登录后即可体验更多功能
资源下载
模板中心
<!DOCTYPE html> <html> <head> <title></title> <style> .section_maodian {height:1500px;width: 100%;} .sideMaodian {width:100%;clear:both;height:32px;overflow:hidden;position:fixed;z-index:9;background:#F8F8F8;border-bottom:solid 1px #e2e2e2;} .sideMaodian ul {float:left;width:100%;} .sideMaodian li {width:25%;float:left;text-align:center;list-style:none;line-height:20px;padding-bottom:10px;margin-bottom:80px;} .sideMaodian li.active {border-bottom:2px solid #4680d1;} .sideMaodian li.active {color:#4680d1}; </style> </head> <body> <div class="section_maodian">商品</div> <div class="section_maodian">详情</div> <div class="section_maodian">联系</div> <div class="section_maodian">推荐</div> <script> const ScrollAnchorModule = function() { let scrollH = document.documentElement.scrollTop||document.body.scrollTop; //scroll更新 const updateNav = (secItems,navItems) => { if(getScrollTop()===0) navon(0,navItems); if(getScrollTop()+getWindowHeight()===getScrollHeight()) navon(secItems.length-1,navItems); else { secItems.forEach((item,index)=>{ if(getScrollTop()>=item.offsetTop){ navon(index,navItems); } }); } } //定位 const toScroll = (index,secItems) => { //计算位置 let scrollY = secItems[index].offsetTop; window.scrollTo(0,scrollY); } //当前锚点 const navon = (index,navItems) => { navItems.forEach((item)=>{ item.classList = ""; }); navItems[index].classList = "active"; } //防抖 const debounce = (fn,wait) => { let timeout = null; return function() { if(timeout!==null) clearTimeout(timeout); timeout = setTimeout(fn,wait); } } //节流 const throttle = (fn,delay) => { let prev = Date.now();//记录上一次触发回调的时间 return function() { let context = this;//保留调用时的this上下文 let args = arugments;//保留调用时传入的参数 let now = Date.now();//记录本次触发回调的时间 if(now-prev >=delay) {//判断上次触发回调的时间和本次触发回调的时间差十分小于时间间隔的阈值 fn.apply(context,args);//大于设定的阈值,则执行回调 prev = Date.now(); } } } //滚动条在Y轴上的滚动距离 const getScrollTop = () => { let scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0; if(document.body){ bodyScrollTop = document.body.scrollTop; } if(document.documentElement){ documentScrollTop = document.documentElement.scrollTop; } scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop; return scrollTop; } //文档的总高度 const getScrollHeight = () =>{ let scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0; if(document.body){ bodyScrollHeight = document.body.scrollHeight; } if(document.documentElement){ documentScrollHeight = document.documentElement.scrollHeight; } scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight; return scrollHeight; } //浏览器视口(窗口)的高度 const getWindowHeight = () =>{ let windowHeight = 0; if(document.compatMode == "CSS1Compat"){ windowHeight = document.documentElement.clientHeight; }else{ windowHeight = document.body.clientHeight; } return windowHeight; } return {//模块返回接口 init: (options) => { let html = `<ul class="sideMaodian">`+options.navMenu.map((item,index)=>{ return `<li class="nav_maodian ">${item}</li>`; }).join('')+`</ul>`; document.body.insertAdjacentHTML('afterbegin',html); let navItems = document.querySelectorAll(options.navClass); let secItems = document.querySelectorAll(options.secClass); let sideMaodian = document.querySelector('.sideMaodian'); if(scrollH===0) navon(0,navItems); //利用事件冒泡机制,在点击的li元素的祖先元素ul标签上注册click事件 sideMaodian.addEventListener('click',event=>{ let item = event.target; let lists = Array.from(sideMaodian.querySelectorAll('li')); let index = lists.indexOf(item); //li 索引 if(event.target.tagName.toLowerCase() === 'li'){ navon(index,navItems); toScroll(index,secItems); } },false); //注册scroll事件 window.addEventListener('scroll',event=>{ event.stopPropagation(); debounce(updateNav(secItems,navItems),1000); },false); } } }(); var options = { navClass:'.nav_maodian', secClass:'.section_maodian', navMenu:['商品','详情','联系','推荐'] } ScrollAnchorModule.init(options); </script> </body> </html> 提示:可以修改后运行.
3年前
5年前
+关注TA
6个月前
9个月前
10个月前
11个月前
64 次浏览2024-04-29 发布
108 次浏览2024-02-05 发布
59 次浏览2024-01-06 发布
71 次浏览2023-12-25 发布
评论
投稿
收藏