0

我正在使用 bootstrap 3 并试图模仿 Metro ui 的步进器插件。我正在尝试使用 jQuery 放置左值,以便我的列表项均匀分布并占据容器的 100%,但控制台显示所有值均为 0。我的代码:

$(document).ready(function () {

    steps = $(".stepped li"),
    element_width = $(".stepped li").width(),
    steps_length = steps.length - 1,
    step_width = $(steps[0]).width();

    $.each(steps, function (i, step) {
        var left = i == 0 ? 0 : (element_width - step_width) / steps_length * i;

        console.log(steps);
        $(step).animate({
            left: left
        });
    });

});

我找不到我做错了什么,所有左值都返回 0px。这是我试图模仿的插件的链接:http: //tinyurl.com/o6sld95。该列表是一个简单的无序列表。

<ul class="stepped">
    <li class="complete">1</li>
    <li class="complete">2</li>
    <li class="current">3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
4

3 回答 3

1

更改element_width = $(".stepped li").width()element_width = $(".stepped").width()

您目前正在li两次获取项目的宽度并将其分配给两者element_widthstep_width,因此当您减去它们时,您会得到0

JSFiddle

于 2014-08-25T17:40:09.063 回答
0

这是一个简单的 css 解决方案,如果您对此感兴趣:http: //jsfiddle.net/u3w0qfaz/1/

第一个版本是使用父容器宽度的过渡来模拟所需的效果:

ul.stepped {
    display: flex;
    list-style: none;
    flex-wrap: nowrap;
    flex-direction: row;
    transition-duration: 1s;
    width: 1px;
}
ul.stepped li {
    flex: 1 1 auto;
}
ul.stepped.go {
    width: 100%;
}

这是另一个使用变换对项目产生缩放效果的版本:http: //jsfiddle.net/u3w0qfaz/

ul.stepped
{
    /*...*/
    transform: scaleX(0);
    transform-origin: left;
}

ul.stepped.go
{
   transform: scaleX(1); 
}
于 2014-08-25T17:35:36.273 回答
0

如果您使用的是 Bootstrap 3,则可以使用Justified Button Nav

引导 3 + 1 CSS:

ul{
  -webkit-padding-start: 0px;
}


<ul class="stepped btn-group btn-group-justified">
  <li class="complete btn-group">1</li>
  <li class="complete btn-group">2</li>
  <li class="current btn-group">3</li>
  <li class="btn-group">4</li>
  <li class="btn-group">5</li>
  <li class="btn-group">6</li>
</ul>

JsFiddle 示例

根本不需要 jQuery,除非您需要支持只有 CSS 2.x 的浏览器。

或纯 CSS + HTML(几乎是 Bootstrap 3 的做法)

.stepped{
    padding: 0;
    display: block;
    width: 100%;
}

.stepped > li {
    display: table-cell;
    border: 1px solid black;
    width: 1%;
}

<ul class="stepped">
  <li class="complete">1</li>
  <li class="complete">2</li>
  <li class="current">3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
</ul>

JS 小提琴示例

于 2014-08-25T17:41:13.363 回答