私のJS画像スライダー(Owl-Carousel)では、画像の寸法が異なります:
カルーセル内で画像の高さが異なることがわかります。カルーセルの応答性を維持しながら一定にする方法は?常にスライダースペースを埋める画像が必要なので、CSSを使用して何らかの方法でトリミングする必要があります。望ましい結果は次のようになります。
Cssで指定できます。
例、
.owl-carousel .owl-item{
height:285px;
width:100%;
}
[〜#〜] edit [〜#〜]次のソリューションでは、プラグインのコールバックイベントを使用して、最小の画像の高さに応じてビューポート/ラッパーの高さを変更します。 。
js
$(document).ready(function () {
$("#owl-example").owlCarousel({
afterUpdate: function () {
updateSize();
},
afterInit:function(){
updateSize();
}
});
function updateSize(){
var minHeight=parseInt($('.owl-item').eq(0).css('height'));
$('.owl-item').each(function () {
var thisHeight = parseInt($(this).css('height'));
minHeight=(minHeight<=thisHeight?minHeight:thisHeight);
});
$('.owl-wrapper-outer').css('height',minHeight+'px');
}
});
css
.owl-carousel .owl-item img {
height:auto;
width:100%;
display: block;
}
.owl-carousel .item {
margin:0px;
}
EDIT2
最新のコメントに関して、大きな画像の下部を表示するには、画像を反復処理し、これらの画像の非表示部分に等しい負の上部マージンを追加する方法があります。
function updateSize(){
var minHeight=parseInt($('.owl-item').eq(0).css('height'));
$('.owl-item').each(function () {
var thisHeight = parseInt($(this).css('height'));
minHeight=(minHeight<=thisHeight?minHeight:thisHeight);
});
$('.owl-wrapper-outer').css('height',minHeight+'px');
/*show the bottom part of the cropped images*/
$('.owl-carousel .owl-item img').each(function(){
var thisHeight = parseInt($(this).css('height'));
if(thisHeight>minHeight){
$(this).css('margin-top',-1*(thisHeight-minHeight)+'px');
}
});
}
http://jsfiddle.net/AwBLL/108/ でランダムな高さのスライド
HTML:
<h2>Vertical align</h2>
<div class="owl-carousel bg-contain">
<img src="http://lorempixel.com/234/100/technics/1/" />
<img src="http://lorempixel.com/234/400/technics/2/" />
<img src="http://lorempixel.com/234/200/technics/9/" />
<img src="http://lorempixel.com/234/150/technics/10/" />
</div>
<h2>Full Zoom small images</h2>
<div class="owl-carousel bg-cover">
<img src="http://lorempixel.com/234/100/technics/1/" />
<img src="http://lorempixel.com/234/400/technics/2/" />
<img src="http://lorempixel.com/234/200/technics/9/" />
<img src="http://lorempixel.com/234/150/technics/10/" />
</div>
CSS:
.owl-wrapper-outer {
border: 1px solid red;
font: 0/0 a;
line-height: 0;
}
.owl-carousel .owl-item {
background-position: 50% 50%;
background-repeat: no-repeat;
}
.bg-contain .owl-item { background-size: contain }
.bg-cover .owl-item { background-size: cover }
.owl-carousel .owl-item img {
height: auto;
width: 100%;
visibility: hidden;
}
JS:
$(".owl-carousel").each(function () {
var $this = $(this);
$this.owlCarousel({
afterUpdate: function () {
updateSize($this);
},
afterInit: function () {
updateSize($this);
}
});
});
function updateSize($carousel) {
var maxHeight = 0;
$('.owl-item', $carousel).each(function () {
var $this = $(this);
var $image = $this.find('img');
//Max height
var prevHeight = $this.height();
var thisHeight = $this.height('auto').height();
$this.height(prevHeight);
maxHeight = (maxHeight > thisHeight ? maxHeight : thisHeight);
//Set image as background
var imageSource = $image.attr('src');
$this.css('backgroundImage', 'url(' + imageSource + ')');
});
//Set equal height
$('.owl-item', $carousel).height(maxHeight);
}
私の画像は動的に読み込まれます。つまり、画像名は時々変更される可能性があります。背景画像として保持し、適切な画像名をcssファイルに渡すにはどうすればよいですか?
Flexboxを使用して同じ高さを実現できます。これを試して:
.owl-stage
display flex
.owl-item
flex 0 0 auto
caroualの背景画像でdivを使用している場合background-size
プロパティを使用して、背景のサイズを制御してみることができます。
#header {
-webkit-background-size:100%;
-moz-background-size:100%;
background-size:100%;
background-position: 0% 0%;
background: url(http://i47.tinypic.com/2090r3c.jpg) no-repeat;
}
または、使用する場合は、コンテナの幅に応じてuseauto resize
を使用できます
img {
height: inherit;
max-height: 100%;
}
バイオリンを入れてほしいが、私のNotepad ++の一番上から、これをページの一番下に置いてみて、うまくいくかどうか試してみてください。
<script>
$(document).on('resize', function(e){
var OIs = $('.owl-item')
minHeight = 0;
//reset overflow
OIs.css('overflow', 'visible');
//cycle through items and add height to array
for (i==0;i<OIs.length;i++){
var thisHeight = OIs[i].innerHeight;
if (thisHeight != undefined && thisHeight != null && thisHeight > 0){
if (minHeight == 0 ){
minHeight = thisHeight;
} else if (thisHeight < minHeight){
minHeight = thisHeight;
}
}
}
//resize containers to smallest height
OIs.css({'overflow':'hidden', 'height': minHeight + 'px'}
});
</script>
それが機能する場合、これを書くためのより良い方法がありますが、それはあなたに解決策の始まりを与えるでしょう