javascript 移动盒子的自动播放

发布于 2024-08-21 13:29:44 字数 3682 浏览 4 评论 0原文

请访问:http://gati.simptome-remedii.ro/。正如您所看到的,标题中有一个轮播效果,一旦您单击箭头或按左/右键,它就会向前和向后移动。 我需要它自动播放,所以我需要自动滑动效果。 时间间隔应该是5秒(我想我可以稍后设置)。

此轮播效果使用 jquery-1.3.1.min.js 和 slider.js 。

Slider.js

$(function() {

 var totalPanels   = $(".scrollContainer").children().size();

 var regWidth   = $(".panel").css("width");
 var regImgWidth   = $(".panel img").css("width");
 var regTitleSize  = $(".panel h2").css("font-size");
 var regParSize   = $(".panel p").css("font-size");

 var movingDistance     = 300;

 var curWidth   = 350;
 var curImgWidth   = 220;
 var curTitleSize  = "15px";
 var curParSize   = "15px";

 var $panels    = $('#slider .scrollContainer > div');
 var $container   = $('#slider .scrollContainer');

 $panels.css({'float' : 'left','position' : 'relative'});

 $("#slider").data("currentlyMoving", false);

 $container
  .css('width', ($panels[0].offsetWidth * $panels.length) + 100 )
  .css('left', "-350px");

 var scroll = $('#slider .scroll').css('overflow', 'hidden');

 function returnToNormal(element) {
  $(element)
   .animate({ width: regWidth })
   .find("img")
   .animate({ width: regImgWidth })
      .end()
   .find("h2")
   .animate({ fontSize: regTitleSize })
   .end()
   .find("p")
   .animate({ fontSize: regParSize });
 };

 function growBigger(element) {
  $(element)
   .animate({ width: curWidth })
   .find("img")
   .animate({ width: curImgWidth })
      .end()
   .find("h2")
   .animate({ fontSize: curTitleSize })
   .end()
   .find("p")
   .animate({ fontSize: curParSize });
 }

 //direction true = right, false = left
 function change(direction) {

     //if not at the first or last panel
  if((direction && !(curPanel < totalPanels)) || (!direction && (curPanel <= 1))) { return false; } 

        //if not currently moving
        if (($("#slider").data("currentlyMoving") == false)) {

   $("#slider").data("currentlyMoving", true);








   var next         = direction ? curPanel + 1 : curPanel - 1;
   var leftValue    = $(".scrollContainer").css("left");
   var movement  = direction ? parseFloat(leftValue, 10) - movingDistance : parseFloat(leftValue, 10) + movingDistance;

   $(".scrollContainer")
    .stop()
    .animate({
     "left": movement
    }, function() {
     $("#slider").data("currentlyMoving", false);
    });

   returnToNormal("#panel_"+curPanel);
   growBigger("#panel_"+next);

   curPanel = next;

   //remove all previous bound functions
   $("#panel_"+(curPanel+1)).unbind(); 

   //go forward
   $("#panel_"+(curPanel+1)).click(function(){ change(true); });

            //remove all previous bound functions               
   $("#panel_"+(curPanel-1)).unbind();

   //go back
   $("#panel_"+(curPanel-1)).click(function(){ change(false); }); 

   //remove all previous bound functions
   $("#panel_"+curPanel).unbind();
  }
 }




 // Set up "Current" panel and next and prev
 growBigger("#panel_3"); 
 var curPanel = 3;

 $("#panel_"+(curPanel+1)).click(function(){ change(true); });
 $("#panel_"+(curPanel-1)).click(function(){ change(false); });

 //when the left/right arrows are clicked
 $(".right").click(function(){ change(true); }); 
 $(".left").click(function(){ change(false); });

 $(window).keydown(function(event){
   switch (event.keyCode) {
   case 13: //enter
    $(".right").click();
    break;
   case 32: //space
    $(".right").click();
    break;
     case 37: //left arrow
    $(".left").click();
    break;
   case 39: //right arrow
    $(".right").click();
    break;
   }
 });



}


);

我真的很期待收到答案。

谢谢 !

问候, 拉兹万。

Please go to : http://gati.simptome-remedii.ro/ . As you can see there is a carousel effect in the header and it goes forward and backwards once you click on the arrows or press left/right key .
I need it to autoplay so I need an autosliding effect.
Time interval should be 5 seconds ( I guess I can set that up later ) .

This carousel effect uses jquery-1.3.1.min.js and slider.js .

Slider.js

