課程
/前端開發
/JavaScript
/網頁定位導航特效
怎么覺得老師寫的原生js效果里面的addClass和removeClass并沒有實現呢
2016-09-23
源自:網頁定位導航特效 6-3
正在回答
?function getByClassName(obj,cls){
? ? ? ? ? ? var elements=document.getElementsByTagName("*"); //把父元素下面所有的元素都獲取到
? ? ? ? ? ? var result=[];//返回的結果就是所有class=cla的數組
? ? ? ? ? ? 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(){
? ? ? ? ? ? //監聽滾動條事件
? ? ? ? ? ? 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="";//獲取當前滾動條所在樓層的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循環
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(currentId){
? ? ? ? ? ? ? ? ? ? //給正確的menu下的a元素class賦值。
? ? ? ? ? ? ? ? ? ? for(var j=0;j<menus.length;j++){
? ? ? ? ? ? ? ? ? ? ? ? var _menu=menus[j];//獲取當前的menu
? ? ? ? ? ? ? ? ? ? ? ? var ?_href=_menu.href.split("#");
? ? ? ? ? ? ? ? ? ? ? ? if(_href[_href.length-1]!=currentId){
? ? ? ? ? ? ? ? ? ? ? ? ? ?removeClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ?addClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }
實現了,只是有些地方是有些問題的,我這有代碼,給你發
舉報
本課程講解網頁定位導航特效,仿天貓版地狗購物網,你值得擁有
2 回答JS原生代碼去實現網頁定位導航問題,滾動時導航不變是什么原因?
2 回答原生JS有好像沒有add和remove class?
2 回答為什么原生js滾動切換沒效果,大神來看一看
2 回答為什么又要做js的代碼實現效果呢
4 回答老師 為什么JS原生代碼里面ADDclass要添加類要帶空格,求解答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-09-25
?function getByClassName(obj,cls){
? ? ? ? ? ? var elements=document.getElementsByTagName("*"); //把父元素下面所有的元素都獲取到
? ? ? ? ? ? var result=[];//返回的結果就是所有class=cla的數組
? ? ? ? ? ? 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(){
? ? ? ? ? ? //監聽滾動條事件
? ? ? ? ? ? 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="";//獲取當前滾動條所在樓層的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循環
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(currentId){
? ? ? ? ? ? ? ? ? ? //給正確的menu下的a元素class賦值。
? ? ? ? ? ? ? ? ? ? for(var j=0;j<menus.length;j++){
? ? ? ? ? ? ? ? ? ? ? ? var _menu=menus[j];//獲取當前的menu
? ? ? ? ? ? ? ? ? ? ? ? var ?_href=_menu.href.split("#");
? ? ? ? ? ? ? ? ? ? ? ? if(_href[_href.length-1]!=currentId){
? ? ? ? ? ? ? ? ? ? ? ? ? ?removeClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ?addClass(_menu,"current");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
2016-09-25
實現了,只是有些地方是有些問題的,我這有代碼,給你發