如何将这个jQuery函数转换为'如果'陈述
How do I turn this jQuery function into an 'if' statement
现在我正在尝试编写一个jquery函数,它允许我在单击div时展开它,然后在再次单击时将其返回到初始大小。
我尝试添加一个按钮使其收回,但因为当我单击它时,脚本认为我也在单击父div并再次展开。理想情况下,我想在没有按钮的情况下完成它。
我得到的代码在这里-
(jsfiddle):https://jsfiddle.net/Nikf/wykL6u7u/9/
<div class="grid">
<div class="block" id="block1">
<button class="retractor" id="ret1">back</button>
</div>
<div class="block" id="block2">2</div>
<div class="block" id="block3">3</div>
<div class="block" id="block4">4</div>
<div class="block" id="block5">5</div>
<div class="block" id="block6">6</div>
</div>
CSS
*{
margin: 0;
padding: 0;
}
html, body{
width: 100%;
height: 100%;
}
.grid{
width: 100%;
height: 100%;
/*background-color: #114411;*/
}
.block{
width: 33.3%;
height: 50%;
float: left;
color: #FFFFFF;
position: relative;
}
.retractor{
width: 50px;
height: 50px;
padding: 10px 0;
text-align: center;
background-color: #FF0000;
color: #FFFFFF;
font-family: 'Open Sans', sans-serif;
position: absolute;
bottom: 30px;
right: 30px;
}
#block1{
background-color: #222222;
}
#block2{
background-color: #999999;
}
#block3{
background-color: #5555555;
}
#block4{
background-color: #999999;
}
#block5{
background-color: #333333;
}
#block6{
background-color: #CCCCCC;
编写脚本
$('#block1').click(function(){
$('#block1').animate({
width: '100%',
height: '100%'
});
});
$('#block1').click(function(){
$('#block1').animate({
width: '33.3%',
height: '50%'
});
});
您可以将jQuery toggleClass
与CSS转换结合使用,以获得相同的结果。检查https://jsfiddle.net/wykL6u7u/11/看看这是否符合你的需求。
我所做的:
.block {
width: 33.3%;
height: 50%;
// ...
transition: all 1s;
}
.block.expanded {
width: 100%;
height: 100%;
transition: all 1s;
}
JS只是类切换:
$('#block1').click(function(){
$(this).toggleClass("expanded");
});
所以经过深思熟虑,我这样做了。它进行2次计算,以找出网格的宽度和高度的百分比,并在此基础上制作动画。我已经设置了基于网格点击的扩展和收缩,但如果你想使用按钮,只需将点击绑定改回后面的按钮id即可。
$('.grid').click( function() {
var heightPercentage = ( 100 * parseFloat($('.grid').css('height')) / parseFloat($('.grid').parent().css('height')) ) + '%';
var widthPercentage = ( 100 * parseFloat($('.grid').css('width')) / parseFloat($('.grid').parent().css('width')) ) + '%';
var toggleWidth = widthPercentage === "100%" ? "33%" : "100%";
var toggleHeight = heightPercentage === "100%" ? "50%" : "100%";
$('.grid').animate({
width: toggleWidth,
height: toggleHeight
});
});
https://jsfiddle.net/bgarrison25/o7k2y25q/1
我建议使用"toggleClass"并依赖CSS类,而不是硬编码的CSS值。同意@sebastian wramba
问题是我们根本不需要后退按钮。我把它拿出来的时候明白了,op更希望它不在那里,但点击div可以切换。如果我没有正确阅读要求,欢迎反馈。
https://jsfiddle.net/e15kxkdr/3/
<div class="grid">
<div class="block" id="block1">1</div>
<div class="block" id="block2">2</div>
<div class="block" id="block3">3</div>
<div class="block" id="block4">4</div>
<div class="block" id="block5">5</div>
<div class="block" id="block6">6</div>
</div>
.grid{
width: 100%;
height: 100%;
/*background-color: #114411;*/
}
.block{
width: 33.3%;
height: 50%;
float: left;
color: #FFFFFF;
position: relative;
}
.nodisplay {
display: none;
}
$('.grid').on("click", "div", function(){
$(this).toggleClass("grid")
$(this).toggleClass("block")
$(this).siblings().toggleClass("nodisplay")
})
更新:我更改了这一点,通过jquery"on"子元素处理主元素"grid"的子元素,而不是使用单独的类。然后我添加了一个新类"nodisplay"来隐藏其他元素。
试试这个:
$(document).ready(function(){
var expand = true;
$('#block1').click(function(){
var width='33.3%', height="50%";
if(expand){
width='100%';
height='100%';
expand=false;
}else{
expand=true;
}
$('#block1').animate({
width: width,
height: height
});
});
});
尝试使用Array.prototype.reverse()
将值存储在数组中
我认为@BillGarrison是正确的。没有解释就不是代码的工作原理显而易见。
说明:
方法是一个"切换"过程。对进程使用arr[0]
处的值;反向CCD_ 4;使用arr[0]
处的值用于下一进程;反向CCD_ 6。
该方法可以在不使用Array.prototype.reverse()
的情况下实现;使用0
和1
、undefined
;请参阅在最新的jQuery版本中是否已弃用.thoggle()?。
该方法还可以扩展为循环通过或连续切换n
值,在迭代完所有数组项后返回初始值。
var arr = [
["100%", "100%"],
["33.3%", "50%"]
];
$("#block1").click(function() {
$(this).animate({
// at initial click, set `width` to `arr[0][0]` : `100%`,
// set `height` to `arr[0][1]` : `100%`
// reverse `arr`
// at second click `arr[0]` : `["33.3%", "50%"]`;
// set `width` to `arr[0][0]` : `33.3%`
// set `height` to `arr[0][1]` : `50%`;
// repeat procedure
width: arr[0][0],
height: arr[0][1]
}, function() {
arr.reverse()
});
})
jsfiddlehttps://jsfiddle.net/wykL6u7u/14/
我建议您更改逻辑。如果添加一个特定的类并让CSS来做动画,会更容易。
$('.block').click(function(ev){
$(ev.target).toggleClass('active');
});
通过这种方式,您可以从.block元素中删除按钮。
将动画和新类添加到CSS:
.block{
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}
.block.active{
width: 100%;
height:100%;
}
我还没有测试过这个代码。我希望它能起作用
--编辑--
ev.target不是jQuery元素。我把它包装在$(ev.target)中,否则它就没有.toggleClass();
- 如果 a 为 false,则 if(a) === if(false)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 如果href包含X,请更改href
- 如果localstorage为空,则显示欢迎消息
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 如果元素's的ID以数字开头
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Javascript-通过i=0直接传递array[0]与array[0],array[i]在“;如果“;陈述
- 浏览器跳过“;如果“"否则如果“;,直接转到“;否则”;陈述
- Javascript符号关于“;如果“;陈述
- 在<c: 如果>陈述
- 如何将这个jQuery函数转换为'如果'陈述
- 如果有陈述,请写速记
- 如果,那么对于琐事的陈述
- 为什么如果我加上这两个陈述,条形图就会反转
- 通过JS应用CSS;如果“;陈述