`scroll` eventListener在`window.scrollY`之间给出了很大的间隔

时间:2015-09-18 21:50:31

标签: javascript jquery performance scroll delay

我正在处理scroll eventListener以获取滚动顶点,然后执行一些操作。

代码看起来很简单:

window.addEventListener('scroll', function (e) {
  console.log(window.scrollY)
})

虽然,当我快速滚动时,控制台在点之间给出了非常大的间隔

1
60
220
498
787
1157
1844
2161
2458
2741
4158
4277

这导致我的行动几乎没有延迟。

例如,如果我需要这样做:

window.addEventListener('scroll', function (e) {
  if (window.scrollY > elem.getBoundingClientRect().top) {
    elem.style.position = 'fixed';
    elem.style.top = 0;
  }
})

在一小段延迟后将元素固定。

我不确定,也许这对浏览器来说很重要,但有人知道更好的方法吗?

jQuery中的答案也很受欢迎。

谢谢!

2 个答案:

答案 0 :(得分:4)

我遇到过这样的问题。那么,在这种情况下,您需要为静态父类提供一个类并使用该类,您需要通过将其设置为position: fixed来定位固定元素,并计算offsetTop



window.onload = function () {
  window.addEventListener('scroll', function (e) {
    elem = document.querySelector("#parent");
    if (window.scrollY > elem.offsetTop) {
      elem.classList.add('fixed');
    }
    else {
      elem.classList.remove('fixed');
    }
  });
};

