【问题标题】:the loop applying the css property from just last value从最后一个值应用 css 属性的循环
【发布时间】:2017-07-14 16:55:07
【问题描述】:

我用 data-line 属性做了几个 div。我想循环每个 div 并从 data-line 属性中获取自己的值并将其作为 % 应用到宽度,但它只需要最后一个值并将其全部应用。

您可以在这里查看我的代码。

(function processLine() {
		var processBar = $('.process');
		var percent = $('.process-percent .percentage');
		//var id = setInterval(frame, 15);

		function frame() {
			var arrData = [];
			processBar.each(function() {
				var processData = $(this).data('line');
				if (arrData.indexOf(processData) !== processData) {
					arrData.push(processData);
				}
			});


			for (var i = 0; i < arrData.length; i++) {
					processBar.css({
						'width': arrData[i] + '%'
					});
			}

		}

		frame();
})();
.process-bar {
    position: relative;
    max-width: 265px;
    height: 15px;
    background-color: #e4e4e4;
    -webkit-border-radius: 8px;
            border-radius: 8px;
}

#sidebar-left .process-bar {
    width: 265px;
}

.process {
    position: relative;
    width: 70%;
    height: 15px;
    -webkit-border-radius: 8px;
            border-radius: 8px;
    background-color: #aab3c3;
}

.process-percent {
    display: block;
    text-align: right;
    font-size: 9px;
    color: #f9f9f9;
    padding-right: 5%;
    font-weight: 400;
}

.yaris-arrow-progress .process-bar-container {
    margin-bottom: 16px;
}

.yaris-arrow-progress .process-bar-container:last-child {
    margin-bottom: 0;
}

.yaris-arrow-progress .process-bar {
    max-width: 90%;
    width: 90%;
    height: 20px;
    -webkit-border-radius: 0px;
            border-radius: 0px;
    display: flex;
    align-items: center;
}

.yaris-arrow-progress .process-bar::after {
    content: '';
    position: absolute;
    width: 0;
	height: 0;
	border-top: 9px solid transparent;
	border-left: 18px solid #e4e4e4;
	border-bottom: 9px solid transparent;
    top: 0;
    left: 100%;
}

.yaris-arrow-progress .process-bar::before {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 0;
    height: 0;
    border-bottom: 10px solid #f9f9f9;
    border-left: 20px solid transparent;
    border-right: 120px solid #f9f9f9;
    border-top: 10px solid #f9f9f9;
    z-index: 2;
}

.yaris-arrow-progress .process {
    width: 70%;
    height: 20px;
    -webkit-border-radius: 0px;
            border-radius: 0px;
    background: #f8981d;
}

.yaris-arrow-progress .process .bike {
    display: block;
    text-align: right;
    font-size: 16px;
    color: #f9f9f9;
    padding-right: 2%;
    line-height: 0;
}

.yaris-arrow-progress .process::after {
    content: '';
    position: absolute;
    width: 0;
	height: 0;
	border-top: 10px solid transparent;
	border-left: 20px solid #f8981d;
	border-bottom: 10px solid transparent;
    top: 0;
    left: 100%;
    z-index: 1;
}


.yaris-arrow-progress .lap-xp {
    position: absolute;
    z-index: 3;
    font-size: 10px;
    margin-left: 40px;
}
<div class="yaris-arrow-progress">
<div class="process-bar-container">
        <div class="process-bar-wrapper">

            <div class="process-bar ">
                <div class="process" data-line="10">
                    <div class="bike"><span class="lnr lnr-bicycle"></span></div>
                </div>
            </div>
        </div>
    </div>

    <div class="process-bar-container">
        <div class="process-bar-wrapper">

            <div class="process-bar ">
                <div class="process" data-line="65">
                    <div class="bike"><span class="lnr lnr-bicycle"></span></div>
                </div>
            </div>
        </div>
    </div>

    <div class="process-bar-container">
        <div class="process-bar-wrapper">

            <div class="process-bar ">
                <div class="process" data-line="83">
                    <div class="bike"><span class="lnr lnr-bicycle"></span></div>
                </div>
            </div>
        </div>
    </div>

    <div class="process-bar-container">
        <div class="process-bar-wrapper">

            <div class="process-bar">
                <div class="process" data-line="95">
                    <div class="bike"><span class="lnr lnr-bicycle"></span></div>
                </div>
            </div>
        </div>
    </div>
