获取下一个或上一个隐藏元素的高度以设置父元素的高度。 jquery
Get the height of the next or previous hidden element to set height of the parent element. jquery
我有一个 ul
,其中包含隐藏的图像,然后使用绝对定位加载到轮播中。
这些图像的高度在桌面视图中受到限制,因此我可以控制父元素的高度,因为 ul
下方有一个小切换菜单。
当我切换到移动设备时,我使用媒体查询将图像的宽度设置为 100% 并重置高度。这意味着随着图像高度的变化,每次滑动下一张或上一张幻灯片时都必须计算我的切换菜单的位置。
我目前有一个函数返回当前幻灯片的高度并使用它来设置元素的高度,但是我需要这个函数来计算下一个图像的高度,如果用户向右滑动,或者前一个为左。
这是我的代码:
// check height of slider
var chSliderHeight = function(){
var slider = $('.slider');
var sliderImg = slider.find('li:visible img');
var sliderImgNext = sliderImg.parent().next().find('img').height();
var sliderImgPrev = sliderImg.parent().prev().find('img').height();
var sliderH = sliderImg.get(0).height;
slider.css('height',sliderH + 40);
console.log(sliderH, sliderImgNext, sliderImgPrev);
};
$(window).on('load resize orientationchange',function(){
chSliderHeight();
});
变量sliderImgNext
和sliderImgPrev
看起来像是在返回上一张或下一张幻灯片的值,但我不知道如何触发里面的css高度规则滑动功能。
在此之前我有滑动功能:
images.wipetouch({
wipeLeft: function(result) {
target = $('ul.triggers li.selected').index();
if ( target === lastElem ) { target = 0; }
else { target = target+1; }
sliderResponseMobile(target);
chSliderHeight();
},
wipeRight: function() {
target = $('ul.triggers li.selected').index();
lastElem = triggers.length-1;
if ( target === 0 ) { target = lastElem; }
else { target = target-1; }
sliderResponseMobile(target);
chSliderHeight();
}
});
如果向左或向右滑动,我需要一些条件 运行 稍微不同的功能或参数。也许这应该 运行 在成功函数中,我不是 100% 确定。也许吊装?
我发现很难解决在 chSliderHeight
中编写一个可用于 wipeLeft
和 wipeRight
函数的函数的问题。
我有一个完整的 fiddle,只有一个依赖项(并加载了所有其他代码)HERE
这还包含所有其他代码和变量。
好的,成功了。
我遇到的一个问题是,因为滑块使用 fadeIn/fadeOut 函数,所以调用 slider.find('li:visible img');
返回的长度为 2,因为调用该函数时有两张幻灯片可见。
所以我将选择器更改为:
slider.find('li[class="active"] img');
现在长度是 1。
然后我写了一个这样的回调函数:
var callback = function(){
var slider = $('.slider');
var sliderImg = slider.find('li[class="active"] img');
var sliderH = sliderImg.get(0).height;
slider.css('height',sliderH + 40);
};
并将回调函数传递给 wipetouch 函数,如下所示:
images.wipetouch({
wipeLeft: function(result) {
target = $('ul.triggers li.selected').index();
if ( target === lastElem ) { target = 0; }
else { target = target+1; }
sliderResponseMobile(target);
callback();
},
wipeRight: function() {
target = $('ul.triggers li.selected').index();
lastElem = triggers.length-1;
if ( target === 0 ) { target = lastElem; }
else { target = target-1; }
sliderResponseMobile(target);
callback();
}
});
sliderResponseMobile(target);
现在看起来像这样(因此它向每张幻灯片添加了一个活动的 class):
function sliderResponseMobile(target) {
images.removeClass('active').fadeOut(200).eq(target).fadeIn(400).addClass('active');
}
这是一个有效的 FIDDLE
我有一个 ul
,其中包含隐藏的图像,然后使用绝对定位加载到轮播中。
这些图像的高度在桌面视图中受到限制,因此我可以控制父元素的高度,因为 ul
下方有一个小切换菜单。
当我切换到移动设备时,我使用媒体查询将图像的宽度设置为 100% 并重置高度。这意味着随着图像高度的变化,每次滑动下一张或上一张幻灯片时都必须计算我的切换菜单的位置。
我目前有一个函数返回当前幻灯片的高度并使用它来设置元素的高度,但是我需要这个函数来计算下一个图像的高度,如果用户向右滑动,或者前一个为左。
这是我的代码:
// check height of slider
var chSliderHeight = function(){
var slider = $('.slider');
var sliderImg = slider.find('li:visible img');
var sliderImgNext = sliderImg.parent().next().find('img').height();
var sliderImgPrev = sliderImg.parent().prev().find('img').height();
var sliderH = sliderImg.get(0).height;
slider.css('height',sliderH + 40);
console.log(sliderH, sliderImgNext, sliderImgPrev);
};
$(window).on('load resize orientationchange',function(){
chSliderHeight();
});
变量sliderImgNext
和sliderImgPrev
看起来像是在返回上一张或下一张幻灯片的值,但我不知道如何触发里面的css高度规则滑动功能。
在此之前我有滑动功能:
images.wipetouch({
wipeLeft: function(result) {
target = $('ul.triggers li.selected').index();
if ( target === lastElem ) { target = 0; }
else { target = target+1; }
sliderResponseMobile(target);
chSliderHeight();
},
wipeRight: function() {
target = $('ul.triggers li.selected').index();
lastElem = triggers.length-1;
if ( target === 0 ) { target = lastElem; }
else { target = target-1; }
sliderResponseMobile(target);
chSliderHeight();
}
});
如果向左或向右滑动,我需要一些条件 运行 稍微不同的功能或参数。也许这应该 运行 在成功函数中,我不是 100% 确定。也许吊装?
我发现很难解决在 chSliderHeight
中编写一个可用于 wipeLeft
和 wipeRight
函数的函数的问题。
我有一个完整的 fiddle,只有一个依赖项(并加载了所有其他代码)HERE
这还包含所有其他代码和变量。
好的,成功了。
我遇到的一个问题是,因为滑块使用 fadeIn/fadeOut 函数,所以调用 slider.find('li:visible img');
返回的长度为 2,因为调用该函数时有两张幻灯片可见。
所以我将选择器更改为:
slider.find('li[class="active"] img');
现在长度是 1。
然后我写了一个这样的回调函数:
var callback = function(){
var slider = $('.slider');
var sliderImg = slider.find('li[class="active"] img');
var sliderH = sliderImg.get(0).height;
slider.css('height',sliderH + 40);
};
并将回调函数传递给 wipetouch 函数,如下所示:
images.wipetouch({
wipeLeft: function(result) {
target = $('ul.triggers li.selected').index();
if ( target === lastElem ) { target = 0; }
else { target = target+1; }
sliderResponseMobile(target);
callback();
},
wipeRight: function() {
target = $('ul.triggers li.selected').index();
lastElem = triggers.length-1;
if ( target === 0 ) { target = lastElem; }
else { target = target-1; }
sliderResponseMobile(target);
callback();
}
});
sliderResponseMobile(target);
现在看起来像这样(因此它向每张幻灯片添加了一个活动的 class):
function sliderResponseMobile(target) {
images.removeClass('active').fadeOut(200).eq(target).fadeIn(400).addClass('active');
}
这是一个有效的 FIDDLE