jQuery CSS 使用calc计算宽度
jQuery CSS width calculation using calc
在尝试制作一个 jQuery/CSS-calc 场景后,让元素的宽度等于特定数值 (32px) 乘以输入的值 [type="number" ] 场,我最终还是放弃了。我让 运行 陷入麻烦,无法将元素的宽度存储在变量中并在 calc 声明中使用正确的语法。
我最终通过在条件语句中与 1-4 中的每个值相对应的 CSS 宽度值进行硬编码来完成我打算做的事情。虽然我让它工作了,但它绝对是低效和肮脏的。我希望有人可以向我展示一些更有效的替代方案,这些替代方案可以使用 calc 或其他需要更少代码的东西来实现相同的结果。
所以综上所述——当数量为1
时,目标元素span#dogFace
的宽度为32px
。当数量为2
时,目标元素的宽度为64px
,依此类推。如果您尝试将其增加到 5
,则会出现一条文本警告。
感谢任何建议!
奖励积分:我最初试图找到一个仅 CSS 的解决方案,我认为这仍然是可能的,但我无法让它工作。如果有人知道如何用一些花哨的方式完成此操作 CSS,我也很想了解它是如何工作的。
$('#input_5_78').on('change', function() {
if (this.value >= 5) {
$('#dogFace').hide();
$('#xtraDog').show();
} else {
$('#dogFace').show();
$('#xtraDog').show();
}
if (this.value == 0) {
$('#dogFace').width('0');
$('#xtraDog').hide();
} else if (this.value == 1) {
$('#xtraDog').hide();
$('#dogFace').width('32px');
} else if (this.value == 2) {
$('#dogFace').width('64px');
$('#xtraDog').hide();
} else if (this.value == 3) {
$('#dogFace').width('96px');
$('#xtraDog').hide();
} else if (this.value == 4) {
$('#dogFace').width('128px');
$('#xtraDog').hide();
}
})
.emoji {
height: 32px;
background-position: left top;
background-repeat: repeat-x;
background-size: contain;
display: inline-block;
vertical-align: top;
}
.emoji.dog {
background-image: url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
仅使用 CSS 可能是不可能的,但那会很棒。这是您尝试的一种变体,它使代码变干一点并使其更容易理解。
$('#input_5_78').on('change', function() {
if (this.value < 5) {
$('#xtraDog').hide();
$('#dogFace').width(this.value * 32 + 'px');
} else {
$('#dogFace').width('0');
$('#xtraDog').show();
}
})
.emoji {
height: 32px;
background-position: left top;
background-repeat: repeat-x;
background-size: contain;
display: inline-block;
vertical-align: top;
}
.emoji.dog {
background-image: url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
我的回答略有不同。一些指针和注释解释了代码片段中包含的 javascript;
- 您想养成将函数编写为 运行 可重复代码的习惯。
- 缩进您的代码并对其进行注释以供将来参考和阅读
- 再次缩进您的 CSS 以使其易于阅读,这也将帮助人们在未来的答案中为您提供帮助
这里是JS斌:http://jsbin.com/vunajej/edit?html,css,js,output
这里的片段:
var validate_num_dogs = function ( e ) { // Declare function with variable e for element ;)
$( '#xtraDog' ).hide(); // Hide warning msg each time the function is called
// For simple conditionals it's not required to use braces {}
if ( e.val() >= 5 ) // If elements value is greater than or == to 5 (max)
$( '#xtraDog' ).show(); // Display warning msg
else
$( '#dogFace' ).width( 32 * e.val() ); // Width value is simply 32px multiplied by input value
};
jQuery( document ).ready( function( $ ) {
$( '#input_5_78' ).on( 'change', function(){
validate_num_dogs( $(this) ); // Call function, $(this) is the current element e.g. #input_5_78
});
});
.emoji {
height:32px;
background-position:left top;
background-repeat:repeat-x;
background-size:contain;
display:inline-block;
vertical-align:top;
}
.emoji.dog {
background-image:url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
</body>
</html>
在尝试制作一个 jQuery/CSS-calc 场景后,让元素的宽度等于特定数值 (32px) 乘以输入的值 [type="number" ] 场,我最终还是放弃了。我让 运行 陷入麻烦,无法将元素的宽度存储在变量中并在 calc 声明中使用正确的语法。
我最终通过在条件语句中与 1-4 中的每个值相对应的 CSS 宽度值进行硬编码来完成我打算做的事情。虽然我让它工作了,但它绝对是低效和肮脏的。我希望有人可以向我展示一些更有效的替代方案,这些替代方案可以使用 calc 或其他需要更少代码的东西来实现相同的结果。
所以综上所述——当数量为1
时,目标元素span#dogFace
的宽度为32px
。当数量为2
时,目标元素的宽度为64px
,依此类推。如果您尝试将其增加到 5
,则会出现一条文本警告。
感谢任何建议!
奖励积分:我最初试图找到一个仅 CSS 的解决方案,我认为这仍然是可能的,但我无法让它工作。如果有人知道如何用一些花哨的方式完成此操作 CSS,我也很想了解它是如何工作的。
$('#input_5_78').on('change', function() {
if (this.value >= 5) {
$('#dogFace').hide();
$('#xtraDog').show();
} else {
$('#dogFace').show();
$('#xtraDog').show();
}
if (this.value == 0) {
$('#dogFace').width('0');
$('#xtraDog').hide();
} else if (this.value == 1) {
$('#xtraDog').hide();
$('#dogFace').width('32px');
} else if (this.value == 2) {
$('#dogFace').width('64px');
$('#xtraDog').hide();
} else if (this.value == 3) {
$('#dogFace').width('96px');
$('#xtraDog').hide();
} else if (this.value == 4) {
$('#dogFace').width('128px');
$('#xtraDog').hide();
}
})
.emoji {
height: 32px;
background-position: left top;
background-repeat: repeat-x;
background-size: contain;
display: inline-block;
vertical-align: top;
}
.emoji.dog {
background-image: url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
仅使用 CSS 可能是不可能的,但那会很棒。这是您尝试的一种变体,它使代码变干一点并使其更容易理解。
$('#input_5_78').on('change', function() {
if (this.value < 5) {
$('#xtraDog').hide();
$('#dogFace').width(this.value * 32 + 'px');
} else {
$('#dogFace').width('0');
$('#xtraDog').show();
}
})
.emoji {
height: 32px;
background-position: left top;
background-repeat: repeat-x;
background-size: contain;
display: inline-block;
vertical-align: top;
}
.emoji.dog {
background-image: url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
我的回答略有不同。一些指针和注释解释了代码片段中包含的 javascript;
- 您想养成将函数编写为 运行 可重复代码的习惯。
- 缩进您的代码并对其进行注释以供将来参考和阅读
- 再次缩进您的 CSS 以使其易于阅读,这也将帮助人们在未来的答案中为您提供帮助
这里是JS斌:http://jsbin.com/vunajej/edit?html,css,js,output
这里的片段:
var validate_num_dogs = function ( e ) { // Declare function with variable e for element ;)
$( '#xtraDog' ).hide(); // Hide warning msg each time the function is called
// For simple conditionals it's not required to use braces {}
if ( e.val() >= 5 ) // If elements value is greater than or == to 5 (max)
$( '#xtraDog' ).show(); // Display warning msg
else
$( '#dogFace' ).width( 32 * e.val() ); // Width value is simply 32px multiplied by input value
};
jQuery( document ).ready( function( $ ) {
$( '#input_5_78' ).on( 'change', function(){
validate_num_dogs( $(this) ); // Call function, $(this) is the current element e.g. #input_5_78
});
});
.emoji {
height:32px;
background-position:left top;
background-repeat:repeat-x;
background-size:contain;
display:inline-block;
vertical-align:top;
}
.emoji.dog {
background-image:url('https://afeld.github.io/emoji-css/emoji/dog.png');
}
#dogFace {
float: left;
}
#xtraDog {
display: none;
}
ul li.qtyField {
list-style-type: none;
}
.qtyField label {
float: left;
}
.qtyField input[type="number"] {
float: left;
font-weight: bold;
font-size: 1.15em;
margin: 0 0 0 15px;
width: 45px!important;
text-align: center;
}
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<form>
<ul>
<li class="qtyField">
<label class="gfield_label" for="input_5_78">How many dogs need training?</label>
<div class="ginput_container ginput_container_number">
<input name="input_78" id="input_5_78" step="any" min="0" max="5" value="0" type="number">
</div>
<div class="gfield_description">
<span id="dogFace" class="emoji dog"></span>
<span id="xtraDog"><br><br>Woah, that's a lot of dogs!<br />Please call (480) 555-1234 to discuss your training needs.</span>
</div>
</li>
</ul>
</form>
</body>
</html>