2016-09-15 149 views
0

此代碼必須在頁面上緩慢滾動。我正在使用AngularJS 1.4,並且在代碼集成方面存在問題。AngularJS指令DOM操作不起作用

更精確地說,如果我做一個簡單的JS源文件與此代碼,它的工作原理非常好,沒有任何問題。但我讀到DOM操作必須保持指令。問題是,如果我使用鏈接函數(scope,element,attrs)在我的指令中進行集成,我的代碼將無法正常工作。

我試圖把它放在angular.run()函數和angular.controller()函數,但同樣的副作用。

我該如何將此代碼集成到我的角度結構中?

PS:此代碼必須在另一個處理之前運行。

function changeActiveMenu(targetTag) { 
    var rmClass = $('[name="li-menu"]'); 
    var addClass = $('#' + targetTag); 
    rmClass.removeClass('active'); 
    addClass.addClass('active'); 
} 

function scrollToTag(targetTagId) { 
     var targetTag = $('[id="'+ targetTagId +'"]'); 
     $('html, body').animate({ scrollTop: targetTag.offset().top }, 'slow'); 
} 

$window.onload = function() { 
    $('[name=home-page]').click(function(){ 
     scrollToTag('home'); 
     changeActiveMenu('li-home-page'); 
    }); 
    $('[name=search-sal]').click(function(){ 
     scrollToTag('search-for-salaries'); 
     changeActiveMenu('li-search-sal'); 
    }); 

    $(window).bind("scroll", function() { 
     var sec1 = $("#home").offset().top; 
     var sec2 = $("#search-for-salaries").offset().top - 300; 

     if ($(this).scrollTop() >= sec1){ 
      changeActiveMenu('li-home-page'); 
     } 
     if ($(this).scrollTop() >= sec2){ 
      changeActiveMenu('li-search-sal'); 
     } 
    }); 

    $('.chgCursor').on('mouseover', function() { 
     $(this).addClass('cursor-pointer'); 
    }); 
    $('.chgCursor').on('mouseout', function() { 
     $(this).removeClass('cursor-pointer'); 
    }); 

    console.log(element); 
}; 

回答

0

我想通了。我不得不爲點擊事件做一個綁定。

$(window).bind("click", function(e) { 
    switch(e.target.name) { 
     case "home-page": 
     scrollToTag('home'); 
     changeActiveMenu('li-home-page'); 
      break; 
     case "search-sal": 
     scrollToTag('search-for-salaries'); 
     changeActiveMenu('li-search-sal'); 
      break; 
    } 
}); 
1

這可能是也可能不是你所期待的,但可能會有所幫助:

function scrollToPoint(_index){ 
     var element = angular.element('.nav-scroll').eq(_index).offset(); 

     $timeout(function(){ 
     $("html, body").animate({scrollTop: element.top}, "1000"); 
     },100); 
    } 

我有我的頁面頂部調用此函數,並將索引導航。然後,我爲每個要爲頁面設置動畫的「導航滾動」類都有div。我相信最主要的可能是將'有生命的'代碼置於$超時之內。

+0

感謝您的幫助,但我從我的代碼中發現問題:) – Doro