Javascript 开关按钮切换
我有一个移动工具栏,有四个按钮。每个按钮都使用精灵来定位背景图像。每个按钮都有一个唯一的类名,因为每个按钮都需要在精灵中唯一定位 加载页面时,不选择任何按钮。当按下按钮时,它的活动psuedo类:活动从白色图标变为蓝色图标,当按钮从蓝色的活动状态释放时,它保持蓝色。没问题。但我想要的行为是,当按下另一个按钮时,该按钮将其状态更改为活动状态,在此之前处于活动状态的按钮将返回其默认状态 因此,当一个按钮被按下时,它的状态保持在活动状态,当另一个按钮被按下时,它会回到默认状态 以下是按钮的HTML:Javascript 开关按钮切换,javascript,jquery,Javascript,Jquery,我有一个移动工具栏,有四个按钮。每个按钮都使用精灵来定位背景图像。每个按钮都有一个唯一的类名,因为每个按钮都需要在精灵中唯一定位 加载页面时,不选择任何按钮。当按下按钮时,它的活动psuedo类:活动从白色图标变为蓝色图标,当按钮从蓝色的活动状态释放时,它保持蓝色。没问题。但我想要的行为是,当按下另一个按钮时,该按钮将其状态更改为活动状态,在此之前处于活动状态的按钮将返回其默认状态 因此,当一个按钮被按下时,它的状态保持在活动状态,当另一个按钮被按下时,它会回到默认状态 以下是按钮的HTML:
<div id="s800-footer" align="center" class="s800-toolbar">
<button id="s800-current-location-btn" class="locationIcon" ></button>
<button id="s800-1-map-btn" class="s800-footer-btn mapIcon" >Map</button>
<button id="s800-2-facility-list-btn" class="s800-footer-btn listIcon" >List</button>
<button id="s800-3-choose-btn" class="s800-clickable s800-footer-btn chooseIcon">Choose</button>
<button id="s800-4-selected-options-btn" class="s800-footer-btn selectedIcon">Selected</button>
</div>
工具栏上从左到右的图标有.mapIcon、.listIcon、.chooseCon和.selectedIcon。我只包含了前两个的代码,因为一旦我让.mapIcon在按下.listIcon时关闭其活动状态,我就可以将该功能复制到其他功能
提前谢谢。
Chris我想给出的答案是使类名统一,在将其中一个按钮设置为活动之前,对所有按钮使用
removeClass
这里有一个想法:
<div class="buttons">
<button id="button1" class="btn" ></button>
<button id="button2" class="btn" ></button>
<button id="button3" class="btn" ></button>
<button id="button4" class="btn" ></button>
<button id="button5" class="btn" ></button>
</div>
.btn{
background-image:(....);
background-position: ....;
}
#button1&.active{ //Active button styles
background-image:(....);
background-position: ....;
}
$("#button1").click(function(){
$(".btn").removeClass("active");
$(this).addClass("active");
})
.btn{
背景图像:(……);
背景位置:。。。。;
}
#button1&活动{//活动按钮样式
背景图像:(……);
背景位置:。。。。;
}
$(“#按钮1”)。单击(函数(){
$(“.btn”).removeClass(“活动”);
$(此).addClass(“活动”);
})
每个按钮有三个类。对于地图图标,有: 马皮孔先生, .mapIcon:活动, .主动 .listIcon, .listIcon:活动, .listIcon.active 其他两个也一样。我不能只给它们相同的类,比如“.btn”,然后设置一个背景图像和位置,因为我使用的是一个精灵表,每个图像都是根据精灵表上的不同坐标定位的。以下是完整的CSS,如果您希望看到:
.mapIcon{
background:url(../images/sprite_sheet.png) no-repeat -267px -84px;
width:42px;
border:0;
text-align: center;
}
.mapIcon:active{
background:url(../images/sprite_sheet.png) no-repeat;
background-position: -332px -84px !important;
}
.active{
background:url(../images/sprite_sheet.png) no-repeat;
background-position: -332px -84px !important;
}
.listIcon{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: -413px -82px !important;
width:42px;
border:0;
}
.listIcon:active{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: 6px -127px !important;
width:42px;
border:0;
}
.listIconActive{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: 3px -127px !important;
width:42px;
border: 1px solid red;
}
.chooseIcon{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: -56px -127px !important;
/*height:45px;*/
width:53px;
border:0;
padding-right: 5px;
}
.chooseIcon:active{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: -480px 0px !important;
width:57px;
border:0;
padding-right: 5px;
}
.chooseIconActive{
background:url(../images/sprite_sheet.png) no-repeat !important;
background-position: -480px 0px !important;
width:57px;
border:0;
padding-right: 5px;
}
.selectedIcon{
background:url(../images/sprite_sheet.png) no-repeat !important ;
background-position: -150px -127px !important;
width:60px;
border:0;
text-align: center;
}
.selectedIcon:active{
background:url(../images/locator_glyphs_copy.png) no-repeat !important ;
background-position: -616px 0px !important;
width:60px;
border:0;
text-align: center;
}
.selectedIconActive{
background:url(../images/locator_glyphs_copy.png) no-repeat !important ;
background-position: -616px 0px !important;
width:60px;
border:0;
text-align: center;
}
你把事情复杂化了。第一个
:active
与类.active
不同。其次,简化JavaScript,使其不再是一堆硬编码检查。这会导致太多的维护,请保持简单
HTML:
<div class="toolbar">
<button class="icon1">A</button>
<button class="icon2">B</button>
</div>
.icon1 {
background-color: #CCCC00;
}
.icon1.selected {
background-color: #FFFF00;
}
.icon2 {
background-color: #00CCCC;
}
.icon2.selected {
background-color: #00FFFF;
}
$(".toolbar").on("click", "button", function() {
$(this).toggleClass("selected") //If you do not want people to remove the selection, then do not call toggleClass
.siblings(".selected").removeClass("selected");
});
JavaScript:
<div class="toolbar">
<button class="icon1">A</button>
<button class="icon2">B</button>
</div>
.icon1 {
background-color: #CCCC00;
}
.icon1.selected {
background-color: #FFFF00;
}
.icon2 {
background-color: #00CCCC;
}
.icon2.selected {
background-color: #00FFFF;
}
$(".toolbar").on("click", "button", function() {
$(this).toggleClass("selected") //If you do not want people to remove the selection, then do not call toggleClass
.siblings(".selected").removeClass("selected");
});
小提琴手:可能重复的。你可以通过搜索找到更多。你可以添加一个JSFIDLE演示吗?您是否尝试过使用单选按钮,在任何给定时间只能选择一个按钮?请仔细想想。如果你删除了类
mapIcon
,你以后就没有办法重新选择它了……简化CSS。我完全搞糊涂了。为什么有active
,listIconActive
,mapIconActive
等?为什么不是单一活动类?你为什么要删除他们原来的课程?有趣的回答是Epascarello。我试试这个。谢谢。当您第一次加载页面时,如果我希望.icon1的默认状态为“选中”,该怎么办?我很感激。那你为什么不把它设置成HTML格式呢?另一种选择是在它上面叫“点击”<代码>$(“.icon1”)。单击()代码>