【问题标题】:How to create a product view with slideshow in Meteor js如何在 Meteor js 中使用幻灯片创建产品视图
【发布时间】:2018-01-20 08:13:27
【问题描述】:

我正在尝试创建一个带有大型产品图像的 Meteor js 产品页面,其中显示的图像会根据从一组 5 个幻灯片(或幻灯片)图像中选择的图像而变化。基本上类似于亚马逊产品页面。 我正在使用铁:路由器。 我创建了一个带有幻灯片的产品图片页面。唯一的问题是调整幻灯片图像的大小,使其成为较小的缩略图,并使图像并排显示,并且仅在产品图像下方(而不是跨越整个页面)。

我的幻灯片是基于 slick slideshow on大气 js - https://atmospherejs.com/udondan/slickSlider Syncing 示例。 如果这是根本原因,我的 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
  });
}
#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%;
}
<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>

我最终得到了这个 -

但我想得到这样的东西Amazon product image example

所以目标是显示带有缩略图条的大型产品图片 在产品图像下方(并跨越)显示的替代产品视图 - amz 将它们显示在侧面。缩略图是可选择的,导致所选视图显示为主要产品图像。应该可以通过单击它们(理想情况)和/或单击箭头或点来选择它们,如我的示例所示。

在我的示例中,主要问题是:

  • 产品图片太小,不在边框内
  • 缩略图图像与产品图像重叠,并且它们之间的空间太大
  • 缩略图不可点击

【问题讨论】:

  • 不太清楚,你想得到什么结果。你能澄清一下吗?
  • @Styx 我在帖子末尾添加了更多细节。希望这很清楚,谢谢。

标签: javascript meteor slideshow iron-router atmosphere.js


【解决方案1】:

你可以像下面的例子那样实现它...

产品图片太小,不在边框内 要定位图像,您可以增加容器的尺寸..

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

缩略图与产品图片重叠,并且它们之间的空间太大

实际上重叠的缩略图是因为库创建的 slick-track 元素的高度大于其父元素。所以只需通过设置自定义高度来防止这种情况发生。

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

缩略图不可点击

当您在 slide-for 和 slide-nav 容器中设置不同的项目时,缩略图不可点击,要修复它只需在两者上放置相同的项目

$('.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 -->

【讨论】:

  • 这看起来不错。抱歉现在才看到。我认为您在赏金到期之前发布了它,在这种情况下,并且考虑到它勾选了我将看到的有关延迟申请赏金的所有框。一旦我玩过 CSS,我确实让自己的版本处于更好的状态(例如不再重叠),但不像你的那样“光滑”。谢谢!
  • 我注意到的一件事(我遇到了同样的问题)是,当您从最后一张图像循环到第一张图像时,第一张图像不会显示。虽然当您从第二个循环到第一个时,会显示第一个图像。知道如何解决这个问题吗?
【解决方案2】:

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

您可以使用 Chrome 的开发者控制台进行一些简单的 css 更改,如果有任何 javascript 错误,您应该检查控制台错误。

【讨论】:

  • 当时认为它与 CSS 相关。将看看调试布局。谢谢。
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多