Javascript 响应问题jquery单击滑块

Javascript 响应问题jquery单击滑块,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一张点击幻灯片,可以在图像中来回切换, 但在较小的窗口上,它不会缩放或响应,因为很明显,宽度是用CSS中的像素和函数中的变量绝对设置的 如果我改变这一点,我不知道它将如何工作,虽然它来回滑动的宽度,每个img(607px) 有人有主意吗??还是一个更好的方法 HTML: JS: 当使用响应性设计时,用像素来思考是一种不好的做法 将滑块和每个滑块的宽度设置为100vw,而不是607px。这将使它相当于一个“视口宽度”。在JavaScript中,尝试将width变量修改为字符串100vw。确保包

我有一张点击幻灯片,可以在图像中来回切换, 但在较小的窗口上,它不会缩放或响应,因为很明显,宽度是用CSS中的像素和函数中的变量绝对设置的

如果我改变这一点,我不知道它将如何工作,虽然它来回滑动的宽度,每个img(607px)

有人有主意吗??还是一个更好的方法

HTML:

JS:


当使用响应性设计时,用像素来思考是一种不好的做法

将滑块和每个滑块的宽度设置为100vw,而不是607px。这将使它相当于一个“视口宽度”。在JavaScript中,尝试将
width
变量修改为字符串100vw。确保包括该单元


有关CSS单位的更多信息,请参阅。

为了使您发布的滑块具有响应性,您需要将CSS中的固定尺寸设置为流体宽度

像这样:

.slider {
  position: relative;
  padding: 10px;
}
.slider-frame {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  white-space: nowrap;
} 
.slide {
  width: 100%;
  display: inline-block;
}
.control {
  width: 49%;
}
A编写了一个非常简单的演示滑块,它几乎没有任何功能,只是为了满足本说明的目的:

调整屏幕大小。幻灯片保持屏幕宽度,因为.slide和.slider都设置为屏幕宽度的100%

不要忘记为“下一个”和“上一个”添加自己的功能,这些功能根据滑块中幻灯片的宽度调整每个幻灯片的行进距离

另请参见此处:

这是一个很好的教程,使用了一些高质量的代码。幻灯片也可以使用

希望这有帮助

更新:

因为OP说问题出在js上,所以我找到了一个我不久前写的简单滑块,下面是javascript/jQuery:

$(function(){
  $.fn.someCustomSlider = function (autoplay, velocity){
    var sliderProps = [
      // props n methods, accessible through data-slider-* attributes
      { 
        settings : { 
          invokeBecause : $('[data-widget~="slider"]'),
          autoplay : autoplay,
          speed : velocity,
        },
        bindings : {
          slideRail : $('[data-function~="slide-rail"]'),
          nextButton : $('[data-function~="next"]'),
          prevButton : $('[data-function~="prev"]'),
          playButton : $('[data-function~="play"]'),
          pauseButton : $('[data-function~="pause"]'),
          stopButton : $('[data-function~="stop"]')
          // attach this functionality to the DOM

        },
        methods : {
          slideNext :  function(){          slideRail.animate({left: '-=100%'}, velocity)   },
          slidePrev : function(){ slideRail.animate({left: '+=100%'}, velocity)  },
          slideRestart : function(){ slideRail.animate({left: '0%'}, velocity)  },
          pause :  function(){ window.sliderTimer = setInterval(slideNext, velocity) }
        }
      }
    ]
    $.each(sliderProps, function(){
      //    iterate through all of the slider objects properties
      window.SliderProps = this;
      // set slider props to be accessible to the global scope
    });
  // slider props stored as vars
  var slideRail = SliderProps.bindings.slideRail;
  var play = SliderProps.bindings.playButton;
  var next = SliderProps.bindings.nextButton;
  var prev = SliderProps.bindings.prevButton;
  var pause = SliderProps.bindings.pauseButton;
  var stop = SliderProps.bindings.stopButton;
  var i = 0;

  function slideNext(){
    var slideNext = SliderProps.methods.slideNext();
  }
  function slidePrev(){
    var slidePrev = SliderProps.methods.slidePrev();
  }
  function slideStop(){
    /*slideRail.stop(); */
    window.clearInterval( sliderTimer  )
  }
  function slideRestart(){
    var slidePrev = SliderProps.methods.slideRestart();
    slideRail.stop(); 
    window.clearInterval( sliderTimer  )
  }
  function autoPlay(){
   SliderProps.methods.pause() 
  }
  // elemen -> event delegation -> function()
  next.click(slideNext)
  prev.click(slidePrev)
  stop.click(slideRestart)
  pause.click(slideStop)
  play.click(autoPlay)
  } // close function slider()
  someCustomSlider(true, 1000);
}); 


这是一个我最终扩展的基本版本,但为了简单起见,这应该是我想象中的完美版本。

