获取下一个或上一个隐藏元素的高度以设置父元素的高度。 jQuery的

时间:2015-03-09 16:50:23

标签: javascript jquery slider carousel hidden

我有一个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();
});

变量sliderImgNextsliderImgPrev看起来像是返回上一张或下一张幻灯片的值,但我不知道如何在滑动功能中触发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内编写一个可用于wipeLeftwipeRight函数的函数的问题。

我有一个完整的小提琴,一个依赖(和所有其他代码加载)HERE

这也包含所有其他代码和变量。

1 个答案:

答案 0 :(得分:0)

确定设法让这个工作。

我遇到的一个问题,因为滑块使用了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);现在看起来像这样(因此它为每张幻灯片添加了一个活动类):

function sliderResponseMobile(target) {
        images.removeClass('active').fadeOut(200).eq(target).fadeIn(400).addClass('active');
    }

这是一个有效的FIDDLE