AngularJS 指令 DOM 操作不起作用
AngularJS directive DOM manipulation does not work
此代码必须在页面上缓慢滚动。我正在使用 AngularJS 1.4,但我遇到了代码集成问题。
更确切地说,如果我用这段代码制作一个简单的 JS 源文件,它工作得很好,没有问题。但我读到 DOM 操作必须留在指令中。问题是,如果我使用 link 函数(作用域、元素、属性)集成到我的指令中,我的代码将无法正常工作。
我尝试将其放入 angular.run() 函数和 angular.controller() 函数中,但具有相同的副作用。
如何将此代码集成到我的 angular 结构中?
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);
};
这可能是也可能不是您要找的,但可能对您有所帮助:
function scrollToPoint(_index){
var element = angular.element('.nav-scroll').eq(_index).offset();
$timeout(function(){
$("html, body").animate({scrollTop: element.top}, "1000");
},100);
}
我的页面顶部有一个导航调用此函数并传递一个索引。然后我有一个 div,每个 div 的 class 为 'nav-scroll',我想为页面设置动画。我相信可以帮助的主要事情是将 'animate' 代码放在 $timeout 中。
我想通了。
我不得不为点击事件做一个绑定。
$(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;
}
});
此代码必须在页面上缓慢滚动。我正在使用 AngularJS 1.4,但我遇到了代码集成问题。
更确切地说,如果我用这段代码制作一个简单的 JS 源文件,它工作得很好,没有问题。但我读到 DOM 操作必须留在指令中。问题是,如果我使用 link 函数(作用域、元素、属性)集成到我的指令中,我的代码将无法正常工作。
我尝试将其放入 angular.run() 函数和 angular.controller() 函数中,但具有相同的副作用。
如何将此代码集成到我的 angular 结构中?
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);
};
这可能是也可能不是您要找的,但可能对您有所帮助:
function scrollToPoint(_index){
var element = angular.element('.nav-scroll').eq(_index).offset();
$timeout(function(){
$("html, body").animate({scrollTop: element.top}, "1000");
},100);
}
我的页面顶部有一个导航调用此函数并传递一个索引。然后我有一个 div,每个 div 的 class 为 'nav-scroll',我想为页面设置动画。我相信可以帮助的主要事情是将 'animate' 代码放在 $timeout 中。
我想通了。
我不得不为点击事件做一个绑定。
$(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;
}
});