h1 {margin: 0; padding: 0;}
.fixed h1 {position: fixed; top: 0; width: 100%; background: #fff;}

<p><b>Microsoft Corporation</b> <span class="nowrap"><span class="IPA nopopups"><a href="/wiki/Help:IPA_for_English" title="Help:IPA for English">/<span style="border-bottom:1px dotted"><span title="/ˈ/ primary stress follows">ˈ</span><span title="'m' in 'my'">m</span><span title="/aɪ/ long 'i' in 'tide'">aɪ</span><span title="'k' in 'kind'">k</span><span title="'r' in 'rye'">r</span><span title="/ɵ/ variable 1st 'o' in 'omission'">ɵ</span><span title="'s' in 'sigh'">s</span><span title="/ɒː/ variable 'o' as in 'coffee'">ɒː</span><span title="'f' in 'find'">f</span><span title="'t' in 'tie'">t</span></span>/</a></span></span> (commonly referred to as <b>Microsoft</b>) is an American <a href="/wiki/Multinational_corporation" title="Multinational corporation">multinational</a> <a href="/wiki/Technology_company" title="Technology company">technology company</a> headquartered in <a href="/wiki/Redmond,_Washington" title="Redmond, Washington">Redmond</a>, <a href="/wiki/Washington_(state)" title="Washington (state)">Washington</a>, that develops, manufactures, licenses, supports and sells <a href="/wiki/Computer_software" title="Computer software" class="mw-redirect">computer software</a>, <a href="/wiki/Consumer_electronics" title="Consumer electronics">consumer electronics</a> and <a href="/wiki/Personal_computers" title="Personal computers" class="mw-redirect">personal computers</a> and services. Its best known software products are the <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a> line of <a href="/wiki/Operating_systems" title="Operating systems" class="mw-redirect">operating systems</a>, <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a> <a href="/wiki/Office_suite" title="Office suite" class="mw-redirect">office suite</a>, and <a href="/wiki/Internet_Explorer" title="Internet Explorer">Internet Explorer</a> and <a href="/wiki/Microsoft_Edge" title="Microsoft Edge">Edge</a> <a href="/wiki/Web_browser" title="Web browser">web browsers</a>. Its flagship hardware products are the <a href="/wiki/Xbox" title="Xbox">Xbox</a> game consoles and the <a href="/wiki/Microsoft_Surface" title="Microsoft Surface">Microsoft Surface</a> tablet lineup. It is the <a href="/wiki/List_of_the_largest_software_companies" title="List of the largest software companies">world's largest software maker</a> measured by revenues. It is also one of the <a href="/wiki/List_of_corporations_by_market_capitalization" title="List of corporations by market capitalization" class="mw-redirect">world's most valuable companies</a>.</p>
<div id="parent">
  <h1>I will be fixed later!</h1>
</div>
<p>Microsoft was founded by <a href="/wiki/Paul_Allen" title="Paul Allen">Paul Allen</a> and <a href="/wiki/Bill_Gates" title="Bill Gates">Bill Gates</a> on April 4, 1975, to develop and sell <a href="/wiki/BASIC" title="BASIC">BASIC</a> <a href="/wiki/Interpreter_(computer_software)" title="Interpreter (computer software)" class="mw-redirect">interpreters</a> for <a href="/wiki/Altair_8800" title="Altair 8800">Altair 8800</a>. It rose to dominate the <a href="/wiki/Personal_computer" title="Personal computer">personal computer</a> <a href="/wiki/Operating_system" title="Operating system">operating system</a> market with <a href="/wiki/MS-DOS" title="MS-DOS">MS-DOS</a> in the mid-1980s, followed by <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>. The company's 1986 <a href="/wiki/Initial_public_offering" title="Initial public offering">initial public offering</a>, and subsequent rise in its share price, created three billionaires and an estimated 12,000 millionaires from Microsoft employees. Since the 1990s, it has increasingly diversified from the operating system market and has <a href="/wiki/List_of_mergers_and_acquisitions_by_Microsoft" title="List of mergers and acquisitions by Microsoft">made a number of corporate acquisitions</a>. In May 2011, Microsoft acquired <a href="/wiki/Skype_Technologies" title="Skype Technologies">Skype Technologies</a> for $8.5 billion in its largest acquisition to date.</p>
<p>As of 2015, Microsoft is market dominant in both the <a href="/wiki/IBM_PC-compatible" title="IBM PC-compatible" class="mw-redirect">IBM PC-compatible</a> operating system (while it lost the majority of the overall operating system market to <a href="/wiki/Android_(operating_system)" title="Android (operating system)">Android</a>) and <a href="/wiki/Office_software_suite" title="Office software suite" class="mw-redirect">office software suite</a> markets (the latter with <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a>). The company also produces a wide range of other software for desktops and servers, and is active in areas including <a href="/wiki/Web_search_engine" title="Web search engine">Internet search</a> (with <a href="/wiki/Bing" title="Bing">Bing</a>), the <a href="/wiki/Video_game_industry" title="Video game industry">video game industry</a> (with the <a href="/wiki/Xbox_(console)" title="Xbox (console)">Xbox</a>, <a href="/wiki/Xbox_360" title="Xbox 360">Xbox 360</a> and <a href="/wiki/Xbox_One" title="Xbox One">Xbox One</a> consoles), the digital services market (through <a href="/wiki/MSN" title="MSN">MSN</a>), and mobile phones (via the operating systems of Nokia's former phones and <a href="/wiki/Windows_Phone" title="Windows Phone">Windows Phone</a> OS). In June 2012, Microsoft entered the personal computer production market for the first time, with the launch of the <a href="/wiki/Microsoft_Surface" title="Microsoft Surface">Microsoft Surface</a>, a line of <a href="/wiki/Tablet_computer" title="Tablet computer">tablet computers</a>.</p>
<p>With the acquisition of Nokia's devices and services division to form <a href="/wiki/Microsoft_Mobile" title="Microsoft Mobile">Microsoft Mobile Oy</a>, the company re-entered the smartphone hardware market, after its previous attempt, <a href="/wiki/Microsoft_Kin" title="Microsoft Kin">Microsoft Kin</a>, which resulted from their acquisition of <a href="/wiki/Danger_(company)" title="Danger (company)">Danger Inc.</a></p>
<p>Microsoft is a portmanteau of the words <b>micro</b>computer and <b>soft</b>ware.</p>
<p><b>Microsoft Corporation</b> <span class="nowrap"><span class="IPA nopopups"><a href="/wiki/Help:IPA_for_English" title="Help:IPA for English">/<span style="border-bottom:1px dotted"><span title="/ˈ/ primary stress follows">ˈ</span><span title="'m' in 'my'">m</span><span title="/aɪ/ long 'i' in 'tide'">aɪ</span><span title="'k' in 'kind'">k</span><span title="'r' in 'rye'">r</span><span title="/ɵ/ variable 1st 'o' in 'omission'">ɵ</span><span title="'s' in 'sigh'">s</span><span title="/ɒː/ variable 'o' as in 'coffee'">ɒː</span><span title="'f' in 'find'">f</span><span title="'t' in 'tie'">t</span></span>/</a></span></span> (commonly referred to as <b>Microsoft</b>) is an American <a href="/wiki/Multinational_corporation" title="Multinational corporation">multinational</a> <a href="/wiki/Technology_company" title="Technology company">technology company</a> headquartered in <a href="/wiki/Redmond,_Washington" title="Redmond, Washington">Redmond</a>, <a href="/wiki/Washington_(state)" title="Washington (state)">Washington</a>, that develops, manufactures, licenses, supports and sells <a href="/wiki/Computer_software" title="Computer software" class="mw-redirect">computer software</a>, <a href="/wiki/Consumer_electronics" title="Consumer electronics">consumer electronics</a> and <a href="/wiki/Personal_computers" title="Personal computers" class="mw-redirect">personal computers</a> and services. Its best known software products are the <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a> line of <a href="/wiki/Operating_systems" title="Operating systems" class="mw-redirect">operating systems</a>, <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a> <a href="/wiki/Office_suite" title="Office suite" class="mw-redirect">office suite</a>, and <a href="/wiki/Internet_Explorer" title="Internet Explorer">Internet Explorer</a> and <a href="/wiki/Microsoft_Edge" title="Microsoft Edge">Edge</a> <a href="/wiki/Web_browser" title="Web browser">web browsers</a>. Its flagship hardware products are the <a href="/wiki/Xbox" title="Xbox">Xbox</a> game consoles and the <a href="/wiki/Microsoft_Surface" title="Microsoft Surface">Microsoft Surface</a> tablet lineup. It is the <a href="/wiki/List_of_the_largest_software_companies" title="List of the largest software companies">world's largest software maker</a> measured by revenues. It is also one of the <a href="/wiki/List_of_corporations_by_market_capitalization" title="List of corporations by market capitalization" class="mw-redirect">world's most valuable companies</a>.</p>
<p>Microsoft was founded by <a href="/wiki/Paul_Allen" title="Paul Allen">Paul Allen</a> and <a href="/wiki/Bill_Gates" title="Bill Gates">Bill Gates</a> on April 4, 1975, to develop and sell <a href="/wiki/BASIC" title="BASIC">BASIC</a> <a href="/wiki/Interpreter_(computer_software)" title="Interpreter (computer software)" class="mw-redirect">interpreters</a> for <a href="/wiki/Altair_8800" title="Altair 8800">Altair 8800</a>. It rose to dominate the <a href="/wiki/Personal_computer" title="Personal computer">personal computer</a> <a href="/wiki/Operating_system" title="Operating system">operating system</a> market with <a href="/wiki/MS-DOS" title="MS-DOS">MS-DOS</a> in the mid-1980s, followed by <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>. The company's 1986 <a href="/wiki/Initial_public_offering" title="Initial public offering">initial public offering</a>, and subsequent rise in its share price, created three billionaires and an estimated 12,000 millionaires from Microsoft employees. Since the 1990s, it has increasingly diversified from the operating system market and has <a href="/wiki/List_of_mergers_and_acquisitions_by_Microsoft" title="List of mergers and acquisitions by Microsoft">made a number of corporate acquisitions</a>. In May 2011, Microsoft acquired <a href="/wiki/Skype_Technologies" title="Skype Technologies">Skype Technologies</a> for $8.5 billion in its largest acquisition to date.</p>
<p>As of 2015, Microsoft is market dominant in both the <a href="/wiki/IBM_PC-compatible" title="IBM PC-compatible" class="mw-redirect">IBM PC-compatible</a> operating system (while it lost the majority of the overall operating system market to <a href="/wiki/Android_(operating_system)" title="Android (operating system)">Android</a>) and <a href="/wiki/Office_software_suite" title="Office software suite" class="mw-redirect">office software suite</a> markets (the latter with <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a>). The company also produces a wide range of other software for desktops and servers, and is active in areas including <a href="/wiki/Web_search_engine" title="Web search engine">Internet search</a> (with <a href="/wiki/Bing" title="Bing">Bing</a>), the <a href="/wiki/Video_game_industry" title="Video game industry">video game industry</a> (with the <a href="/wiki/Xbox_(console)" title="Xbox (console)">Xbox</a>, <a href="/wiki/Xbox_360" title="Xbox 360">Xbox 360</a> and <a href="/wiki/Xbox_One" title="Xbox One">Xbox One</a> consoles), the digital services market (through <a href="/wiki/MSN" title="MSN">MSN</a>), and mobile phones (via the operating systems of Nokia's former phones and <a href="/wiki/Windows_Phone" title="Windows Phone">Windows Phone</a> OS). In June 2012, Microsoft entered the personal computer production market for the first time, with the launch of the <a href="/wiki/Microsoft_Surface" title="Microsoft Surface">Microsoft Surface</a>, a line of <a href="/wiki/Tablet_computer" title="Tablet computer">tablet computers</a>.</p>
<p>With the acquisition of Nokia's devices and services division to form <a href="/wiki/Microsoft_Mobile" title="Microsoft Mobile">Microsoft Mobile Oy</a>, the company re-entered the smartphone hardware market, after its previous attempt, <a href="/wiki/Microsoft_Kin" title="Microsoft Kin">Microsoft Kin</a>, which resulted from their acquisition of <a href="/wiki/Danger_(company)" title="Danger (company)">Danger Inc.</a></p>
<p>Microsoft is a portmanteau of the words <b>micro</b>computer and <b>soft</b>ware.</p>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

谢谢你们的支持。你的回答对我很有帮助。

主要解决方案是使用requestAnimationFrame而不是scroll eventlistener。在此处解释视频:https://www.youtube.com/watch?v=Vp524yo0p44