繁体   English   中英

Javascript在重新加载时保留水平滚动条的位置

[英]Javascript retain the horizontal scroll bar position on reload

我的网页上有一个水平的缩略图滚动条,正在使用此处提供的代码滚动到缩略图库中的特定图像。 但是,当我用F5重新加载页面时,图库返回到第一个图像位置。 由于我的缩略图库有大约7500张图像,因此这成为一个问题。

我已经通过向窗口onload添加addEventListener修改了此代码,并将最后单击的缩略图保留为localStorage中的索引值。 在窗口加载时,我使用索引将滚动条推到最后单击的图像位置。 但这不起作用,也没有出现任何错误。 修改后的代码如下:

<!DOCTYPE html>
<html>
<head>
  <style>
  li{display: table-cell; padding:20px;}
  ul{display: table-row; }
  .cont{overflow: auto;}
  li.active{border: 1px solid blue;}
  </style>
</head>
<body>
   <div class="book-list-headbox">
       <div class="page-number-box">
           <label for="" id="total-page" value="" class="mb-0"></label>
           <span class="separator">of</span>
           <input type="text" id="current-page" value="1">
       </div>
   </div>
   <div class="cont">
  <ul class="book-list" id="book-list">
        <li class="book active"><img src="http://via.placeholder.com/300x300/?text=1" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=2" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=3" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=4" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=5" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=6" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=7" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=8" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=9" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=11" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=12" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=13" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=14" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=15" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=16" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=17" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=18" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=19" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=20" alt="Book Page"></li>
  </ul>
</div>

  <div>another content</div>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>
  $(function(){
    $('#current-page').change(function() {
      var i = $(this).val() -1;
      activeBook(i);
      localStorage.setItem('clicki', i);

    });
    $('.book-list').on('click', '.book', function(){
      activeBook($(this).index());
    });

    function activeBook(i){
      $('.book').removeClass('active');
      var active = $('.book').eq(i).addClass('active');
      var left = active.position().left;
      var currScroll= $(".cont").scrollLeft(); 
      var contWidth = $('.cont').width()/2; 
      var activeOuterWidth = active.outerWidth()/2; 
      left= left + currScroll - contWidth + activeOuterWidth;


      $('.cont').animate( { 
        scrollLeft: left
      },'slow');
    }
  });

  window.addEventListener('load', function() {
    $(function(){
    $('#current-page').change(function() { //I tried changing this to onload function
      var clicki = localStorage.getItem('clicki');
      alert(clicki); //This alert also doesn't work.
      var i = clicki;
      activeBook(i);
    });
    $('.book-list').on('click', '.book', function(){
      activeBook($(this).index());
    });

    function activeBook(i){
      $('.book').removeClass('active');
      var active = $('.book').eq(i).addClass('active');
      var left = active.position().left;
      var currScroll= $(".cont").scrollLeft(); 
      var contWidth = $('.cont').width()/2; 
      var activeOuterWidth = active.outerWidth()/2; 
      left= left + currScroll - contWidth + activeOuterWidth;


      $('.cont').animate( { 
        scrollLeft: left
      },'slow');
    }
  });
  })

  </script>
</body>
</html>

您可以这样做:

  1. 在onLoad列表器上设置一个变量,然后将0(第一张照片)或localStorage.getItem('clicki')为> 0(或true)。

  2. 然后使用activeBook(clicki);

试试吧:

<!DOCTYPE html>
<html>
<head>
  <style>
  li{display: table-cell; padding:20px;}
  ul{display: table-row; }
  .cont{overflow: auto;}
  li.active{border: 1px solid blue;}
  </style>
</head>
<body>
   <div class="book-list-headbox">
       <div class="page-number-box">
           <label for="" id="total-page" value="" class="mb-0"></label>
           <span class="separator">of</span>
           <input type="text" id="current-page" value="1">
       </div>
   </div>
   <div class="cont">
  <ul class="book-list" id="book-list">
        <li class="book active"><img src="http://via.placeholder.com/300x300/?text=1" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=2" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=3" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=4" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=5" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=6" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=7" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=8" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=9" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=11" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=12" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=13" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=14" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=15" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=16" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=17" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=18" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=19" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=20" alt="Book Page"></li>
  </ul>