VW的浏览器支持非常粗略,我不建议在生产站点/应用程序中陷入这种混乱。IE仍然不支持很多标准,请参见这里,4.2、4.3中没有android支持!为了旧的时间,使用好的旧%点怎么样?浏览器支持足够可靠,让我感觉舒适。百分比起作用,但它取决于元素在页面上的位置。如果我正在构建一个模块化系统,我会使用vw。感谢详细的响应和演示@AlphaG33k,我的问题在于我的jQuery函数,我很好地理解CSS的变化,但我不确定如何重写函数,以便在不停止等情况下仍然循环浏览图像,而不使用图像的宽度。我将仔细查看这些链接,但我是否应该以不同的方式编写代码?对jQ来说真的很新。如果你把部分工作的代码放在codepen演示中,社区会更容易帮助你更新新的演示和与你类似的代码。您走的是正确的道路,每个人都从和您一样的代码开始!哇,再次感谢您的演示和更新@AlphaG33k。它运行得非常好。我将尝试实现它。当它到达最终图像时是否循环?非常感谢!!当然,毫无疑问,教学能帮助我们学习。我真的很难过,因为我现在再也不会写这样的代码了!但为了学习的目的,它应该起作用。有时,模块越好,源就越难理解。不,它没有内置重复功能,但这并不难。计算.slide容器内的幻灯片数量,然后当next()触发或单击的数量达到子幻灯片的数量时,您就知道要将CSS重置回左侧:0或您希望的任何位置。如果您喜欢,请不要忘记单击复选标记接受我的答案:)
(function() {

        var width = 607;
        var slideSpeed = 300;
        var currentSlide = 1;

        var $slider = $('#slider');
        var $slideContainer = $slider.find('.slides');
        var $slides = $slideContainer.find('.slide');

        var totalLength = $slides.length;

        $('#button-next').on('click', function(){
            $slideContainer.animate({'margin-left': '-='+width}, slideSpeed, function(){
                currentSlide++;
                if(currentSlide === $slides.length) {
                    currentSlide = 1;
                    $slideContainer.css('margin-left', '0');
                }
            });
        });

        $('#button-prev').on('click', function(){
            if(currentSlide === 1) {
                var pos = -1 * (width * ($slides.length -1));
                    $slideContainer.css('margin-left', pos);
                    $slideContainer.animate({'margin-left': '+='+width}, slideSpeed);
                    currentSlide = $slides.length - 1;
                } else {
                    $slideContainer.animate({'margin-left': '+='+width}, slideSpeed);
                        currentSlide--;
                    }

        });

    });
.slider {
  position: relative;
  padding: 10px;
}
.slider-frame {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  white-space: nowrap;
} 
.slide {
  width: 100%;
  display: inline-block;
}
.control {
  width: 49%;
}
$(function(){
  $.fn.someCustomSlider = function (autoplay, velocity){
    var sliderProps = [
      // props n methods, accessible through data-slider-* attributes
      { 
        settings : { 
          invokeBecause : $('[data-widget~="slider"]'),
          autoplay : autoplay,
          speed : velocity,
        },
        bindings : {
          slideRail : $('[data-function~="slide-rail"]'),
          nextButton : $('[data-function~="next"]'),
          prevButton : $('[data-function~="prev"]'),
          playButton : $('[data-function~="play"]'),
          pauseButton : $('[data-function~="pause"]'),
          stopButton : $('[data-function~="stop"]')
          // attach this functionality to the DOM

        },
        methods : {
          slideNext :  function(){          slideRail.animate({left: '-=100%'}, velocity)   },
          slidePrev : function(){ slideRail.animate({left: '+=100%'}, velocity)  },
          slideRestart : function(){ slideRail.animate({left: '0%'}, velocity)  },
          pause :  function(){ window.sliderTimer = setInterval(slideNext, velocity) }
        }
      }
    ]
    $.each(sliderProps, function(){
      //    iterate through all of the slider objects properties
      window.SliderProps = this;
      // set slider props to be accessible to the global scope
    });
  // slider props stored as vars
  var slideRail = SliderProps.bindings.slideRail;
  var play = SliderProps.bindings.playButton;
  var next = SliderProps.bindings.nextButton;
  var prev = SliderProps.bindings.prevButton;
  var pause = SliderProps.bindings.pauseButton;
  var stop = SliderProps.bindings.stopButton;
  var i = 0;

  function slideNext(){
    var slideNext = SliderProps.methods.slideNext();
  }
  function slidePrev(){
    var slidePrev = SliderProps.methods.slidePrev();
  }
  function slideStop(){
    /*slideRail.stop(); */
    window.clearInterval( sliderTimer  )
  }
  function slideRestart(){
    var slidePrev = SliderProps.methods.slideRestart();
    slideRail.stop(); 
    window.clearInterval( sliderTimer  )
  }
  function autoPlay(){
   SliderProps.methods.pause() 
  }
  // elemen -> event delegation -> function()
  next.click(slideNext)
  prev.click(slidePrev)
  stop.click(slideRestart)
  pause.click(slideStop)
  play.click(autoPlay)
  } // close function slider()
  someCustomSlider(true, 1000);
});