发表于: 2019-11-12 13:17:34

1 962


今日完成:


完成了任务十的部分页面

橙色进度条和按钮都不使用切图的方式:

用三个div可以拼凑一个进度段

<div class="step-icon">
<div class="line-coin coin-finish">
</div>
<div class="circle-coin coin-finish">
1
</div>
<div class="line-coin coin-finish"></div>
</div>

div.step-icon {
display: flex;
align-items: center;
color: #ffffff;
}
div.circle-coin {
text-align: center;
line-height: 24px;
width: 24px;
height: 24px;
border-radius: 100%;
font-size: 14px;
}
div.line-coin {
width: 69px;
height: 5px;
border-radius: 4%;
}


一组单选按钮只能同时选中一个:


这个使用js处理起来还是比较简单的:

给四个div都设置同一点击事件divfunction,并且设置id.function需要传递自身参数,后面点击事件中需要靠对象的id来判断是哪个按钮点击的。


<div id="1" class="circle" onclick="divfunction(this)"></div>
<span style="width100px">口箱</span>
</div>
</div>

<div class="one-contain">
<div class="style-content-one">
<div  id="2" class="circle" onclick="divfunction(this)"></div>
<span style="width100px">口箱</span>
</div>
</div>

<div class="one-contain">
<div class="style-content-one">
<div id="3" class="circle" onclick="divfunction(this)"></div>
<span style="width100px">口箱</span>
</div>
</div>

<div class="one-contain">
<div class="style-content-one">
<div id="4" class="circle" onclick="divfunction(this)"></div>
<span style="width100px">口箱</span>
</div>
</div>

</div>



<script>
function divfunction(obj) {
var tags = document.getElementsByClassName("annulus");

for (var i=0;i<tags.length;i++){
tags[i].className="circle";
}

document.getElementById(obj.id).className="annulus";
}


</script>


js方法中首先获取类为”annlus“的对象数组,也就是已经被点击的div状态。(正常情况下这个数组中只有一个对象)

然后将对象的类换为“circle”,也就是未点击状态。

最后将发起点击事件的这个对象(通过this.id)的状态变成已点击。


div.annulus {
display: inline-block;
width: 4px;
height: 4px;
border-radius: 100%;
border: 7px solid #1d7ad9;
margin-right: 17px;
}

div.circle{
display: inline-block;
width:16px;
height: 16px;
border-radius: 100%;
border: 1px solid #d6d6d6;
margin-right: 17px;
}


还有一种情景没有考虑进去,就是当一个选项已经被选中,并且状态改变了。再次点击的话,应该是取消选中

状态。

再改一下js方法:

if (document.getElementById(obj.id).className=="annulus"){
document.getElementById(obj.id).className="circle"
}else {
document.getElementById(obj.id).className="annulus";
}

加一个判断条件,如果这个选项已被选中(也就是className="annulus"),那就取消选中的状态(“circle”)

如果没被选中,就和上面的一样,状态改变为选中就行了。


然后测了一下,不行。再次点击选中状态不会取消。

看下js代码,原来是每次点击事件发起后,js方法都会先将所有的选中对象进行清除。

然后再进行判断的话,那肯定不行。

整个流程是:再次点击之后,点击的选项状态会先取消,然后又被选中。

所以在开始清除所有选中状态时,需要先判断一下,数组中的对象是否是点击事件的发起者。

如果是,那就不做操作,如果不是,那再清除。

js完整代码:

function divfunction(obj)  {
var tags = document.getElementsByClassName("annulus");

for (var i = 0; i < tags.length; i++) {
if (tags[i].id == obj.id) {

} else {
tags[i].className = "circle";
}
}

if (document.getElementById(obj.id).className=="annulus"){
document.getElementById(obj.id).className="circle"
    }else {
document.getElementById(obj.id).className="annulus";
}

}

效果:



明日计划:

修改任务七pc排版问题。

完成任务十。


遇到的问题:

任务七的布局适配问题搞不定啊

不知道问题出在哪了  


收获:

学习使用js来改变元素的类名。

通过参数传递来判断事件发起对象。




返回列表 返回列表
评论

    分享到