</div>

  <div>another content</div>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>


  $(function(){

    $('#current-page').change(function() {
      setStorage($(this).val() -1)
    });


    $('.book-list').on('click', '.book', function(){
      setStorage($(this).index())
    });

  });

  window.addEventListener('load', function() {
      var clicki = (localStorage.getItem('clicki')) ? (localStorage.getItem('clicki')) : 0 ;
      // alert(clicki);
      activeBook(clicki);
  });


  function setStorage(myNum){
    localStorage.setItem('clicki', myNum);
    activeBook(myNum);
  }

  function activeBook(i){
    $('.book').removeClass('active');
    var active = $('.book').eq(i).addClass('active');
    var left = active.position().left;
    var currScroll= $(".cont").scrollLeft(); 
    var contWidth = $('.cont').width()/2; 
    var activeOuterWidth = active.outerWidth()/2; 
    left= left + currScroll - contWidth + activeOuterWidth;


    $('.cont').animate( { 
      scrollLeft: left
    },'slow');
  }

  </script>
</body>
</html>

PS :当您单击img时,我还创建了一个设置localStorage的函数。 如果对您不重要,请将其删除。

下面的代码将满足您的需求。

<!DOCTYPE html>
<html>
<head>
  <style>
  li{display: table-cell; padding:20px;}
  ul{display: table-row; }
  .cont{overflow: auto;}
  li.active{border: 1px solid blue;}
  </style>
</head>
<body>
   <div class="book-list-headbox">
       <div class="page-number-box">
           <label for="" id="total-page" value="" class="mb-0"></label>
           <span class="separator">of</span>
           <input type="text" id="current-page" value="1">
       </div>
   </div>
   <div class="cont">
  <ul class="book-list" id="book-list">
        <li class="book active"><img src="http://via.placeholder.com/300x300/?text=1" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=2" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=3" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=4" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=5" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=6" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=7" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=8" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=9" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=10" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=11" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=12" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=13" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=14" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=15" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=16" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=17" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=18" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=19" alt="Book Page"></li>
        <li class="book"><img src="http://via.placeholder.com/300x300/?text=20" alt="Book Page"></li>
  </ul>
</div>

  <div>another content</div>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>
  $(function(){
    $('#current-page').change(function() {
      var i = $(this).val() -1;
      activeBook(i);
      localStorage.setItem('clicki', i);

    });
    $('.book-list').on('click', '.book', function(){
      activeBook($(this).index());
    });

    function activeBook(i){
      $('.book').removeClass('active');
      var active = $('.book').eq(i).addClass('active');
      var left = active.position().left;
      var currScroll= $(".cont").scrollLeft(); 
      var contWidth = $('.cont').width()/2; 
      var activeOuterWidth = active.outerWidth()/2; 
      left= left + currScroll - contWidth + activeOuterWidth;


      $('.cont').animate( { 
        scrollLeft: left
      },'slow');
    }
  });

  window.addEventListener('load', function() {
      var clicki = localStorage.getItem('clicki');
      var i = clicki;
      activeBook(i);

    $('.book-list').on('click', '.book', function(){
      activeBook($(this).index());
    });

    function activeBook(i){
        $('#current-page').val(i);
      $('.book').removeClass('active');
      var active = $('.book').eq(i).addClass('active');
      var left = active.position().left;
      var currScroll= $(".cont").scrollLeft(); 
      var contWidth = $('.cont').width()/2; 
      var activeOuterWidth = active.outerWidth()/2; 
      left= left + currScroll - contWidth + activeOuterWidth;


      $('.cont').animate( { 
        scrollLeft: left
      },'slow');
    }
  });

  </script>
</body>
</html>

我只是将您的代码更改为window load 因此,当window load成功时,它将自动触发。 尝试将其另存为一个html文件并在apache server运行,您将获得期望的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM