2017-08-11 83 views
3

我想创建一个带有大型产品图像的Meteor js产品页面,其中显示的图像会根据从5张幻灯片(或幻灯片)图像中选择的图像进行更改。基本上类似于亚马逊产品页面。 我正在使用铁路:路由器。 我用幻灯片创建了产品图像页面。唯一的问题是调整幻灯片放映图像的大小,使它们缩小图像并使图像并排显示,并且仅在产品图像下显示(而不是跨越整个页面)。如何使用Meteor js中的幻灯片创建产品视图

我有的幻灯片是基于滑块同步例如从slick slideshow大气js - https://atmospherejs.com/udondan/slick。 我的JS知识只有在这是根本原因的情况下才是基本的。

代码如下。

的HTML代码是

<head> 
    <title>slick-sideshow</title> 

    <link rel="stylesheet" type="text/css" href="slick/slick.css"/> 
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/> 
</head> 

<body> 
    <h1>Welcome to slick slideshow!</h1> 
    <h2>Slider Syncing</h2> 
    <hr/> 
    {{> carousel}} 
</body> 

<template name="carousel"> 
    <div class="container js-container" > 
    <div class="row"> 
     <div class="slider slider-for" id="carousel"> 
      <div class="thumbnail-img"><img src="slick_test1.jpg" width="200px" /></div> 
      <div class="thumbnail-img"><img src="slick_test2.jpg" width="200px" /></div> 
      <div class="thumbnail-img"><img src="slick_test3.jpg" width="200px" /></div> 
      <div class="thumbnail-img"><img src="slick_test4.jpg" width="200px" /></div> 
      <div class="thumbnail-img"><img src="slick_test5.jpg" width="200px" /></div> 
     </div> <!--/slider-for --> 
    </div> <!-- row --> 
    </div> <!--/container --> 

    <div class="container js-container"> 
      <div class="slider slider-nav"> 
       <div class="col-xs-12 col-md-3"> 
         <img class="slider-img" src="slick_test1.jpg" /> 
      </div> 
      <div class="col-xs-12 col-md-3"> 
         <img class="slider-img" src="slick_test2.jpg" /> 
      </div> 
      <div class="col-xs-12 col-md-3"> 
        <img class="slider-img" src="slick_test3.jpg" /> 
      </div> 
      <div class="col-xs-12 col-md-3"> 
        <img class="slider-img" src="slick_test4.jpg" /> 
      </div> 
      <div class="col-xs-12 col-md-3"> 
        <img class="slider-img" src="slick_test5.jpg" /> 
      </div> 
      </div> <!--/slider-nav --> 
    </div> <!--/container --> 
</template> 

JS代码是:

import { Template } from 'meteor/templating'; 
import { ReactiveVar } from 'meteor/reactive-var'; 

import './main.html'; 

Template.carousel.rendered = function() { 
    $('.slider-for').slick({ 
     infinite: false, 
     slidesToShow: 1, 
     slidesToScroll: 1, 
    asNavFor: '.slider-nav', 
     arrows: false, 
     fade: true 
    }); 
    $('.slider-nav').slick({ 
     slidesToShow: 3, 
     slidesToScroll: 1, 
    asNavFor: '.slider-for', 
     dots: true, 
     arrows: true, 
     centerMode: true, 
     focusOnSelect: true 
    }); 
} 

而CSS是在这里:

#carousel { 
    border: 3px solid black; 
    width: 200px; 
    position: relative; 
    top:  100px; 
    left:  100px; 
} 

#carousel div { 
    width: 200px; 
    height: 300px; 
} 

.slick-prev:before, .slick-next:before { 
    color: orange; 
} 


/* dimensions of thumbnail grid */ 
.thumbnail { 
    width: 200px; 
    height: 200px; 
    padding: 1px; 
    border: 3px solid #021a40; 
    background-color: #f0f; 
} 

/* dimensions of image within thumbnail grid */ 
.thumbnail-img { 
    position: relative; 
    float: left; 
    width: 200px; 
    height: 200px; 
    background-position: 50% 50%; 
    background-repeat: no-repeat; 
    background-size: 0% 0%; 
} 

/* dimensions of image within film strip */ 
.slider-img { 
    max-width: 120px; 
    max-height: 120px; 
    position: relative; 
    float: left; 
    width: 120px; 
    height: 120px; 
    background-position: 50% 50%; 
    background-repeat: no-repeat; 
    background-size: 0% 0%; 
} 

我结束了这一点 - my slideshow attempt

但我试图让这样的事情Amazon product image example

所以我们的目标是与缩略图条带的下方显示(和跨越)替代产品享有产品形象 显示大产品图片 - AMZ显示他们旁边。缩略图是可选的,导致所选视图显示为主要产品图像。他们应该可以通过点击(理想)和/或点击箭头或圆点来选择,如我的示例所示。

在我的例子中的主要问题是:

  • 产品图片太小,而不是定位在边境
  • 缩略图图像重叠的产品形象和他们之间的空间过大
  • 缩略图图像不可点击
+1

这不完全清楚,什么重的物品你想获得吗?你能澄清一下吗? – Styx

+0

@Styx我在帖子末尾添加了更多细节。希望这是明确的感谢。 – striker77

回答

1

您可以实现像下面的例子...

