Javascript 带进度条的Jquery滑块

Javascript 带进度条的Jquery滑块,javascript,jquery,slider,progress-bar,Javascript,Jquery,Slider,Progress Bar,我有安装程序和jsfiddler: 我需要幻灯片处于自动旋转状态,每个幻灯片的进度条需要填充0到50px的宽度。我已经实现了其余的部分,但仍在与要实现的其余逻辑进行斗争。请注意,我想使用现有的代码。谢谢您的时间。您可以尝试使用这样的方式:我无法发表评论,因为我在stackoverflow上缺乏声誉,所以我的想法是这样的 哦,请记住,当您使用“暂停”滑块和进度条时,您可以在计时上获得细微的差异。对于需要设置动画进度条的每个滑块,防bug的答案是在进度条完成其工作时触发滑块的“下一个”事件 使用j

我有安装程序和jsfiddler:


我需要幻灯片处于自动旋转状态,每个幻灯片的进度条需要填充0到50px的宽度。我已经实现了其余的部分,但仍在与要实现的其余逻辑进行斗争。请注意,我想使用现有的代码。谢谢您的时间。

您可以尝试使用这样的方式:

我无法发表评论,因为我在stackoverflow上缺乏声誉,所以我的想法是这样的

哦,请记住,当您使用“暂停”滑块和进度条时,您可以在计时上获得细微的差异。对于需要设置动画进度条的每个滑块,防bug的答案是在进度条完成其工作时触发滑块的“下一个”事件

使用jQuery Cycle 2,您可以通过以下方式实现:

function main_slider() {

    if ( $("#slider").length ) {

    var $time = 7000;
    var $speed = 500;
    var $slide_width = $("#slider").width()

    $("#slider .cycle").on("cycle-initialized", function(event, opts) {
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");
      var propWidth = $animator.width() / $progress.width() * 100;

      $animator.animate({
        width: "100%"
      }, $time * (100 - propWidth) / 100, function(){
        $("#slider .cycle").cycle("next");
      });

    });    

    $("#slider .cycle").cycle({
      fx: "scrollHorz",
      timeout: 0,
      speed: $speed,
      slides: "li",
      next: "#slider nav .next",
      prev: "#slider nav .prev",
      pauseOnHover: true,
      sync: true,
      delay: 0,
      hideNonActive: false,
      pager: "#slider .pager ul",
      pagerTemplate: "<li><a href='#'></a></li>"

    });


    $("#slider .cycle").on("cycle-before", function(event, opts) {
      $("#slider .progress .animator").stop(true).animate({"width": 0}, 0);
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");

      $animator.animate({
        width: "100%"
      }, $time, function(){
        $("#slider .cycle").cycle("next"); //everything is a trick :)
      });
    })

    $("#slider .cycle").on("cycle-paused", function(event, opts) {
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");

      $animator.stop(true);
    })

    $("#slider .cycle").on("cycle-resumed", function(event, opts) {
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");

      var propWidth = ($animator.width() / $progress.width()) * 100;

      $animator.animate({
        width: "100%"
      }, $time * ((100 - propWidth) / 100), function(){
        $("#slider .cycle").cycle("next");
      });

    });

    $("#slider .cycle").on("cycle-next", function(event, opts){
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");
      $animator.stop(true).width(0);

      $animator.animate({
        width: "100%"
      }, $time, function(){
        $("#slider .cycle").cycle("next");
      });
    }).on("cycle-prev", function(event, opts){
      var $slider = $("#slider");
      var $progress = $("#slider .progress");
      var $animator = $("#slider .progress .animator");
      $animator.stop(true).width(0);

      $animator.animate({
        width: "100%"
      }, $time, function(){
        $("#slider .cycle").cycle("next");
      });
    })

    $("#slider").mouseenter(function(){
      var $prev = $("#slider nav .prev");
      var $next = $("#slider nav .next");
      var $duration = 500

      $prev.stop().animate({
        opacity: 1,
        left: 0
      }, $duration)

      $next.stop().animate({
        opacity: 1,
        right: 0
      }, $duration)

    }).mouseleave(function(){
      var $prev = $("#slider nav .prev");
      var $next = $("#slider nav .next");
      var $duration = 500
      $prev.stop().animate({
        opacity: 0,
        left: "-46px"
      }, $duration)
      $next.stop().animate({
        opacity: 0,
        right: "-46px"
      }, $duration)
    })

    function position_controls() {
      var $prev = $("#slider nav .prev");
      var $next = $("#slider nav .next");
      var $slider = $("#slider li");

      var $sliderH = $slider.height();
      var $controlH = $prev.height();

      var $center = ($sliderH/2) - ($controlH/2);

      $prev.css("top", $center+"px");
      $next.css("top", $center+"px");

    }

    position_controls();

    $(window).resize(function(){
      position_controls();
    })

  }

}

