課程
/前端開發(fā)
/JavaScript
/網(wǎng)頁定位導(dǎo)航特效
怎么覺得老師寫的原生js效果里面的addClass和removeClass并沒有實現(xiàn)呢
2016-09-23
源自:網(wǎng)頁定位導(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){//如果有多個類的話,那么這個方法就不行了
? ? ? ? ? ? ? ? ? ? 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,"");//把包含這個class的字符串替換成空
? ? ? ? function addClass(obj,cls){
? ? ? ? ? ? if(!hasClass(obj,cls)){
? ? ? ? ? ? ? ? obj.className+=" "+cls;
? ? ? ? //頁面載入之后
? ? ? ? window.onload=function(){
? ? ? ? ? ? //監(jiān)聽滾動條事件
? ? ? ? ? ? window.onscroll=function(){
? ? ? ? ? ? ? ? //獲取滾動條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)前滾動條所在樓層的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");
? ? ? ? ? ? ? ? ? ? ? ? }
實現(xiàn)了,只是有些地方是有些問題的,我這有代碼,給你發(fā)
舉報
本課程講解網(wǎng)頁定位導(dǎo)航特效,仿天貓版地狗購物網(wǎng),你值得擁有
2 回答JS原生代碼去實現(xiàn)網(wǎng)頁定位導(dǎo)航問題,滾動時導(dǎo)航不變是什么原因?
2 回答原生JS有好像沒有add和remove class?
2 回答為什么原生js滾動切換沒效果,大神來看一看
2 回答為什么又要做js的代碼實現(xiàn)效果呢
4 回答老師 為什么JS原生代碼里面ADDclass要添加類要帶空格,求解答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
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){//如果有多個類的話,那么這個方法就不行了
? ? ? ? ? ? ? ? ? ? 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,"");//把包含這個class的字符串替換成空
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? function addClass(obj,cls){
? ? ? ? ? ? if(!hasClass(obj,cls)){
? ? ? ? ? ? ? ? obj.className+=" "+cls;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //頁面載入之后
? ? ? ? window.onload=function(){
? ? ? ? ? ? //監(jiān)聽滾動條事件
? ? ? ? ? ? window.onscroll=function(){
? ? ? ? ? ? ? ? //獲取滾動條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)前滾動條所在樓層的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
實現(xiàn)了,只是有些地方是有些問題的,我這有代碼,給你發(fā)