javascript - slider 拒绝将照片居中,强制左对齐

标签 javascript jquery image slider width

这是一个非常棒的 slider ,但它只有一个恼人的错误。如果我有不同宽度的图像,对于默认宽度而言太小的图像将左对齐。我已经尝试了使用 html/css 的所有方法,但我认为它在 js 中的某个地方。我什至在图像加载后加载了 js,它仍然保持对齐,即使它们在加载 js 之前的那一瞬间居中。似乎发生的是,js 采用较小宽度的图像并使其成为完整的默认宽度并在其右侧添加空格,本质上使其成为全宽度图像。我只是好奇这是否可以自定义,以便照片居中并在两侧添加空白。

如有任何想法,我们将不胜感激,感谢您的关注。

(function ($) {
    var params = new Array;
    var order = new Array;
    var images = new Array;
    var links = new Array;
    var linksTarget = new Array;
    var titles = new Array;
    var interval = new Array;
    var imagePos = new Array;
    var appInterval = new Array;
    var squarePos = new Array;
    var reverse = new Array;
    $.fn.coinslider = $.fn.CoinSlider = function (options) {
        init = function (el) {
            order[el.id] = new Array();
            images[el.id] = new Array();
            links[el.id] = new Array();
            linksTarget[el.id] = new Array();
            titles[el.id] = new Array();
            imagePos[el.id] = 0;
            squarePos[el.id] = 0;
            reverse[el.id] = 1;
            params[el.id] = $.extend({}, $.fn.coinslider.defaults, options);
            $.each($('#' + el.id + ' img'), function (i, item) {
                images[el.id][i] = $(item).attr('src');
                links[el.id][i] = $(item).parent().is('a') ? $(item).parent().attr('href') : '';
                linksTarget[el.id][i] = $(item).parent().is('a') ? $(item).parent().attr('target') : '';
                titles[el.id][i] = $(item).next().is('span') ? $(item).next().html() : '';
                $(item).hide();
                $(item).next().hide();
            });
            $(el).css({
                'background-image': 'url(' + images[el.id][0] + ')',
                'width': params[el.id].width,
                'height': params[el.id].height,
                'position': 'relative',
                'background-position': 'top left'
            }).wrap("<div class='coin-slider' id='coin-slider-" + el.id + "' />");
            $('#' + el.id).append("<div class='cs-title' id='cs-title-" + el.id + "' style='position: absolute; bottom:0; left: 0; z-index: 1000;'></div>");
            $.setFields(el);
            if (params[el.id].navigation) $.setNavigation(el);
            $.transition(el, 0);
            $.transitionCall(el);
        }
        $.setFields = function (el) {
            tWidth = sWidth = parseInt(params[el.id].width / params[el.id].spw);
            tHeight = sHeight = parseInt(params[el.id].height / params[el.id].sph);
            counter = sLeft = sTop = 0;
            tgapx = gapx = params[el.id].width - params[el.id].spw * sWidth;
            tgapy = gapy = params[el.id].height - params[el.id].sph * sHeight;
            for (i = 1; i <= params[el.id].sph; i++) {
                gapx = tgapx;
                if (gapy > 0) {
                    gapy--;
                    sHeight = tHeight + 1;
                } else {
                    sHeight = tHeight;
                }
                for (j = 1; j <= params[el.id].spw; j++) {
                    if (gapx > 0) {
                        gapx--;
                        sWidth = tWidth + 1;
                    } else {
                        sWidth = tWidth;
                    }
                    order[el.id][counter] = i + '' + j;
                    counter++;
                    if (params[el.id].links) $('#' + el.id).append("<a href='" + links[el.id][0] + "' class='cs-" + el.id + "' id='cs-" + el.id + i + j + "' style='width:" + sWidth + "px; height:" + sHeight + "px; float: left; position: absolute;'></a>");
                    else $('#' + el.id).append("<div class='cs-" + el.id + "' id='cs-" + el.id + i + j + "' style='width:" + sWidth + "px; height:" + sHeight + "px; float: left; position: absolute;'></div>");
                    $("#cs-" + el.id + i + j).css({
                        'background-position': -sLeft + 'px ' + (-sTop + 'px'),
                        'left': sLeft,
                        'top': sTop
                    });
                    sLeft += sWidth;
                }
                sTop += sHeight;
                sLeft = 0;
            }
            $('.cs-' + el.id).mouseover(function () {
                $('#cs-navigation-' + el.id).show();
            });
            $('.cs-' + el.id).mouseout(function () {
                $('#cs-navigation-' + el.id).hide();
            });
            $('#cs-title-' + el.id).mouseover(function () {
                $('#cs-navigation-' + el.id).show();
            });
            $('#cs-title-' + el.id).mouseout(function () {
                $('#cs-navigation-' + el.id).hide();
            });
            if (params[el.id].hoverPause) {
                $('.cs-' + el.id).mouseover(function () {
                    params[el.id].pause = true;
                });
                $('.cs-' + el.id).mouseout(function () {
                    params[el.id].pause = false;
                });
                $('#cs-title-' + el.id).mouseover(function () {
                    params[el.id].pause = true;
                });
                $('#cs-title-' + el.id).mouseout(function () {
                    params[el.id].pause = false;
                });
            }
        };
        $.transitionCall = function (el) {
            clearInterval(interval[el.id]);
            delay = params[el.id].delay + params[el.id].spw * params[el.id].sph * params[el.id].sDelay;
            interval[el.id] = setInterval(function () {
                $.transition(el)
            }, delay);
        }
        $.transition = function (el, direction) {
            if (params[el.id].pause == true) return;
            $.effect(el);
            squarePos[el.id] = 0;
            appInterval[el.id] = setInterval(function () {
                $.appereance(el, order[el.id][squarePos[el.id]])
            }, params[el.id].sDelay);
            $(el).css({
                'background-image': 'url(' + images[el.id][imagePos[el.id]] + ')'
            });
            if (typeof (direction) == "undefined") imagePos[el.id]++;
            else if (direction == 'prev') imagePos[el.id]--;
            else imagePos[el.id] = direction;
            if (imagePos[el.id] == images[el.id].length) {
                imagePos[el.id] = 0;
            }
            if (imagePos[el.id] == -1) {
                imagePos[el.id] = images[el.id].length - 1;
            }
            $('.cs-button-' + el.id).removeClass('cs-active');
            $('#cs-button-' + el.id + "-" + (imagePos[el.id] + 1)).addClass('cs-active');
            if (titles[el.id][imagePos[el.id]]) {
                $('#cs-title-' + el.id).css({
                    'opacity': 0
                }).animate({
                    'opacity': params[el.id].opacity
                }, params[el.id].titleSpeed);
                $('#cs-title-' + el.id).html(titles[el.id][imagePos[el.id]]);
            } else {
                $('#cs-title-' + el.id).css('opacity', 0);
            }
        };
        $.appereance = function (el, sid) {
            $('.cs-' + el.id).attr('href', links[el.id][imagePos[el.id]]).attr('target', linksTarget[el.id][imagePos[el.id]]);
            if (squarePos[el.id] == params[el.id].spw * params[el.id].sph) {
                clearInterval(appInterval[el.id]);
                return;
            }
            $('#cs-' + el.id + sid).css({
                opacity: 0,
                'background-image': 'url(' + images[el.id][imagePos[el.id]] + ')',
                'background-repeat': 'no-repeat',
                'background-color': '#fff',
            });
            $('#cs-' + el.id + sid).animate({
                opacity: 1
            }, 300);
            squarePos[el.id]++;
        };
        $.setNavigation = function (el) {
            $(el).append("<div id='cs-navigation-" + el.id + "'></div>");
            $('#cs-navigation-' + el.id).hide();
            $('#cs-navigation-' + el.id).append("<a href='#' id='cs-prev-" + el.id + "' class='cs-prev'></a>");
            $('#cs-navigation-' + el.id).append("<a href='#' id='cs-next-" + el.id + "' class='cs-next'></a>");
            $('#cs-prev-' + el.id).css({
                'position': 'absolute',
                'top': 0,
                'left': 0,
                'z-index': 1001,
                'line-height': '30px',
                'opacity': params[el.id].opacity
            }).click(function (e) {
                e.preventDefault();
                $.transition(el, 'prev');
                $.transitionCall(el);
            }).mouseover(function () {
                $('#cs-navigation-' + el.id).show()
            });
            $('#cs-next-' + el.id).css({
                'position': 'absolute',
                'top': 0,
                'right': 0,
                'z-index': 1001,
                'line-height': '30px',
                'opacity': params[el.id].opacity
            }).click(function (e) {
                e.preventDefault();
                $.transition(el);
                $.transitionCall(el);
            }).mouseover(function () {
                $('#cs-navigation-' + el.id).show()
            });
            $("<div id='cs-buttons-" + el.id + "' class='cs-buttons'></div>").appendTo($('#coin-slider-' + el.id));
            for (k = 1; k < images[el.id].length + 1; k++) {
                $('#cs-buttons-' + el.id).append("<a href='#' class='cs-button-" + el.id + "' id='cs-button-" + el.id + "-" + k + "'>" + k + "</a>");
            }
            $.each($('.cs-button-' + el.id), function (i, item) {
                $(item).click(function (e) {
                    $('.cs-button-' + el.id).removeClass('cs-active');
                    $(this).addClass('cs-active');
                    e.preventDefault();
                    $.transition(el, i);
                    $.transitionCall(el);
                })
            });
            $('#cs-navigation-' + el.id + ' a').mouseout(function () {
                $('#cs-navigation-' + el.id).hide();
                params[el.id].pause = false;
            });
            $("#cs-buttons-" + el.id) /*.css({'right':'50%','margin-left':-images[el.id].length*15/2-5,'position':'relative'})*/
            ;
        }
        $.effect = function (el) {
            effA = ['random', 'swirl', 'rain', 'straight'];
            if (params[el.id].effect == '') eff = effA[Math.floor(Math.random() * (effA.length))];
            else eff = params[el.id].effect;
            order[el.id] = new Array();
            if (eff == 'random') {
                counter = 0;
                for (i = 1; i <= params[el.id].sph; i++) {
                    for (j = 1; j <= params[el.id].spw; j++) {
                        order[el.id][counter] = i + '' + j;
                        counter++;
                    }
                }
                $.random(order[el.id]);
            }
            if (eff == 'rain') {
                $.rain(el);
            }
            if (eff == 'swirl') $.swirl(el);
            if (eff == 'straight') $.straight(el);
            reverse[el.id] *= -1;
            if (reverse[el.id] > 0) {
                order[el.id].reverse();
            }
        }
        $.random = function (arr) {
            var i = arr.length;
            if (i == 0) return false;
            while (--i) {
                var j = Math.floor(Math.random() * (i + 1));
                var tempi = arr[i];
                var tempj = arr[j];
                arr[i] = tempj;
                arr[j] = tempi;
            }
        }
        $.swirl = function (el) {
            var n = params[el.id].sph;
            var m = params[el.id].spw;
            var x = 1;
            var y = 1;
            var going = 0;
            var num = 0;
            var c = 0;
            var dowhile = true;
            while (dowhile) {
                num = (going == 0 || going == 2) ? m : n;
                for (i = 1; i <= num; i++) {
                    order[el.id][c] = x + '' + y;
                    c++;
                    if (i != num) {
                        switch (going) {
                        case 0:
                            y++;
                            break;
                        case 1:
                            x++;
                            break;
                        case 2:
                            y--;
                            break;
                        case 3:
                            x--;
                            break;
                        }
                    }
                }
                going = (going + 1) % 4;
                switch (going) {
                case 0:
                    m--;
                    y++;
                    break;
                case 1:
                    n--;
                    x++;
                    break;
                case 2:
                    m--;
                    y--;
                    break;
                case 3:
                    n--;
                    x--;
                    break;
                }
                check = $.max(n, m) - $.min(n, m);
                if (m <= check && n <= check) dowhile = false;
            }
        }
        $.rain = function (el) {
            var n = params[el.id].sph;
            var m = params[el.id].spw;
            var c = 0;
            var to = to2 = from = 1;
            var dowhile = true;
            while (dowhile) {
                for (i = from; i <= to; i++) {
                    order[el.id][c] = i + '' + parseInt(to2 - i + 1);
                    c++;
                }
                to2++;
                if (to < n && to2 < m && n < m) {
                    to++;
                }
                if (to < n && n >= m) {
                    to++;
                }
                if (to2 > m) {
                    from++;
                }
                if (from > to) dowhile = false;
            }
        }
        $.straight = function (el) {
            counter = 0;
            for (i = 1; i <= params[el.id].sph; i++) {
                for (j = 1; j <= params[el.id].spw; j++) {
                    order[el.id][counter] = i + '' + j;
                    counter++;
                }
            }
        }
        $.min = function (n, m) {
            if (n > m) return m;
            else return n;
        }
        $.max = function (n, m) {
            if (n < m) return m;
            else return n;
        }
        this.each(function () {
            init(this);
        });
    };
    $.fn.coinslider.defaults = {
        width: 828,
        height: 200,
        spw: 1,
        sph: 1,
        delay: 4000,
        sDelay: 30,
        opacity: 0.7,
        titleSpeed: 500,
        effect: '',
        navigation: true,
        links: false,
        hoverPause: true
    };
})(jQuery);

