課程
/前端開(kāi)發(fā)
/JavaScript
/網(wǎng)頁(yè)定位導(dǎo)航特效
怎么覺(jué)得老師寫(xiě)的原生js效果里面的addClass和removeClass并沒(méi)有實(shí)現(xiàn)呢
2016-09-23
源自:網(wǎng)頁(yè)定位導(dǎo)航特效 6-3
正在回答
?function getByClassName(obj,cls){
? ? ? ? ? ? var elements=document.getElementsByTagName("*"); //把父元素下面所有的元素都獲取到
? ? ? ? ? ? var result=[];//返回的結(jié)果就是所有class=cla的數(shù)組
? ? ? ? ? ? for(var i=0;i<elements.length;i++){
? ? ? ? ? ? ? ? if(elements[i].className==cls){//如果有多個(gè)類(lèi)的話(huà),那么這個(gè)方法就不行了
? ? ? ? ? ? ? ? ? ? result.push(elements[i]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return result;
? ? ? ? }
? ? ? ? function hasClass(obj,cls){
? ? ? ? ? ? return obj.className.match(new RegExp("(\\s|^)"+cls+"(\\s|$)"));//判斷className里面是否包含我們傳入的cls值
? ? ? ? function removeClass(obj,cls){
? ? ? ? ? ? if(hasClass(obj,cls)){
? ? ? ? ? ? ? ? //remove
? ? ? ? ? ? ? ? var reg=new RegExp("(\\s|^)"+cls+"(\\s|$)");
? ? ? ? ? ? ? ? obj.className=obj.className.replace(reg,"");//把包含這個(gè)class的字符串替換成空
? ? ? ? function addClass(obj,cls){
? ? ? ? ? ? if(!hasClass(obj,cls)){
? ? ? ? ? ? ? ? obj.className+=" "+cls;
? ? ? ? //頁(yè)面載入之后
? ? ? ? window.onload=function(){
? ? ? ? ? ? //監(jiān)聽(tīng)滾動(dòng)條事件
? ? ? ? ? ? window.onscroll=function(){
? ? ? ? ? ? ? ? //獲取滾動(dòng)條top值。
? ? ? ? ? ? ? ? var top=document.documentElement.scrollTop||document.body.scrollTop;
? ? ? ? ? ? ? ? var menus=document.getElementById("menu").getElementsByTagName("a");
? ? ? ? ? ? ? ? var items=getByClassName(document.getElementById("content"),"item");
? ? ? ? ? ? ? ? var currentId="";//獲取當(dāng)前滾動(dòng)條所在樓層的Id
? ? ? ? ? ? ? ? for(var i=0;i<items.length;i++){
? ? ? ? ? ? ? ? ? ? var _item=items[i];
? ? ? ? ? ? ? ? ? ? var _itemTop=_item.offsetTop;
? ? ? ? ? ? ? ? ? ? ?console.log(_item.offsetTop);
? ? ? ? ? ? ? ? ? ? if(top>_itemTop-200){
? ? ? ? ? ? ? ? ? ? ? ? currentId=_item.id;
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ?break;//跳出for循環(huán)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(currentId){
? ? ? ? ? ? ? ? ? ? //給正確的menu下的a元素class賦值。
? ? ? ? ? ? ? ? ? ? for(var j=0;j<menus.length;j++){
? ? ? ? ? ? ? ? ? ? ? ? var _menu=menus[j];//獲取當(dāng)前的menu
? ? ? ? ? ? ? ? ? ? ? ? var ?_href=_menu.href.split("#");
? ? ? ? ? ? ? ? ? ? ? ? if(_href[_href.length-1]!=currentId){
? ? ? ? ? ? ? ? ? ? ? ? ? ?removeClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ?addClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }
實(shí)現(xiàn)了,只是有些地方是有些問(wèn)題的,我這有代碼,給你發(fā)
舉報(bào)
本課程講解網(wǎng)頁(yè)定位導(dǎo)航特效,仿天貓版地狗購(gòu)物網(wǎng),你值得擁有
2 回答JS原生代碼去實(shí)現(xiàn)網(wǎng)頁(yè)定位導(dǎo)航問(wèn)題,滾動(dòng)時(shí)導(dǎo)航不變是什么原因?
2 回答原生JS有好像沒(méi)有add和remove class?
2 回答為什么原生js滾動(dòng)切換沒(méi)效果,大神來(lái)看一看
2 回答為什么又要做js的代碼實(shí)現(xiàn)效果呢
4 回答老師 為什么JS原生代碼里面ADDclass要添加類(lèi)要帶空格,求解答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢(xún)優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-09-25
?function getByClassName(obj,cls){
? ? ? ? ? ? var elements=document.getElementsByTagName("*"); //把父元素下面所有的元素都獲取到
? ? ? ? ? ? var result=[];//返回的結(jié)果就是所有class=cla的數(shù)組
? ? ? ? ? ? for(var i=0;i<elements.length;i++){
? ? ? ? ? ? ? ? if(elements[i].className==cls){//如果有多個(gè)類(lèi)的話(huà),那么這個(gè)方法就不行了
? ? ? ? ? ? ? ? ? ? result.push(elements[i]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return result;
? ? ? ? }
? ? ? ? function hasClass(obj,cls){
? ? ? ? ? ? return obj.className.match(new RegExp("(\\s|^)"+cls+"(\\s|$)"));//判斷className里面是否包含我們傳入的cls值
? ? ? ? }
? ? ? ? function removeClass(obj,cls){
? ? ? ? ? ? if(hasClass(obj,cls)){
? ? ? ? ? ? ? ? //remove
? ? ? ? ? ? ? ? var reg=new RegExp("(\\s|^)"+cls+"(\\s|$)");
? ? ? ? ? ? ? ? obj.className=obj.className.replace(reg,"");//把包含這個(gè)class的字符串替換成空
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? function addClass(obj,cls){
? ? ? ? ? ? if(!hasClass(obj,cls)){
? ? ? ? ? ? ? ? obj.className+=" "+cls;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //頁(yè)面載入之后
? ? ? ? window.onload=function(){
? ? ? ? ? ? //監(jiān)聽(tīng)滾動(dòng)條事件
? ? ? ? ? ? window.onscroll=function(){
? ? ? ? ? ? ? ? //獲取滾動(dòng)條top值。
? ? ? ? ? ? ? ? var top=document.documentElement.scrollTop||document.body.scrollTop;
? ? ? ? ? ? ? ? var menus=document.getElementById("menu").getElementsByTagName("a");
? ? ? ? ? ? ? ? var items=getByClassName(document.getElementById("content"),"item");
? ? ? ? ? ? ? ? var currentId="";//獲取當(dāng)前滾動(dòng)條所在樓層的Id
? ? ? ? ? ? ? ? for(var i=0;i<items.length;i++){
? ? ? ? ? ? ? ? ? ? var _item=items[i];
? ? ? ? ? ? ? ? ? ? var _itemTop=_item.offsetTop;
? ? ? ? ? ? ? ? ? ? ?console.log(_item.offsetTop);
? ? ? ? ? ? ? ? ? ? if(top>_itemTop-200){
? ? ? ? ? ? ? ? ? ? ? ? currentId=_item.id;
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ?break;//跳出for循環(huán)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(currentId){
? ? ? ? ? ? ? ? ? ? //給正確的menu下的a元素class賦值。
? ? ? ? ? ? ? ? ? ? for(var j=0;j<menus.length;j++){
? ? ? ? ? ? ? ? ? ? ? ? var _menu=menus[j];//獲取當(dāng)前的menu
? ? ? ? ? ? ? ? ? ? ? ? var ?_href=_menu.href.split("#");
? ? ? ? ? ? ? ? ? ? ? ? if(_href[_href.length-1]!=currentId){
? ? ? ? ? ? ? ? ? ? ? ? ? ?removeClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ?addClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
2016-09-25
實(shí)現(xiàn)了,只是有些地方是有些問(wèn)題的,我這有代碼,給你發(fā)