【问题标题】:Bxslider - change the direction of slides when direction is RTLBxslider - 当方向为 RTL 时改变幻灯片的方向
【发布时间】:2014-06-06 17:15:48
【问题描述】:

我希望 BxSlider 的插件能够在页面方向更改为 RTL 时工作。

body {
    direction: rtl;
}

在此处查看示例:http://jsfiddle.net/6pL77/

【问题讨论】:

  • 是的,但我只想更改插件上的一个参数以使用插件的一个 javascript 文件切换到 rtl 模式??!!
  • 好吧,如果存在那种参数,那么那个网站上的那些人就不会进行如此激烈的讨论,对吧?
  • 是的,没错。我的意思是它不存在那个参数:S 我已经尝试了很多解决方案但不能完美地工作。希望我能找到一个完美的解决方案:(

标签: jquery css right-to-left bxslider


【解决方案1】:
.bx-wrapper .bx-viewport{ direction: ltr; }

【讨论】:

    【解决方案2】:

    只需添加

    direction:ltr;
    

    到 jquery.bxslider.css 中的 .bx-wrapper

    它会解决你的问题

    【讨论】:

    • 对不起,是的@Zeroic 但是当你看到例子时,你会发现元素在不同的一边。如果必须是 float:right 或其他东西来重置幻灯片上的元素位置。
    【解决方案3】:

    首先在 jquery.bxslider.css 中添加以下内容

    .bx-wrapper{
        direction: rtl;
    }
    

    然后在 jquery.bxslider.js 中添加以下内容

    var defaults = {
    direction: "rtl",
    .
    .
    .
    

    然后找到

    var setPositionProperty = 函数(值、类型、持续时间、参数)

    在 jquery.bxslider.js 中并在 setPositionProperty 函数中添加以下代码

    if (slider.settings.direction == "rtl") {
                    value = value * (-1);
                }
    

    仅此而已..

    【讨论】:

      【解决方案4】:

      我发现 Deepchand 的回答很有帮助。除了这些变化之外,我还发现滑块在触摸屏上的行为异常,在初次触摸时会自发地交换第一张和最后一张幻灯片。要解决此问题,您需要进行以下更改以支持触摸屏上的 RTL。可能有一种方法可以使用更多全局变量来改进一些代码,但这应该会让你朝着正确的方向前进:

      //AFTER var defaults AND BEFORE  $.fn.bxSlider = function(options){
        //If RTL, add direction setting
        var RTL = $('html').attr('dir');
        if(RTL=='rtl'){
          defaults.direction = "rtl";
        }
      
      //=======================================
      //CHANGE IN: var setup (I had to - you may not need to)
      el.css({
        width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 200) + '%' : 'auto',
        position: 'relative'
      });//215 changed to 200 for RTL support - seems to work fine for default LTR as well
      
      
      =======================================
      
      //ADD INTO: var onTouchStart = function(e){ AFTER var orig = e.originalEvent;
      
        //IF Touch RTL
        if (slider.settings.direction == "rtl") {
          
          var theLi = el.find('li');//Get widths
          theLiWidth = theLi.width();
          theLiLength = theLi.not('.bx-clone').length;//get number of items in carousel NOT .bx-clone
      
          //Do calcs to get correct positions for first and last NOT.bx-clone slides
          //If on touch start current is first OR last that are NOT.bx-clone >>>
              // Determine which is current slide >>> which has active class    
          //Pass new calulated position into slider.touch.originalPos.left 
          //Otherwise default (LTR) uses:slider.touch.originalPos = el.position();  
          var activeIndex = el.find('li.active-slide').index();
          if(activeIndex==1){//If slide active is first slide position is -width
            slider.touch.originalPos.left = -(theLiWidth);
          } else if(activeIndex == theLiLength) {//Else, if active slide is last slide position is -width*length
            slider.touch.originalPos.left = -(theLiWidth*theLiLength);
          }
      
        }
        //End touch RTL 
      
      
      //========================================
      
      //CHANGE IN:  var onTouchMove = function(e){
      
      
            if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){
              var value = 0;
              // if horizontal, drag along x axis
              if(slider.settings.mode == 'horizontal'){
                var change = orig.changedTouches[0].pageX - slider.touch.start.x;         
                if (slider.settings.direction == "rtl") {
                  value = slider.touch.originalPos.left - change;
                } else {
                  value = slider.touch.originalPos.left + change;
                }
          
      
      
      //========================================
      
      //CHANGE IN:  var onTouchMove = function(e){
      
            if(slider.settings.mode == 'fade'){
              var distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
              if(distance <= slider.settings.swipeThreshold){
                if (slider.settings.direction == "rtl") {
                  slider.touch.start.x > slider.touch.end.x ? el.goToPrevSlide() : el.goToNextSlide();
                } else {
                  slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();  
                }
                el.stopAuto();
              }
      
      //AND: 
      
                if(Math.abs(distance) >= slider.settings.swipeThreshold){
      
                  if (slider.settings.direction == "rtl") {
                    distance > 0 ?  el.goToNextSlide() : el.goToPrevSlide();
                  } else {
                    distance < 0 ? el.goToNextSlide() : el.goToPrevSlide();
                  }

      【讨论】:

        猜你喜欢
        • 2022-01-22
        • 1970-01-01
        • 2015-07-26
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多