我正在创建一个自定义轮播,其工作正常。

是)我有的:-
我有一个基本的代码,可以正常工作,轮播也可以在所有屏幕和设备上正常工作。

我想要的是:-
我必须在更改分辨率后重新加载元素。我希望我的插件自动加载当前屏幕分辨率的设置。

我尝试过的:

HTML

    <!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <link href="s.css" rel="stylesheet" />
 <script src="jquery.min.js"></script>
 <meta name="viewport" content="widht=device-width, initial-scale=1" />
 <script src="s.js"></script>
 <script>
 $(window).load(function(){
    $( "#divstretch" ).Lslider(
    {
        SlideCount:5,
        SlideMargin:20,
        SmSlideCount : 3,
        XsSlideCount : 2
    });
    });
 </script>
 </head>
 <body>
 <div class="Demo-Slider">

<ul id="divstretch">
<li><img target="" class="gall-img-big1" src="demo.jpg"></li>
<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

<li><a rel="group1" href="" class="fancybox"><img target="" class="gall-img-big1" src="demo.jpg"></a></li>

</ul>
</div>
</div>
 </body>
 </html>

JS
(function ($) {
  var SlideCount = null;
  var SlideMargin = null;
  var SmSlideCount = null;
  var XsSlideCount = null;

  $.fn.Lslider = function (options) {
    var Lcontainer = this;
    var settings = $.extend({
      // These are the defaults.
      SlideCount: 4,
      SmSlideCount: 3,
      XsSlideCount: 2,
      SlideMargin: 10
    }, options);
    return this.each(function () {
      // We'll get back to this in a moment
      SlideCount = settings.SlideCount;
      SlideMargin = settings.SlideMargin;
      SmSlideCount = settings.SmSlideCount
      XsSlideCount = settings.XsSlideCount;
      SlideCount = Math.round(SlideCount);
      SmSlideCount = Math.round(SmSlideCount);
      XsSlideCount = Math.round(XsSlideCount);
      //paramiters
      var LcontanerID = $(Lcontainer).attr('id')
      var bigImgArray = $(Lcontainer).children();
      //appending required html
      $(Lcontainer).wrap('<div class="Lslider-Main"><div class="Lslider"></div></div>');
      var Pcontainer = $(Lcontainer).parent();
      var parentwidth = $(Pcontainer).width();
      var SlideWidth = null;

       //creating prev and next nav
      var MainContainer = $(Pcontainer).parent();
      $(MainContainer).prepend('<a class="Lslide-left">Prev</a>');
      $(MainContainer).append('<a class="Lslide-right">Next</a>');
      var next = $('.Lslide-right');
      var prev = $('.Lslide-left');

      //previous button
      $(prev).click(function () {
        var stretch = $(Lcontainer).css('left');
        stretch = stretch.replace('px', '');
        stretch = parseInt(stretch);
        var incStretch = stretch + LIwidth + SlideMargin;
        if (stretch < 0) {
          $(Lcontainer).animate({
            left: incStretch
          });
        }
      });
       //next button

      $(next).click(function () {
        var stretch = $(Lcontainer).css('left');
        stretch = stretch.replace('px', '');
        stretch = stretch.replace('-', '');
        stretch = parseInt(stretch);
        var incStretch = stretch + LIwidth + SlideMargin;
        var strechWidth1 = $(Lcontainer).width();
        var strechWidth2 = $(Lcontainer).parent().width();
        var strechWidth = strechWidth1 - strechWidth2 - LIwidth;
        if (stretch <= strechWidth || stretch == '') {
          $(Lcontainer).animate({
            left: - incStretch
          });
        }
      });

      //-------------------------------------//

      var WSize = $(window).width();
      var WHeight = $(window).height();
      if (WSize < 481) {
        SlideWidth = parentwidth / XsSlideCount;
      }
      else if (WSize < 768) {
        SlideWidth = parentwidth / SmSlideCount;
      }
      else {
        SlideWidth = parentwidth / SlideCount;
      }
      $(bigImgArray).width(SlideWidth - SlideMargin);
      $(bigImgArray).css('margin-right', SlideMargin)

      //appending the height and width to containers
      var totleLI = $(bigImgArray).length;
      var LIwidth = $(bigImgArray).width();
      var totalWidth = LIwidth * totleLI;
      var totleHeight = $(bigImgArray).height();

      $(Lcontainer).width(totalWidth);
      $(Lcontainer).height(totleHeight);
      $(Pcontainer).height(totleHeight);

    });
  }
}) (jQuery);

css
.Demo-Slider{
    width:500px;
    margin:0px auto;
    max-width:100%;
    position:relative;
}
@media only screen and (max-width:768px){
.Demo-Slider{
width:100%;
}
}
.Lslider{
    position:relative;
    overflow:hidden;
}
.Lslider ul li{
    width:115px;
    margin-right:10px;
    float:left;
    display:block;
}
.Lslider ul li img{
    max-width:100%;
}
.Lslider ul {
    margin:0px;
    padding:0px;
    left:0px;
    right:0px;
    position: absolute;
}
.Lslider-Main .Lslide-left{
    position: absolute;
    left: -20px;
    top: 0px;
    bottom: 0px;
    margin: auto;
    height: 30px;
}
.Lslider-Main .Lslide-right{
    position: absolute;
    right: -20px;
    top: 0px;
    bottom: 0px;
    margin: auto;
    height: 30px;
}

请查看代码,并给我您的建议或解决方案。

最佳答案

方法1:

您可以将函数绑定(bind)到resize事件。每次调整大小时,它将再次运行您的函数。如果在项目上运行两次代码会导致问题,则可能会导致问题。

$( window ).resize(function() {
  // Remove slider and redo
  $( "#divstretch" ).Lslider({
        SlideCount:5,
        SlideMargin:20,
        SmSlideCount : 3,
        XsSlideCount : 2
    });
});



方法2:

或者,您可以将要重新运行的代码包装在resize函数中。而且它会自动调整。
$( window ).resize(function() {
  ....
  //appending the height and width to containers
  var totleLI = $(bigImgArray).length;
  var LIwidth = $(bigImgArray).width();
  var totalWidth = LIwidth * totleLI;
  var totleHeight = $(bigImgArray).height();

  $(Lcontainer).width(totalWidth);
  $(Lcontainer).height(totleHeight);
  $(Pcontainer).height(totleHeight);
  ....
});

只要确保在加载后触发调整大小代码即可。
$(window).trigger('resize');

关于javascript - 如何在我的自定义插件中绑定(bind)大小调整事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28361407/

10-12 00:00
查看更多