看规范 event.clientX ,scrollTop,offsetLeft 首先第一个 event.clientX,这个是不需要加 px 的,因为这个应该是滚动的时候触发的事件,event 应该是一个 MouseEvent。 查看规范: https://w3c.github.io/uievent... [Constructor(DOMString type, optional MouseEventInit eventInitDict), Exposed=Window] interface MouseEvent : UIEvent { readonly attribute long screenX; readonly attribute long screenY; readonly attribute long clientX; readonly attribute long clientY; readonly attribute boolean ctrlKey; readonly attribute boolean shiftKey; readonly attribute boolean altKey; readonly attribute boolean metaKey; readonly attribute short button; readonly attribute unsigned short buttons; readonly attribute EventTarget? relatedTarget; boolean getModifierState(DOMString keyArg); }; clientX 是一个 long 类型的属性,是个整数。 再看 scrollTop。元素的类型都是 HTMLElement,但是 scrollTop 属性是直接继承自 Element 的,那么查一下 Element 的文档。在 MDN 看吧,还是中文的:Element.scrollTop,中文写的也不太详细。 还得看规范:https://drafts.csswg.org/csso... partial interface Element { DOMRectList getClientRects(); [NewObject] DOMRect getBoundingClientRect(); void scrollIntoView(optional (boolean or ScrollIntoViewOptions) arg); void scroll(optional ScrollToOptions options); void scroll(unrestricted double x, unrestricted double y); void scrollTo(optional ScrollToOptions options); void scrollTo(unrestricted double x, unrestricted double y); void scrollBy(optional ScrollToOptions options); void scrollBy(unrestricted double x, unrestricted double y); attribute unrestricted double scrollTop; <-------- 这里 attribute unrestricted double scrollLeft; readonly attribute long scrollWidth; readonly attribute long scrollHeight; readonly attribute long clientTop; readonly attribute long clientLeft; readonly attribute long clientWidth; readonly attribute long clientHeight; }; scrollTop 的类型是 double。 平时使用 px 最多的地方就是样式表。我们看一下样式的定义。 HTMLElement.style 的类型是一个 CSSStyleDeclaration:https://drafts.csswg.org/csso... [Exposed=Window] interface CSSStyleDeclaration { [CEReactions] attribute CSSOMString cssText; readonly attribute unsigned long length; getter CSSOMString item(unsigned long index); CSSOMString getPropertyValue(CSSOMString property); <----- 这里 CSSOMString getPropertyPriority(CSSOMString property); [CEReactions] void setProperty(CSSOMString property, [TreatNullAs=EmptyString] CSSOMString value, [TreatNullAs=EmptyString] optional CSSOMString priority = ""); [CEReactions] void setPropertyValue(CSSOMString property, [TreatNullAs=EmptyString] CSSOMString value); [CEReactions] void setPropertyPriority(CSSOMString property, [TreatNullAs=EmptyString] CSSOMString priority); [CEReactions] CSSOMString removeProperty(CSSOMString property); readonly attribute CSSRule? parentRule; [CEReactions] attribute [TreatNullAs=EmptyString] CSSOMString cssFloat; }; 是 string(字符串)类型的,所以需要加 px。
看规范
首先第一个
event.clientX
,这个是不需要加 px 的,因为这个应该是滚动的时候触发的事件,event
应该是一个MouseEvent
。查看规范: https://w3c.github.io/uievent...
clientX
是一个long
类型的属性,是个整数。再看
scrollTop
。元素的类型都是HTMLElement
,但是scrollTop
属性是直接继承自Element
的,那么查一下Element
的文档。在 MDN 看吧,还是中文的:Element.scrollTop,中文写的也不太详细。还得看规范:https://drafts.csswg.org/csso...
scrollTop
的类型是double
。平时使用
px
最多的地方就是样式表。我们看一下样式的定义。HTMLElement.style
的类型是一个CSSStyleDeclaration
:https://drafts.csswg.org/csso...是
string
(字符串)类型的,所以需要加px
。