我正在使用Angular框架编写单页应用程序。我是新来的。我已经阅读了本指南,以帮助我了解jQuery和Angular之间的根本区别,并且我想尽可能地遵循本指南,而不使用jQuery。
除了jQuery可以解决一些浏览器不兼容问题之外,并提供有用的函数库,例如能够从窗口顶部知道元素的顶部位置,如$('element').offset().top
。没有普通的JavaScript似乎能够接近而不需要重写这个功能,在这一点岂不_是_ 一个更好的主意,用一个jQuery或类似的jQuery库?
具体来说,我要尝试做的是设置一条指令,一旦该指令的顶部滚动到窗口中的某个位置,该指令便会将其固定在适当的位置。看起来是这样的:
directives.scrollfix = function () {
return {
restrict: 'C',
link: function (scope, element, $window) {
var $page = angular.element(window)
var $el = element[0]
var elScrollTopOriginal = $($el).offset().top - 40
$page.bind('scroll', function () {
var windowScrollTop = $page[0].pageYOffset
var elScrollTop = $($el).offset().top
if ( windowScrollTop > elScrollTop - 40) {
elScrollTopOriginal = elScrollTop - 40
element.css('position', 'fixed').css('top', '40px').css('margin-left', '3px');
}
else if ( windowScrollTop < elScrollTopOriginal) {
element.css('position', 'relative').css('top', '0').css('margin-left', '0');
}
})
}
}
}
如果在Angular中有更好的方法来实现这一点,而我仍然没有得到,我将不胜感激。
使用getBoundingClientRect
if $el
是实际的DOM对象:
var top = $el.getBoundingClientRect().top;
JSFiddle
小提琴将显示这将获得与jquery的offset top相同的值
编辑 :如注释中所述,这不考虑滚动内容,以下是jQuery使用的代码
https://github.com/jquery/jquery/blob/master/src/offset.js(5/13/2015)
offset: function( options ) {
//...
var docElem, win, rect, doc,
elem = this[ 0 ];
if ( !elem ) {
return;
}
rect = elem.getBoundingClientRect();
// Make sure element is not hidden (display: none) or disconnected
if ( rect.width || rect.height || elem.getClientRects().length ) {
doc = elem.ownerDocument;
win = getWindow( doc );
docElem = doc.documentElement;
return {
top: rect.top + win.pageYOffset - docElem.clientTop,
left: rect.left + win.pageXOffset - docElem.clientLeft
};
}
}
首先,如果这是一个很长的代码段,我很抱歉,但是,我想做一个模态窗口,它将你在我的用户表单中写的东西写下来,并要求你确认它。我目前正在学习Javascript,我不允许使用innerHTML,我必须动态地编写“名字”等(名字的文本),不允许只在弹出窗口内写它。我已经让大多数东西工作,但“名字”“名字”等显示为“未定义”,或者(正如你可以看到的,我在这种情况下只用名字尝试的事情)显示为“空”。 希望有
问题内容: 我需要使用(在AngularJS中)列出数组中的所有元素。 复杂的是,数组的每个元素都将转换为表的一,两或三行。 我不能创建有效的html(如果用于元素上),因为和之间不允许使用任何类型的重复元素。 例如,如果在上使用ng-repeat ,我将得到: 无效的html。 但是我需要生成的是: 其中第一行由第一个数组元素生成,接下来的三行由第二个数组生成,第五行和第六个由最后一个数组元素生
我有一个正在使用Azure AD身份验证的应用程序。我还需要访问Microsoft Graph API以获取用户数据。我发现的每个向Graph API发出请求的示例都使用了缓存的会话令牌,但由于我使用的是JWT,因此显然不需要存储会话状态。如何使用JWT将我的应用程序作为受众来获得具有适当受众的JWT? 例如,这里有一个从Microsoft Graph AspNetCore示例检索令牌的请求: 它
我正在尝试编写一个python脚本,它解析网站中的一个元素并简单地打印出来。 如果没有的,我想不出如何实现这一点,以便打开一个处理脚本以正确显示网站的浏览器。 这只是一份草稿,将打印内容,包括感兴趣的元素
问题内容: 我已经在Swift 2中使用了这种方法 但是不知道如何在不使用 NSDictionary(contentsOfFile:path)的* 情况下在Swift3中读取plist * 问题答案: Swift的本机方法是使用 ~~~~ 您还可以使用类型强制转换: 但您明确地写道: 不使用NSDictionary(contentsOf … 基本上,不要在Swift中不进行强制转换而使用,您将丢弃
本文向大家介绍jquery用offset()方法获得元素的xy坐标,包括了jquery用offset()方法获得元素的xy坐标的使用技巧和注意事项,需要的朋友参考一下 获取页面某一元素的绝对X,Y坐标,可以用offset()方法:(body属性设置margin :0;padding:0;)