产品图片太小,而不是定位在边境 要定位你可以增加您的集装箱的尺寸图像..

#carousel { 
    border: 3px solid black; 
    width: 400px; 
    height: 300px; 

缩略图图像重叠的产品图像和它们之间的空间过大

其中重叠实际上因为由库创建的光滑轨道元件有一个更大的高度比其亲缩略图..所以通过设置自定义高度来防止这种情况。

.slider-for .slick-track{ 
    height:294px; 
    } 

缩略图不能点击

缩略图,当您设置在两个滑动并滑动导航容器不同的项目,解决它只是把同样不能点击两个

$('.slider-for').slick({ 
 
     infinite: false, 
 
     slidesToShow: 1, 
 
     slidesToScroll: 1, 
 
    asNavFor: '.slider-nav', 
 
     arrows: false, 
 
     fade: true 
 
    }); 
 
    $('.slider-nav').slick({ 
 
     slidesToShow: 3, 
 
     slidesToScroll: 1, 
 
    asNavFor: '.slider-for', 
 
     dots: true, 
 
     arrows: true, 
 
     centerMode: true, 
 
     focusOnSelect: true 
 
    });
.container{ 
 
    
 
    
 
} 
 
#carousel { 
 
    border: 3px solid black; 
 
    width: 400px; 
 
    height: 300px; 
 
    position: relative; 
 
    /* top: 100px; */ 
 
    /* left: 100px; */ 
 
    margin: auto; 
 
    margin-bottom: 10px; 
 
} 
 

 

 

 
.slick-prev:before, .slick-next:before { 
 
    color: orange !important; 
 
} 
 

 

 
/* dimensions of thumbnail grid */ 
 
.thumbnail { 
 
    width: 200px; 
 
    height: 200px; 
 
    padding: 1px; 
 
    border: 3px solid #021a40; 
 
    background-color: #f0f; 
 
} 
 

 
/* dimensions of image within thumbnail grid */ 
 
.thumbnail-img { 
 
    position: relative; 
 
    float: left; 
 
    width: 200px; 
 
    height: 200px; 
 
    background-position: 50% 50%; 
 
    background-repeat: no-repeat; 
 
    background-size: 0% 0%; 
 
} 
 

 
/* dimensions of image within film strip */ 
 
.slider-img { 
 
    max-width: 120px; 
 
    max-height: 120px; 
 
    position: relative; 
 
    float: left; 
 
    width: 120px; 
 
    height: 120px; 
 
    background-position: 50% 50%; 
 
    background-repeat: no-repeat; 
 
    background-size: 0% 0%; 
 
} 
 
.slider-nav{ 
 
    width:350px; 
 
    margin:auto; 
 
} 
 
.slider-nav img { 
 
    max-width:100%; 
 
    max-height:70px; 
 
    margin:auto; 
 
} 
 
.slick-initialized .slick-slide { 
 
text-align:center; 
 
    
 
} 
 
.slick-slide img{ 
 
    display: block; 
 
    max-width: 100%; 
 
    max-height: 100%; 
 
    margin: auto; 
 
    } 
 
.slider-for .slick-track{ 
 
height:294px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick.min.css" /> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick-theme.css" /> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick.js"></script> 
 

 
    <div class="container js-container" > 
 
    <div class="row"> 
 
     <div class="slider slider-for" id="carousel"> 
 
      <div > 
 
         <img src="http://lorempixel.com/500/500" /> 
 
      </div> 
 
      <div > 
 
         <img src="http://lorempixel.com/output/fashion-q-c-500-500-10.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/food-q-c-500-500-6.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/sports-q-c-500-500-10.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/animals-q-c-500-500-2.jpg" /> 
 
      </div> 
 
     </div> <!--/slider-for --> 
 
    </div> <!-- row --> 
 
    </div> <!--/container --> 
 

 
    <div class="container js-container"> 
 
     <div class="slider slider-nav"> 
 
      <div > 
 
         <img src="http://lorempixel.com/500/500" /> 
 
      </div> 
 
      <div > 
 
         <img src="http://lorempixel.com/output/fashion-q-c-500-500-10.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/food-q-c-500-500-6.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/sports-q-c-500-500-10.jpg" /> 
 
      </div> 
 
      <div > 
 
        <img src="http://lorempixel.com/output/animals-q-c-500-500-2.jpg" /> 
 
      </div> 
 
      </div> <!--/slider-nav --> 
 
    </div> <!--/container -->

+0

这看起来不错。只是现在就看到它的道歉。我认为你之前在赏金过期之前发布了它,在这种情况下,我会看到所有关于申请赏金的方块。一旦我玩弄CSS,但确实没有像你的那样“光滑”,我确实让自己的版本处于更好的状态(不再与例如重叠)。谢谢! – striker77

+0

我注意到的一件事(和我有同样的问题)是,当你从最后一个图像循环到第一个图像时,第一个图像不显示。虽然当你从第二个回到第一个时,第一个图像会显示。任何想法如何解决这个问题? – striker77

0

我猜你的问题主要是关于CSS。 给图像适当的宽度和高度可能会解决您的问题。

您可以使用Chrome的开发人员控制台进行一些简单的css更改,并且如果出现任何javascript错误,还应该检查控制台错误。

+0

认为这是CSS相关。将看看调试布局。谢谢。 – striker77