</div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【问题讨论】:

    标签: javascript jquery html loops


    【解决方案1】:

    您在for 循环内使用processBar 来更新CSS 宽度。由于processBar 是所有.process 元素的集合,因此当您在其上调用.css 时,所有元素都会发生变化。尝试使用.eq(i) 仅更改该集合的i-th 索引处的元素。

    Plus我不明白你为什么要使用两个循环。您可以直接在 each 内应用 CSS(您可以使用 $(this) 定位当前元素:

    function frame() {
        processBar.each(function() {
            var processData = $(this).data('line');
            $(this).css({
    //        ^^^^ instead of processBar which changes the whole collection
                'width': processData + '%'
            });
        });
    }
    

    (function processLine() {
      var processBar = $('.process');
      var percent = $('.process-percent .percentage');
    
      function frame() {
        processBar.each(function() {
          var processData = $(this).data('line');
          $(this).css({
            'width': processData + '%'
          });
        });
      }
    
      frame();
    })();
    .process-bar {
      position: relative;
      max-width: 265px;
      height: 15px;
      background-color: #e4e4e4;
      -webkit-border-radius: 8px;
      border-radius: 8px;
    }
    
    #sidebar-left .process-bar {
      width: 265px;
    }
    
    .process {
      position: relative;
      width: 70%;
      height: 15px;
      -webkit-border-radius: 8px;
      border-radius: 8px;
      background-color: #aab3c3;
    }
    
    .process-percent {
      display: block;
      text-align: right;
      font-size: 9px;
      color: #f9f9f9;
      padding-right: 5%;
      font-weight: 400;
    }
    
    .yaris-arrow-progress .process-bar-container {
      margin-bottom: 16px;
    }
    
    .yaris-arrow-progress .process-bar-container:last-child {
      margin-bottom: 0;
    }
    
    .yaris-arrow-progress .process-bar {
      max-width: 90%;
      width: 90%;
      height: 20px;
      -webkit-border-radius: 0px;
      border-radius: 0px;
      display: flex;
      align-items: center;
    }
    
    .yaris-arrow-progress .process-bar::after {
      content: '';
      position: absolute;
      width: 0;
      height: 0;
      border-top: 9px solid transparent;
      border-left: 18px solid #e4e4e4;
      border-bottom: 9px solid transparent;
      top: 0;
      left: 100%;
    }
    
    .yaris-arrow-progress .process-bar::before {
      content: "";
      position: absolute;
      left: 0;
      bottom: 0;
      width: 0;
      height: 0;
      border-bottom: 10px solid #f9f9f9;
      border-left: 20px solid transparent;
      border-right: 120px solid #f9f9f9;
      border-top: 10px solid #f9f9f9;
      z-index: 2;
    }
    
    .yaris-arrow-progress .process {
      width: 70%;
      height: 20px;
      -webkit-border-radius: 0px;
      border-radius: 0px;
      background: #f8981d;
    }
    
    .yaris-arrow-progress .process .bike {
      display: block;
      text-align: right;
      font-size: 16px;
      color: #f9f9f9;
      padding-right: 2%;
      line-height: 0;
    }
    
    .yaris-arrow-progress .process::after {
      content: '';
      position: absolute;
      width: 0;
      height: 0;
      border-top: 10px solid transparent;
      border-left: 20px solid #f8981d;
      border-bottom: 10px solid transparent;
      top: 0;
      left: 100%;
      z-index: 1;
    }
    
    .yaris-arrow-progress .lap-xp {
      position: absolute;
      z-index: 3;
      font-size: 10px;
      margin-left: 40px;
    }
    <div class="yaris-arrow-progress">
      <div class="process-bar-container">
        <div class="process-bar-wrapper">
    
          <div class="process-bar ">
            <div class="process" data-line="10">
              <div class="bike"><span class="lnr lnr-bicycle"></span></div>
            </div>
          </div>
        </div>
      </div>
    
      <div class="process-bar-container">
        <div class="process-bar-wrapper">
    
          <div class="process-bar ">
            <div class="process" data-line="65">
              <div class="bike"><span class="lnr lnr-bicycle"></span></div>
            </div>
          </div>
        </div>
      </div>
    
      <div class="process-bar-container">
        <div class="process-bar-wrapper">
    
          <div class="process-bar ">
            <div class="process" data-line="83">
              <div class="bike"><span class="lnr lnr-bicycle"></span></div>
            </div>
          </div>
        </div>
      </div>
    
      <div class="process-bar-container">
        <div class="process-bar-wrapper">
    
          <div class="process-bar">
            <div class="process" data-line="95">
              <div class="bike"><span class="lnr lnr-bicycle"></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

      【解决方案2】:

      您可以使用非常简单的代码来做到这一点。不用写这么长的函数。

      $('.process').each(function(){
          var width = $(this).data('line');
          $(this).css('width',width+'%');
      });
      

      【讨论】:

      • 对不起兄弟我不知道你已经发布了答案。我们的答案非常相似。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多