【问题标题】:Slick slider overlapping images with angular strap光滑的滑块用角带重叠图像
【发布时间】:2017-06-23 19:56:50
【问题描述】:

我在实施角形表带和光滑的旋转木马时遇到问题。我有用于处理标签的角带和用​​于不同标签的每个内容的光滑旋转木马。 问题是,当我更改选项卡时,它会一张一张地显示光滑轮播的图像。 我无法弄清楚问题是什么,有人可以帮助我吗? 照片中的问题:

我的标签控制器:

app.controller('TabsVinoteca', function($scope, $templateCache) {   

 $scope.tabs = [
    {title:'VINOS', 
    page: 'views/vinoteca/vinos.html'},
    {title:'ESPUMANTES',
    page: 'views/vinoteca/espumantes.html'}
    ];
});

我的光滑轮播控制器代码:

app.controller('SlickWinery', function ($scope, $timeout) {
  $scope.slickConfig3Loaded = true;
  $scope.slickCurrentIndex = 1;
  $scope.slickConfig = {
  autoplay: false,
  dots: false,
  nextArrow: '<span class="right slick-next"><i class="glyphicon glyphicon-chevron-right"></i></span>',
  prevArrow: '<span class="left slick-prev"><i class="glyphicon glyphicon-chevron-left"></i></span>',
  centerMode: true,
  centerPadding: '60px',
  slidesToShow: 3,
  responsive: [
  {
    breakpoint: 768,
    settings: {
    arrows: false,
    centerMode: true,
    centerPadding: '40px',
    slidesToShow: 3
    }
   },
  {
    breakpoint: 480,
    settings: {
       arrows: false,
       centerMode: true,
       centerPadding: '40px',
       slidesToShow: 1
    }
  }
   ],
          method: {},
          event: {}
 };


 });

我的html代码:

<div class="container-fluid" id="sliderBrands" ng-controller="SlickWinery">

<h4>VINOS</h4>

 <div class="col-lg-12 hoverGray">
  <slick class="slider" settings="slickConfig" ng-if="slickConfig3Loaded" dots="true">
    <div>   
      <a href="#" tabindex="1"><img ng-src="img/home/bodegas/1.png"/></a>
    </div>
    <div>   
      <a href="#" tabindex="2"><img ng-src="img/home/bodegas/2.png"/></a>
    </div>
    <div>   
      <a href="#" tabindex="3"><img ng-src="img/home/bodegas/3.png"/></a>
    </div>
    <div>   
      <a href="#" tabindex="4"><img ng-src="img/home/bodegas/4.png"/></a>
    </div>
    <div>   
      <a href="#" tabindex="5"><img ng-src="img/home/bodegas/5.png"/></a>
    </div>
   </slick>
  </div>
</div>

【问题讨论】:

  • 你能截取检查器渲染的内容吗?我敢打赌你的轮播在那里,但它在图像加载之前初始化,所以这些容器没有大小。您可以尝试做的另一件事是在光滑的 div 上设置一个硬高度值。
  • 等等,nm,我在尝试在 Bootstrap 选项卡式内容组件中呈现 angular-slick 时遇到了这个问题。您需要切换到 vanilla Slick 并使用 $timeout 强制 init 等到选项卡式内容完成后。 Slick 必须评估它所在的尺寸,然后为其所有部分设置内联高度/宽度。如果它所在的维度在渲染时不断变化,那么它提供的一切都是不稳定的。
  • 如果你也嵌套了 Angular-Slick 滑块,就会发生这种情况。我知道,因为我从来没有见过艺术总监不想再推五个轮播的轮播。
  • 如果有意/有意识地使用,$timeout 非常糟糕:Loupe demo
  • Hi @NominalAeon 在检查器中向我展示了 style="width:0px" 但我尝试在我的主 css、slick.css 和 div 元素的样式属性中进行更改,并尝试使用“!重要”并且不工作!我很绝望!!谢谢回答!!

标签: angularjs slick.js angular-strap


【解决方案1】:
$timeout(function () {
    slickConfig1Loaded = true;
});

ng-if 用于防止 Slick 过早初始化。尝试将true 赋值置于超时状态,以便在选项卡式内容有机会为其容器提供尺寸之后,将其置于调用堆栈的底部。 Slick 需要它们的尺寸。

////

另外,在您的 JS 中您说 slickConfig3Loaded,但在 HTML 中您说 slickConfig1Loaded,这是代码中的错字还是您的 Stack 问题?

【讨论】:

  • 这是堆栈问题@NominalAeon 中的拼写错误,我会试试你告诉我的,非常感谢你的帮助。
  • 你可以做!
  • 对不起@NominalAeon 但我不知道应该在哪里添加时间功能,也不知道如何拦截标签点击,因为我只有两个 div:&lt;div class="container" ng-controller="TabsVinoteca"&gt; &lt;section id="tab"&gt; &lt;div class="bs-docs-example"&gt; &lt;div ng-model="tabs.activeTab" bs-tabs&gt; &lt;div ng-repeat="tab in tabs" data-title="{{ tab.title }}" name="{{ tab.title }}" ng-include='tab.page' bs-pane&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/section&gt; &lt;/div&gt;
  • 你想要 AngularStrap 给你的onShow 事件。如果你使用它,你甚至不需要 $timeout,一旦标签的内容被呈现,它就会发送一个事件广播。挂钩该事件并 a.) 将所有其他 slickConfigLoaded 值设置为 false,然后 b.) 将活动选项卡的 slickConfigLoaded 设置为 true。阅读它here,我敢打赌它非常适合谷歌。该事件可能也会将活动选项卡传递给您,但我不知道,对它传递给您的任何内容做一个console.log,看看得到了什么。
  • 希望你没有气馁。这是一个粗略的问题,因为它的解决方案既是初学者又是高级。不过,我希望你能理解它,这里有很多 Angular 基础知识,一旦你掌握了它,它们就会真正提升你的水平。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2015-11-22
相关资源
最近更新 更多