$(function() {

 var totalPanels   = $(".scrollContainer").children().size();

 var regWidth   = $(".panel").css("width");
 var regImgWidth   = $(".panel img").css("width");
 var regTitleSize  = $(".panel h2").css("font-size");
 var regParSize   = $(".panel p").css("font-size");

 var movingDistance     = 300;

 var curWidth   = 350;
 var curImgWidth   = 220;
 var curTitleSize  = "15px";
 var curParSize   = "15px";

 var $panels    = $('#slider .scrollContainer > div');
 var $container   = $('#slider .scrollContainer');

 $panels.css({'float' : 'left','position' : 'relative'});

 $("#slider").data("currentlyMoving", false);

 $container
  .css('width', ($panels[0].offsetWidth * $panels.length) + 100 )
  .css('left', "-350px");

 var scroll = $('#slider .scroll').css('overflow', 'hidden');

 function returnToNormal(element) {
  $(element)
   .animate({ width: regWidth })
   .find("img")
   .animate({ width: regImgWidth })
      .end()
   .find("h2")
   .animate({ fontSize: regTitleSize })
   .end()
   .find("p")
   .animate({ fontSize: regParSize });
 };

 function growBigger(element) {
  $(element)
   .animate({ width: curWidth })
   .find("img")
   .animate({ width: curImgWidth })
      .end()
   .find("h2")
   .animate({ fontSize: curTitleSize })
   .end()
   .find("p")
   .animate({ fontSize: curParSize });
 }

 //direction true = right, false = left
 function change(direction) {

     //if not at the first or last panel
  if((direction && !(curPanel < totalPanels)) || (!direction && (curPanel <= 1))) { return false; } 

        //if not currently moving
        if (($("#slider").data("currentlyMoving") == false)) {

   $("#slider").data("currentlyMoving", true);








   var next         = direction ? curPanel + 1 : curPanel - 1;
   var leftValue    = $(".scrollContainer").css("left");
   var movement  = direction ? parseFloat(leftValue, 10) - movingDistance : parseFloat(leftValue, 10) + movingDistance;

   $(".scrollContainer")
    .stop()
    .animate({
     "left": movement
    }, function() {
     $("#slider").data("currentlyMoving", false);
    });

   returnToNormal("#panel_"+curPanel);
   growBigger("#panel_"+next);

   curPanel = next;

   //remove all previous bound functions
   $("#panel_"+(curPanel+1)).unbind(); 

   //go forward
   $("#panel_"+(curPanel+1)).click(function(){ change(true); });

            //remove all previous bound functions               
   $("#panel_"+(curPanel-1)).unbind();

   //go back
   $("#panel_"+(curPanel-1)).click(function(){ change(false); }); 

   //remove all previous bound functions
   $("#panel_"+curPanel).unbind();
  }
 }




 // Set up "Current" panel and next and prev
 growBigger("#panel_3"); 
 var curPanel = 3;

 $("#panel_"+(curPanel+1)).click(function(){ change(true); });
 $("#panel_"+(curPanel-1)).click(function(){ change(false); });

 //when the left/right arrows are clicked
 $(".right").click(function(){ change(true); }); 
 $(".left").click(function(){ change(false); });

 $(window).keydown(function(event){
   switch (event.keyCode) {
   case 13: //enter
    $(".right").click();
    break;
   case 32: //space
    $(".right").click();
    break;
     case 37: //left arrow
    $(".left").click();
    break;
   case 39: //right arrow
    $(".right").click();
    break;
   }
 });



}


);

I am really looking forward to receiving an answer.

Thank you !

Regards,
Razvan.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧瑾黎汐 2024-08-28 13:29:44

简单的事情就是这样做,

setInterval( function() {$('.right').click();}, 5000 );

这将每 5 秒调用一次单击右侧按钮。

但是,如果您希望它向左和向右移动,则需要添加一些逻辑。

更新

试试这个(把它放在 $(window).keydown 行之前..)

setInterval( function(){
    if (curPanel == totalPanels)
        {
            curPanel = 1;
            $("#slider").data("currentlyMoving", true);
            $(".scrollContainer")
                .stop()
                .animate({
                         "left": movingDistance
                        }, function() {
                                         $("#slider").data("currentlyMoving", false);
                                    });
            returnToNormal("#panel_"+totalPanels);
            growBigger("#panel_1");

        }
    else
        {
            $('.right').click();
        }
} ,5000 );

The simple thing would be to do

setInterval( function() {$('.right').click();}, 5000 );

This will call click the right button every 5 seconds..

But you will need to add some logic if you want it to go both left and right ..

update

Try this (put it right before the $(window).keydown line ..)

setInterval( function(){
    if (curPanel == totalPanels)
        {
            curPanel = 1;
            $("#slider").data("currentlyMoving", true);
            $(".scrollContainer")
                .stop()
                .animate({
                         "left": movingDistance
                        }, function() {
                                         $("#slider").data("currentlyMoving", false);
                                    });
            returnToNormal("#panel_"+totalPanels);
            growBigger("#panel_1");

        }
    else
        {
            $('.right').click();
        }
} ,5000 );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文