【问题标题】:Is it possible to jump into slider?是否可以跳入滑块?
【发布时间】:2017-04-08 09:13:41
【问题描述】:

是否可以获得指向特定幻灯片的链接?在我的示例中选择链接后,滑块就不再起作用了。仅显示没有功能的列表项。当您选择链接时,滑块应滚动到相应的幻灯片。这有可能吗?任何帮助将不胜感激。谢谢。

jQuery(document).ready(function($) {

  $('#checkbox').change(function() {
    setInterval(function() {
      moveRight();
    }, 3000);
  });

  var slideCount = $('#slider ul li').length;
  var slideWidth = $('#slider ul li').width();
  var slideHeight = $('#slider ul li').height();
  var sliderUlWidth = slideCount * slideWidth;

  $('#slider').css({
    width: slideWidth,
    height: slideHeight
  });

  $('#slider ul').css({
    width: sliderUlWidth,
    marginLeft: -slideWidth
  });

  $('#slider ul li:last-child').prependTo('#slider ul');

  function moveLeft() {
    $('#slider ul').animate({
      left: +slideWidth
    }, 200, function() {
      $('#slider ul li:last-child').prependTo('#slider ul');
      $('#slider ul').css('left', '');
    });
  };

  function moveRight() {
    $('#slider ul').animate({
      left: -slideWidth
    }, 200, function() {
      $('#slider ul li:first-child').appendTo('#slider ul');
      $('#slider ul').css('left', '');
    });
  };

  $('a.control_prev').click(function() {
    moveLeft();
  });

  $('a.control_next').click(function() {
    moveRight();
  });

});
#slider {
  position: relative;
  overflow: hidden;
  margin: 20px auto 0 auto;
  border-radius: 4px;
}
#slider ul {
  position: relative;
  margin: 0;
  padding: 0;
  height: 200px;
  list-style: none;
}
#slider ul li {
  position: relative;
  display: block;
  float: left;
  margin: 0;
  padding: 0;
  width: 500px;
  height: 300px;
  background: #ccc;
  text-align: center;
  line-height: 300px;
}
a.control_prev,
a.control_next {
  position: absolute;
  top: 40%;
  z-index: 999;
  display: block;
  padding: 4% 3%;
  width: auto;
  height: auto;
  background: #2a2a2a;
  color: #fff;
  text-decoration: none;
  font-weight: 600;
  font-size: 18px;
  opacity: 0.8;
  cursor: pointer;
}
a.control_prev:hover,
a.control_next:hover {
  opacity: 1;
  -webkit-transition: all 0.2s ease;
}
a.control_prev {
  border-radius: 0 2px 2px 0;
}
a.control_next {
  right: 0;
  border-radius: 2px 0 0 2px;
}
.slider_option {
  position: relative;
  margin: 10px auto;
  width: 160px;
  font-size: 18px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#one">SLIDE 1</a>
<br>
<a href="#two">SLIDE 2</a>
<br>
<a href="#three">SLIDE 3</a>
<br>
<a href="#four">SLIDE 4</a>
<br>
<div id="slider">
  <a href="#" class="control_next">
    <p>&gt;</p>
  </a>
  <a href="#" class="control_prev">
    <p>&lt;</p>
  </a>
  <ul>
    <li id="one">SLIDE 1</li>
    <li style="background: #aaa;" id="two">SLIDE 2</li>
    <li id="three">SLIDE 3</li>
    <li style="background: #aaa;" id="four">SLIDE 4</li>
  </ul>
</div>

【问题讨论】:

    标签: javascript jquery html css slider


    【解决方案1】:

    你必须在这里做更多的工作 - 所以这就是我所做的:

    I. 首先我创建了一个 slideRight 函数,它有一个 callback:

    function slideRight(callback) {
        $('#slider ul').animate({
          left: -slideWidth
        }, 200, function() {
          $('#slider ul li:first-child').appendTo('#slider ul');
          $('#slider ul').css('left', '');
          callback();
        });
    }
    

    II. 使用 attribute data-peek 修改了链接到相应幻灯片的链接,如下所示:

    <a href="#" class="peek" data-peek="one">SLIDE 1</a>
    

    III.现在下面的脚本将发挥作用:

    $('a.peek').click(function() {
        slide($('#slider ul'), $(this).attr('data-peek'));
      });
    
      function slide(el, peek) {
        if (el.find('li:nth-child(2)').attr('id') !== peek) {
          slideRight(function() {
            slide(el, peek);
          });
        }
      }
    

    请看下面的演示:

    jQuery(document).ready(function($) {
    
      $('#checkbox').change(function() {
        setInterval(function() {
          moveRight();
        }, 3000);
      });
    
      var slideCount = $('#slider ul li').length;
      var slideWidth = $('#slider ul li').width();
      var slideHeight = $('#slider ul li').height();
      var sliderUlWidth = slideCount * slideWidth;
    
      $('#slider').css({
        width: slideWidth,
        height: slideHeight
      });
    
      $('#slider ul').css({
        width: sliderUlWidth,
        marginLeft: -slideWidth
      });
    
      $('#slider ul li:last-child').prependTo('#slider ul');
    
      function moveLeft() {
        $('#slider ul').animate({
          left: +slideWidth
        }, 200, function() {
          $('#slider ul li:last-child').prependTo('#slider ul');
          $('#slider ul').css('left', '');
        });
      };
    
    
      function moveRight() {
        $('#slider ul').animate({
          left: -slideWidth
        }, 200, function() {
          $('#slider ul li:first-child').appendTo('#slider ul');
          $('#slider ul').css('left', '');
        });
      };
    
      function slideRight(callback) {
        $('#slider ul').animate({
          left: -slideWidth
        }, 200, function() {
          $('#slider ul li:first-child').appendTo('#slider ul');
          $('#slider ul').css('left', '');
          callback();
        });
      }
    
      $('a.control_prev').click(function() {
        moveLeft();
      });
    
      $('a.control_next').click(function() {
        moveRight();
      });
    
      $('a.peek').click(function() {
        slide($('#slider ul'), $(this).attr('data-peek'));
      });
    
      function slide(el, peek) {
        if (el.find('li:nth-child(2)').attr('id') !== peek) {
          slideRight(function() {
            slide(el, peek);
          });
        }
      }
    
    });
    #slider {
      position: relative;
      overflow: hidden;
      margin: 20px auto 0 auto;
      border-radius: 4px;
    }
    #slider ul {
      position: relative;
      margin: 0;
      padding: 0;
      height: 200px;
      list-style: none;
    }
    #slider ul li {
      position: relative;
      display: block;
      float: left;
      margin: 0;
      padding: 0;
      width: 500px;
      height: 300px;
      background: #ccc;
      text-align: center;
      line-height: 300px;
    }
    a.control_prev,
    a.control_next {
      position: absolute;
      top: 40%;
      z-index: 999;
      display: block;
      padding: 4% 3%;
      width: auto;
      height: auto;
      background: #2a2a2a;
      color: #fff;
      text-decoration: none;
      font-weight: 600;
      font-size: 18px;
      opacity: 0.8;
      cursor: pointer;
    }
    a.control_prev:hover,
    a.control_next:hover {
      opacity: 1;
      -webkit-transition: all 0.2s ease;
    }
    a.control_prev {
      border-radius: 0 2px 2px 0;
    }
    a.control_next {
      right: 0;
      border-radius: 2px 0 0 2px;
    }
    .slider_option {
      position: relative;
      margin: 10px auto;
      width: 160px;
      font-size: 18px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a href="#" class="peek" data-peek="one">SLIDE 1</a>
    <br>
    <a href="#" class="peek" data-peek="two">SLIDE 2</a>
    <br>
    <a href="#" class="peek" data-peek="three">SLIDE 3</a>
    <br>
    <a href="#" class="peek" data-peek="four">SLIDE 4</a>
    <br>
    <div id="slider">
      <a href="#" class="control_next">
        <p>&gt;</p>
      </a>
      <a href="#" class="control_prev">
        <p>&lt;</p>
      </a>
      <ul>
        <li id="one">SLIDE 1</li>
        <li style="background: #aaa;" id="two">SLIDE 2</li>
        <li id="three">SLIDE 3</li>
        <li style="background: #aaa;" id="four">SLIDE 4</li>
      </ul>
    </div>

    编辑

    这是一个不使用自定义属性的解决方案 - 改为使用 id

    jQuery(document).ready(function($) {
    
      $('#checkbox').change(function() {
        setInterval(function() {
          moveRight();
        }, 3000);
      });
    
      var slideCount = $('#slider ul li').length;
      var slideWidth = $('#slider ul li').width();
      var slideHeight = $('#slider ul li').height();
      var sliderUlWidth = slideCount * slideWidth;
    
      $('#slider').css({
        width: slideWidth,
        height: slideHeight
      });
    
      $('#slider ul').css({
        width: sliderUlWidth,
        marginLeft: -slideWidth
      });
    
      $('#slider ul li:last-child').prependTo('#slider ul');
    
      function moveLeft() {
        $('#slider ul').animate({
          left: +slideWidth
        }, 200, function() {
          $('#slider ul li:last-child').prependTo('#slider ul');
          $('#slider ul').css('left', '');
        });
      };
    
    
      function moveRight() {
        $('#slider ul').animate({
          left: -slideWidth
        }, 200, function() {
          $('#slider ul li:first-child').appendTo('#slider ul');
          $('#slider ul').css('left', '');
        });
      };
    
      function slideRight(callback) {
        $('#slider ul').animate({
          left: -slideWidth
        }, 200, function() {
          $('#slider ul li:first-child').appendTo('#slider ul');
          $('#slider ul').css('left', '');
          callback();
        });
      }
    
      $('a.control_prev').click(function() {
        moveLeft();
      });
    
      $('a.control_next').click(function() {
        moveRight();
      });
    
      $('a.peek').click(function() {
        slide($('#slider ul'), $(this).attr('id').split('_')[1]);
      });
    
      function slide(el, peek) {
        if (el.find('li:nth-child(2)').attr('id') !== peek) {
          slideRight(function() {
            slide(el, peek);
          });
        }
      }
    
    });
    #slider {
      position: relative;
      overflow: hidden;
      margin: 20px auto 0 auto;
      border-radius: 4px;
    }
    #slider ul {
      position: relative;
      margin: 0;
      padding: 0;
      height: 200px;
      list-style: none;
    }
    #slider ul li {
      position: relative;
      display: block;
      float: left;
      margin: 0;
      padding: 0;
      width: 500px;
      height: 300px;
      background: #ccc;
      text-align: center;
      line-height: 300px;
    }
    a.control_prev,
    a.control_next {
      position: absolute;
      top: 40%;
      z-index: 999;
      display: block;
      padding: 4% 3%;
      width: auto;
      height: auto;
      background: #2a2a2a;
      color: #fff;
      text-decoration: none;
      font-weight: 600;
      font-size: 18px;
      opacity: 0.8;
      cursor: pointer;
    }
    a.control_prev:hover,
    a.control_next:hover {
      opacity: 1;
      -webkit-transition: all 0.2s ease;
    }
    a.control_prev {
      border-radius: 0 2px 2px 0;
    }
    a.control_next {
      right: 0;
      border-radius: 2px 0 0 2px;
    }
    .slider_option {
      position: relative;
      margin: 10px auto;
      width: 160px;
      font-size: 18px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a href="#" class="peek" id="link_one">SLIDE 1</a>
    <br>
    <a href="#" class="peek" id="link_two">SLIDE 2</a>
    <br>
    <a href="#" class="peek" id="link_three">SLIDE 3</a>
    <br>
    <a href="#" class="peek" id="link_four">SLIDE 4</a>
    <br>
    <div id="slider">
      <a href="#" class="control_next">
        <p>&gt;</p>
      </a>
      <a href="#" class="control_prev">
        <p>&lt;</p>
      </a>
      <ul>
        <li id="one">SLIDE 1</li>
        <li style="background: #aaa;" id="two">SLIDE 2</li>
        <li id="three">SLIDE 3</li>
        <li style="background: #aaa;" id="four">SLIDE 4</li>
      </ul>
    </div>

    【讨论】:

    • 感谢您的出色示例。如果没有数据窥视,这也可能吗?
    • 如果你可以使用数字 1,2,3 等代替 one,two,three 等。我想这是可能的
    • 你到底是什么意思?
    • 好吧,我说的是更改标记,这样如果我单击2nd 链接,例如可以窥视带有id 2 的卡片......虽然当前的实现同样好那样... :)
    • 嗯好的,我会试试的。谢谢! :)
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2018-02-19
    • 2016-07-24
    相关资源
    最近更新 更多