最佳答案

它似乎正在获取图像源 url 并将其放入 slider 的背景中。我会先尝试改变

'background-position': 'top left'

到:

'background-position': 'center center'

...实际上,整个脚本似乎都适合平铺图像。我想这就是它用来产生一些很酷的效果的技术。这条线是当前图像在 sph 和 spw 定义的图 block 中居中的位置。

'background-position': -sLeft + 'px ' + (-sTop + 'px'),

如果您使用 spw=1 和 sph=1,您可以通过将其更改为固定的“中心中心”来将其居中。

就一般用途而言,我不太喜欢这个脚本,但它似乎对编写它的人来说效果很好。

关于javascript - slider 拒绝将照片居中,强制左对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522008/

相关文章:

javascript - 如何显示正在加载的gif图像直到大图像加载完毕?

javascript - GmailApp、getDate 和排序

jQuery 1.6 不会在复选框更改时向元素添加类

html - 如何测试 srcset 算法

java - 如何将图像导入到java类中

html - 如何调整图像以遵守使用 Bootstrap 在 Google Chrome 审核中指定图像尺寸错误

javascript - 在纯JavaScript中进行 'Loading' AJAX调用时如何显示 'synchronous'?

javascript - 在 DOM 准备好之后、UI 渲染之前,如何使用 jquery 做一些事情?

javascript - 使用 jQuery 查找直系子节点,不再继续

javascript - 在javascript和jquery中将元素 append 到父级后如何获取元素的位置?