【问题标题】:Override CSS Display property with Flexslider 2使用 Flexslider 2 覆盖 CSS Display 属性
【发布时间】:2014-12-03 13:03:48
【问题描述】:

我愿意隐藏在轮播 div 中 div#carousel_container- 在我的情况下 - this Flexslider 2.2 slider 所有 <li> 的某个类,但第一个

我打算这样做的方式是将它们全部隐藏(显示:无),然后使用 jQuery 显示(显示:块)第一个 <li>,可以使用以下自定义属性 data-gal-order = 1 标识.

我尝试了几种方法:

  1. 在我的样式表中添加div#carousel_container .slides li {display:none;},然后使用jQuery仅将所需元素的display属性更改为block

  2. !important 添加到#1。这成功地隐藏了我的项目,但是我无法使用 jQuery 将一些项目切换回 display:block

  3. 使用 jQuery 首先将display:none 属性设置为所有<li> 元素,然后将display:block 设置为目标元素。

    • 通过.css('display', 'none') 和相反。
    • 或通过.attr('style', 'float: left; display: none; width: 210px;') 和相反。
  4. 在滑块声明之前或之后执行我的自定义脚本 #2 - 即

    //my custom script [before]
    
    //slider declaration
    $('div#carousel_container').flexslider({
                    animation: "slide",
                    controlNav: false,
                    animationLoop: false,
                    slideshow: false,
                    itemWidth: 210,
                    itemMargin: 5,
                    asNavFor: 'div#slider_container'
    });
    
    //OR my custom script [after] (also tried with different load/ready event)
    

但是,我的更改总是被添加到每个 <li> 元素的 style="float: left; display: block; width: 210px;" 覆盖。

我非常对我的 jQuery 脚本的选择器充满信心,例如,我设法按预期为所有 <li> 和/或目标属性添加了一个自定义属性。

但就更改 style="display" 属性而言,我现在迷路了,即使 我发现我的问题可能与 Flexslider 脚本的这一部分有关 (github.com/woothemes/FlexSlider/blob/master/jquery.flexslider.js#L892-924)?

任何想法将不胜感激!


2014 年 10 月 10 日几乎解决

感谢 r4xz 和 Shikhar,这是我设法解决问题的方法:

  • 使用以下类:.hide-me { display: none !important; }
  • 切换指定元素之前滑块声明
  • 在声明轮播的flexslider时添加selector: '.slides > li:not(.hide-me)'参数。
  • 至于我在 cmets 中提出的不相关的附带问题,这对我来说听起来是一个违反直觉的机器人:itemMargin 边距不是为元素添加边距 - 这必须通过 CSS 完成 - ,但要告诉 flexslider 你在 CSS 中添加了多少边距,以便它自动计算适当的滑块宽度。

Working Fiddle here


还有一个问题:见this comment

【问题讨论】:

    标签: jquery css styles html-lists flexslider


    【解决方案1】:

    根据您分享的js-fiddle,问题可以通过以下方法解决-

    首先切换 hide-me 类,然后使用选择器 ".slides > li:not(.hide-me)" 初始化 flexslider。 我们这样做是为了根据您的要求选择合适的图像。现在,flexslider 完成的所有宽度计算都将基于可见的图像,即没有“hide-me”类的图像。这里的 :not(selector) 选择器匹配不是指定元素/选择器的每个元素。

      $(function() {
            /* Toggle hide-me class*/
            var $liCarousel = $('#carousel_container li.img');
            $liCarousel.toggleClass('hide-me');
            $liCarousel.siblings('[data-ingal-order=1]').toggleClass('hide-me');
    
            $('#carousel_container').flexslider({
                animation: "slide",
                controlNav: false,
                animationLoop: false,
                slideshow: false,
                itemWidth: 210,
                itemMargin: 5,
                asNavFor: 'div#slider_container',
                selector: '.slides > li:not(.hide-me)'
            });
    
            $('div#slider_container').flexslider({
                animation: "slide",
                controlNav: false,
                animationLoop: false,
                directionNav:false,
                slideshow: false,
                sync: 'div#carousel_container'
            });
        });
    

    【讨论】:

    • 太棒了,这是我需要的最后一步!按照您的方法 Shikhar,我能够在不修改 FlexSlider (FS) 脚本的情况下做到这一点。实际上,它提供了适合这种情况的"selector" 参数。它现在完美运行! jsfiddle.net/253ekLf8/4 谢谢@r4xz 和 Shikhar!
    • Fiddle 中缺少评论标签关闭;而是检查这个:jsfiddle.net/253ekLf8/5
    • 实际上几乎完美...当您单击轮播的最后一张幻灯片时,它会一直滚动空白内容!您是否知道如何仅在没有幻灯片的情况下防止该操作?
    • 太棒了。我怎么没想到。将编辑我的答案以包含它!
    • 好吧,我剩下的问题比最初在这里公开的问题更具体,我刚刚在 new thread 中寻求了一些帮助,并且还将编辑我的问题在这里,如果我可以在那里解决另一个问题。
    【解决方案2】:

    第二种方式听起来不错,但需要一点改进:

    .hide-me { display: none !important; }
    

    现在您可以切换指定 li 中的 .hide-me 类来显示/隐藏元素。

    【讨论】:

    • .toogleClass('hide-me') 实现了它几乎可以正常工作,谢谢!然而,一个附带问题出现了。如果不需要的项目现在成功消失,它们不会用于轮播宽度计​​算。也就是说,例如,如果在我的轮播中显示了 10 个项目中的 2 个,则轮播的宽度仍然是 calculated by Flexslider 的 10 个。因此,即使是在足够大的屏幕上显示的 2 个元素也可以显示其中的 4 个, Prev/Next 箭头的滚动启用,显示空白区域...
    • jsfiddle.net/253ekLf8/3 有另一个问题(但显然与 .hide-me 类无关) - 我无法使用 Flexslider 的 itemMargin 参数...
    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 2015-02-03
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多