淘宝固定侧边栏.png

要求

1.原先侧边栏是绝对定位
2.当页面滚动到一定位置,侧边栏改为固定定位
3.页面继续滚动,会让返回顶部显示出来

案例分析

①需要用到页面滚动事件scroll,因为是页面滚动,所以事件源是document
②滚动到某个位置,就是判断页面被卷去的上部值。
③页面被卷去的头部:可以通过window.pageYOffset获得,如果是被卷去的左侧window.pageXOffset
④注意:元素被卷去的头部是element.scrollTop,如果是页面被卷去的头部则是window.pageYOffset

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>仿淘宝固定侧边栏</title>
  8. <style>
  9. .slider-bar {
  10. position: absolute;
  11. left: 50%;
  12. top: 300px;
  13. margin-left: 600px;
  14. width: 45px;
  15. height: 130px;
  16. background-color: pink;
  17. }
  18. .w {
  19. width: 1200px;
  20. margin: 10px auto;
  21. }
  22. .header {
  23. height: 150px;
  24. background-color: purple;
  25. }
  26. .banner {
  27. height: 250px;
  28. background-color: skyblue;
  29. }
  30. .main {
  31. height: 1000px;
  32. background-color: yellowgreen;
  33. }
  34. span {
  35. display: none;
  36. position: absolute;
  37. bottom: 0;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <div class="slider-bar">
  43. <span class="goBack">返回顶部</span>
  44. </div>
  45. <div class="header w">头部区域</div>
  46. <div class="banner w">banner区域</div>
  47. <div class="main w">主体部分</div>
  48. <script>
  49. //获取元素
  50. var sliderBar = document.querySelector('.slider-bar');
  51. var banner = document.querySelector('.banner');
  52. var main = document.querySelector('.main');
  53. var goBack = document.querySelector('.goBack');
  54. var bannerTop = banner.offsetTop;
  55. var sliderBarTop = sliderBar.offsetTop - bannerTop;
  56. var mainTop = main.offsetTop;
  57. //页面滚动事件
  58. document.addEventListener('scroll',function(){
  59. //当页面卷去头部大于等于172时,侧边栏改为固定定位
  60. if(window.pageYOffset >= bannerTop){
  61. sliderBar.style.position = 'fixed';
  62. sliderBar.style.top = sliderBarTop + 'px';
  63. }else{
  64. sliderBar.style.position = 'absolute';
  65. sliderBar.style.top = '300px';
  66. }
  67. //判断何时显示返回顶部
  68. if(window.pageYOffset >= mainTop){
  69. goBack.style.display = 'block';
  70. }else{
  71. goBack.style.display = 'none';
  72. }
  73. });
  74. </script>
  75. </body>
  76. </html>

.