javascript - 如何使硬币 slider 响应?

标签 javascript jquery css twitter-bootstrap-3 responsive-design

创建后, slider 似乎没有办法调整大小,这对于响应式布局来说非常糟糕。

有没有办法根据 Twitter Bootstrap 3 的媒体查询实际调整 Coin Slider 插件的大小?

您可能会考虑 Coin Slider's demo作为 fiddle 。

最佳答案

的确,目前的插件版本无法调整它的大小。因此,我编写了一个脚本来调整 Coin Slider 的大小(您可以在 Coin Slider 的演示站点上进行测试):

var resizeCoinSliderTo = function(coinSlider, toWidth, toHeight) {
    var csColumns = 7;
    var csRows = 5;
    var imgWidth = toWidth;
    var imgHeight = toHeight;
    var cellWidth = imgWidth/csColumns;
    var cellHeight = imgHeight/csRows;
    var coinSliderId = coinSlider.attr("id");
    coinSlider.css({
        'width': imgWidth,
        'height': imgHeight
    });
    $('.cs-'+coinSliderId).css({
        'width': (cellWidth + 'px'),
        'height': (cellHeight + 'px'),
        'background-size': (imgWidth + 'px ' + imgHeight + 'px')
    }).each(function() {
        var cellOffsets = $(this).attr("id").replace("cs-"+coinSliderId,"");
        var hOffSet = cellHeight * (Math.floor(parseInt(cellOffsets[0])-1) % csRows);
        var wOffSet = cellWidth * (parseInt(cellOffsets[1])-1);
        $(this).css({
            "left": (wOffSet + 'px'),
            "top": (hOffSet + 'px'),
            "background-position": ((-wOffSet) + 'px ' + (-hOffSet) + 'px')
        });
    });
    $('#cs-navigation-'+coinSliderId).children("a").css("top", (((imgHeight/2)-15)+'px'));
};

因此,我们只需要在每个媒体查询断点之后调用创建的 resizeCoinSliderTo,处理调整大小而不丢失其比例,以正确适应屏幕:

<span id="mq-detector">
    <span class="visible-xs"></span>
    <span class="visible-sm"></span>
    <span class="visible-md"></span>
    <span class="visible-lg"></span>
</span>

#mq-detector {
    visibility: hidden;
}

var coinSlider = $("#coin-slider");
var baseWidthDisplay = undefined;
var baseHeightDisplay = undefined;
var currentRatio = undefined;
var mqRatios = [0.75, 0.95, 0.8, 1];
var mqDetector = $("#mq-detector");
var mqSelectors = [
    mqDetector.find(".visible-xs"),
    mqDetector.find(".visible-sm"),
    mqDetector.find(".visible-md"),
    mqDetector.find(".visible-lg")
];

var checkCoinSliderForResize = function() {
    for (var i = 0; i <= mqSelectors.length; i++) {
        if (mqSelectors[i].is(":visible")) {
            if (currentRatio == undefined) {
                baseWidthDisplay = parseInt(coinSlider.css("width"));
                baseHeightDisplay = parseInt(coinSlider.css("height"));
            }
            if (i == 0) {
                var specialWidth = Math.floor(parseInt($("body").css("width"))*0.75);
                if (specialWidth < 300){
                    specialWidth = 300;
                }
                var specialHeight = Math.floor(baseHeightDisplay * specialWidth / baseWidthDisplay);
                resizeCoinSliderTo(coinSlider, specialWidth, specialHeight);
            }
            if (currentRatio != mqRatios[i]) {
                currentRatio = mqRatios[i];
                if (i > 0) {
                    resizeCoinSliderTo(coinSlider, baseWidthDisplay*currentRatio, baseHeightDisplay*currentRatio);
                }
            }
            break;
        }
    }
};

$(window).on('resize', checkCoinSliderForResize);

checkCoinSliderForResize();

确保在 DOM 准备好之后以及在创建 coinslider 之后放置所有 JavaScript 代码。

关于javascript - 如何使硬币 slider 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373007/

相关文章:

javascript - HTML/CSS - 如何使叠加视频文本完全响应?

javascript - CSS/HTML 可变容器宽度

javascript - 通过单击背景关闭 html 对话框元素

javascript - 在react-table-2的同一列中显示名字和姓氏

javascript - 全局计数器变量

javascript - 使用 jQuery 在公共(public) 'root' 中选择另一个 div

javascript - 如何定期更改我网站的背景颜色

javascript - 仅在管理页面上显示左侧导航

jquery - 是否可以使用变量通过 jQuery 选择元素?

javascript - 在容器 div 中对齐放置的 div