main_slider();
函数主\u滑块(){
如果($(“#滑块”).length){
var$time=7000;
var$speed=500;
var$slide_width=$(“#slider”).width()
$(“#slider.cycle”)。打开(“循环初始化”,函数(事件,选项){
变量$slider=$(“#slider”);
var$progress=$(“#slider.progress”);
var$animator=$(“#slider.progress.animator”);
var propWidth=$animator.width()/$progress.width()*100;
$animator.animate({
宽度:“100%”
},$time*(100-propWidth)/100,函数(){
$(“#slider.cycle”).cycle(“下一步”);
});
});    
$(“#slider.cycle”).cycle({
特效:“卷轴”,
超时:0,
速度:$speed,
幻灯片:“李”,
下一步:#滑块导航。下一步“,
上一页:#滑块导航上一页“,
pauseOnHover:是的,
是的,
延迟:0,
hideNonActive:false,
寻呼机:“#滑块。寻呼机ul”,
页面模板:
  • “ }); $(“#slider.cycle”)。打开(“之前循环”,函数(事件,选项){ $(“#slider.progress.animator”).stop(true)。设置动画({“width”:0},0); 变量$slider=$(“#slider”); var$progress=$(“#slider.progress”); var$animator=$(“#slider.progress.animator”); $animator.animate({ 宽度:“100%” },$time,function(){ $(“#slider.cycle”).cycle(“next”)//一切都是骗局:) }); }) $(“#slider.cycle”)。打开(“循环暂停”,函数(事件,选项){ 变量$slider=$(“#slider”); var$progress=$(“#slider.progress”); var$animator=$(“#slider.progress.animator”); $animator.stop(true); }) $(#slider.cycle”)。打开(“循环恢复”,函数(事件,选项){ 变量$slider=$(“#slider”); var$progress=$(“#slider.progress”); var$animator=$(“#slider.progress.animator”); var propWidth=($animator.width()/$progress.width())*100; $animator.animate({ 宽度:“100%” },$time*((100-propWidth)/100),function(){ $(“#slider.cycle”).cycle(“下一步”); }); }); $(“#slider.cycle”)。打开(“循环下一步”,函数(事件,选项){ 变量$slider=$(“#slider”); var$progress=$(“#slider.progress”); var$animator=$(“#slider.progress.animator”); $animator.stop(true).宽度(0); $animator.animate({ 宽度:“100%” },$time,function(){ $(“#slider.cycle”).cycle(“下一步”); }); }).on(“循环前”,功能(事件,选项){ 变量$slider=$(“#slider”); var$progress=$(“#slider.progress”); var$animator=$(“#slider.progress.animator”); $animator.stop(true).宽度(0); $animator.animate({ 宽度:“100%” },$time,function(){ $(“#slider.cycle”).cycle(“下一步”); }); }) $(“#滑块”).mouseenter(函数(){ var$prev=$(“#slider nav.prev”); var$next=$(“#slider nav.next”); var$duration=500 $prev.stop().animate({ 不透明度:1, 左:0 },$duration) $next.stop().animate({ 不透明度:1, 右:0 },$duration) }).mouseleave(函数(){ var$prev=$(“#slider nav.prev”); var$next=$(“#slider nav.next”); var$duration=500 $prev.stop().animate({ 不透明度:0, 左:“-46px” },$duration) $next.stop().animate({ 不透明度:0, 右:“-46px” },$duration) }) 功能位置控制(){ var$prev=$(“#slider nav.prev”); var$next=$(“#slider nav.next”); 变量$slider=$(“#slider li”); var$sliderH=$slider.height(); var$controlH=$prev.height(); 变量$center=($sliderH/2)-($controlH/2); $prev.css(“顶部“,$center+px”); $next.css(“top”,$center+px”); } 位置控制(); $(窗口)。调整大小(函数(){ 位置控制(); }) } } 主_滑块();
    html结构是:

    <section id="slider">
      <nav><a href="#" class="next"></a><a href="#" class="prev"></a></nav>
      <ul class="cycle">
        <li><a href="#"><img src="images/slide1.jpg" /></a></li>
        <li><a href="#"><img src="images/slide2.jpg" /></a></li>
        <li><a href="#"><img src="images/slide1.jpg" /></a></li>
        <li><a href="#"><img src="images/slide2.jpg" /></a></li>
      </ul>
      <div class="progress"><div class="animator"></div></div>
      <div class="pager"><ul></ul></div>
    </section>
    
    
    

      jQuery部分现在有点混乱,因为这是我刚刚完成的一个开发版本,因此它没有经过优化,有太多的变量声明,但它做了它需要做的事情,并且没有计时问题。

      并且您可能需要从单击手柄调用
      run()
      函数hank you@Ulan,这太棒了,它就快到了,但我想在每次幻灯片更改时为进度条
    • 元素的特定索引设置动画。不是完整的进度条。如果这样做了,我很高兴。谢谢你的时间。好的,然后看看这个,希望这就是你打算做的:谢谢乌兰,这是我所需要的全部,剩下的我将处理它,当鼠标移到项目上时暂停它。单击项目时,它应该与每个索引元素协调。