我不是JS和jQuery的专家,但是我想提高自己的知识。
我编写了适合我的代码,但是我敢肯定它可以做得更好。您能帮我解释一下如何综合吗? 通过按钮激活URL,其中一些图像消失,而另一些图像出现,这只是一张幻灯片。
<script>
$(".green").click(function(e){
window.location = "#img_green";
$('#piz_green').css("display", "block");
$('#piz_army').css("display", "none");
$('#piz_red').css("display", "none");
$('#piz_white').css("display", "none");
$('#piz_blue').css("display", "none");
$('#piz_black').css("display", "none");
});
$(".army").click(function(e){
window.location = "#img_army";
$('#piz_green').css("display", "none");
$('#piz_army').css("display", "block");
$('#piz_red').css("display", "none");
$('#piz_white').css("display", "none");
$('#piz_blue').css("display", "none");
$('#piz_black').css("display", "none");
});
$(".red").click(function(e){
window.location = "#img_red";
$('#piz_green').css("display", "none");
$('#piz_army').css("display", "none");
$('#piz_red').css("display", "block");
$('#piz_white').css("display", "none");
$('#piz_blue').css("display", "none");
$('#piz_black').css("display", "none");
});
$(".white").click(function(e){
window.location = "#img_white";
$('#piz_green').css("display", "none");
$('#piz_army').css("display", "none");
$('#piz_red').css("display", "none");
$('#piz_white').css("display", "block");
$('#piz_blue').css("display", "none");
$('#piz_black').css("display", "none");
});
$(".blue").click(function(e){
window.location = "#img_blue";
$('#piz_green').css("display", "none");
$('#piz_army').css("display", "none");
$('#piz_red').css("display", "none");
$('#piz_white').css("display", "none");
$('#piz_blue').css("display", "block");
$('#piz_black').css("display", "none");
});
$(".black").click(function(e){
window.location = "#img_black";
$('#piz_green').css("display", "none");
$('#piz_army').css("display", "none");
$('#piz_red').css("display", "none");
$('#piz_white').css("display", "none");
$('#piz_blue').css("display", "none");
$('#piz_black').css("display", "block");
});
</script>
谢谢。
答案 0 :(得分:9)
为改进此代码,我们还可以对html进行一些改进。我们可以添加一些类来标识元素和控件,然后-可能只需要6行js
请尝试这个
$(".your-button-class").click(function(e) {
const color = e.target.dataset.color;
window.location = "#img_" + color;
$('.your-div-class').css("display", "none");
$('div[data-color=' + color + ']').css("display", "block");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<button class="your-button-class" data-color="green">green</button>
<button class="your-button-class" data-color="army">army</button>
<button class="your-button-class" data-color="red">red</button>
<button class="your-button-class" data-color="white">white</button>
<button class="your-button-class" data-color="blue">blue</button>
<button class="your-button-class" data-color="black">black</button>
</div>
<div class="your-div-class" data-color="green">green</div>
<div class="your-div-class" data-color="army">army</div>
<div class="your-div-class" data-color="red">red</div>
<div class="your-div-class" data-color="white">white</div>
<div class="your-div-class" data-color="blue">blue</div>
<div class="your-div-class" data-color="black">black</div>
答案 1 :(得分:5)
这里不需要JavaScript,因为您可以按照以下基本CSS进行操作。
使用带有锚点的正确链接:
<a href="#img_green">green</a>
<!-- repeat for other colors -->
<a href="#img_black">black</a>
然后按如下所示使用:target
pseudo-class:
#piz_green,
#piz_army,
#piz_red,
#piz_white,
#piz_blue,
#piz_black {
display: none;
}
#piz_green:target,
#piz_army:target,
#piz_red:target,
#piz_white:target,
#piz_blue:target,
#piz_black:target {
display: block;
}
通过添加父元素,您可以将其简化如下:
#container > * {
display: none;
}
#container > *:target {
display: block;
}
答案 2 :(得分:1)
在这种情况下,我强烈建议使用公共类时,可以始终在,
的选择器中使用逗号show()/hide()
分隔符,以简化代码(有点):
$(".green").click(function(e) {
window.location = "#img_green";
$('#piz_green').show();
$('#piz_army,#piz_red,#piz_white,#piz_blue,#piz_black').hide();
});
$(".army").click(function(e) {
window.location = "#img_army";
$('#piz_army').show();
$('#piz_green,#piz_red,#piz_white,#piz_blue,#piz_black').hide();
});
$(".red").click(function(e) {
window.location = "#img_red";
$('#piz_red').show();
$('#piz_green,#piz_army,#piz_white,#piz_blue,#piz_black').hide();
});
$(".white").click(function(e) {
window.location = "#img_white";
$('#piz_white').show();
$('#piz_green,#piz_army,#piz_red,#piz_blue,#piz_black').hide();
});
$(".blue").click(function(e) {
window.location = "#img_blue";
$('#piz_blue').show();
$('#piz_green,#piz_army,#piz_red,#piz_white,#piz_black').hide();
});
$(".black").click(function(e) {
window.location = "#img_black";
$('#piz_black').show();
$('#piz_green,#piz_army,#piz_red,#piz_white,#piz_blue').hide();
});
无需更改HTML结构的另一个建议:
$(".green, .army, .red, .white, .blue, .black").click(function(e) {
var color = $(this).prop('class');
window.location = "#img_" + color;
$('[id^=piz_]').hide();
$('#piz_' + color).show();
});
答案 3 :(得分:1)
元素上的数据属性和公共类将使您的生活更轻松
var slides = $(".slide"); // reference all the slides
$("[data-action").on("click", function(e){ // bind the click
var btn = $(this); // button that was clicked
var color = btn.data("action"); // get the color
slides.attr("hidden", true); // hide all the slides
$("#piz_" + color).removeAttr("hidden"); // show the clicked color
window.location.hash = "img_" + color; // update the hash
});
[hidden] {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button data-action="green">Green</button>
<button data-action="red">Red</button>
<button data-action="blue">Blue</button>
<div class="slide_wrapper">
<div class="slide" id="piz_green">green</div>
<div class="slide" id="piz_red">red</div>
<div class="slide" id="piz_blue">blue</div>
</div>
答案 4 :(得分:1)
function slideshow(image_id, block_id){
window.location = image_id;
$("[id^=piz_]").css("display", "none");
$(block_id).css("display", "block");
}
$(".green").click(function(e){
slideshow("#img_green", "#piz_green");
});
答案 5 :(得分:1)
这是我要解决的问题。首先,我将添加一个任意数据属性,在这种情况下为颜色。然后,我将添加所有带有相应data属性的按钮。然后附加到这些按钮的click事件并调用以下代码。
$('[data-action=toggle]').click(function(e){
$('div[data-color]:not([data-color=' + e.target.dataset.color + '])').hide();
$('div[data-color=' + e.target.dataset.color + ']').show();
})
a{
margin-right: .5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-color="green">green</div>
<div data-color="red">red</div>
<div data-color="blue">blue</div>
<div data-color="pink">pink</div>
<div data-color="yellow">yellow</div>
<a href="#" id="green" data-action="toggle" data-color="green">Green</a>
<a href="#" id="green" data-action="toggle" data-color="red">Red</a>
<a href="#" id="green" data-action="toggle" data-color="blue">Blue</a>
<a href="#" id="green" data-action="toggle" data-color="pink">Pink</a>
<a href="#" id="green" data-action="toggle" data-color="yellow">Yellow</a>
答案 6 :(得分:0)
您可以考虑使用属性选择器来一次隐藏所有元素。确保在hide()
之前致电show()
$(".green").click(function(e) {
window.location = "#img_green";
$('[id^=piz]').hide();
$('#piz_green').show();
});
$(".army").click(function(e) {
window.location = "#img_army";
$('[id^=piz]').hide();
$('#piz_army').show();
});
$(".red").click(function(e) {
window.location = "#img_red";
$('[id^=piz]').hide();
$('#piz_red').show();
});
$(".white").click(function(e) {
window.location = "#img_white";
$('[id^=piz]').hide();
$('#piz_white').show();
});
$(".blue").click(function(e) {
window.location = "#img_blue";
$('[id^=piz]').hide();
$('#piz_blue').show();
});
$(".black").click(function(e) {
window.location = "#img_black";
$('[id^=piz]').hide();
$('#piz_black').show();
});
答案 7 :(得分:0)
您可以使用每个按钮将要显示的图像的id存储为自定义数据属性,然后用一行来隐藏所有图像(通过为它们提供一个通用类),并从自定义数据中仅显示其id所需的图像属性。
按钮元素示例:
<button data-slideshow-button="green">Green</button>
幻灯片元素示例:
<div id="piz_green" class="slideshow-image"></div>
然后只需运行如下代码作为点击处理程序即可:
$('[data-slideshow-button]').click(function(e){
var showId = $(e.currentTarget).data('slideshowButton');
window.location = '#img_' + showId;
$('.slideshow-image').hide();
$('#piz_' + showId).show();
});
答案 8 :(得分:0)
就像您确实在HTML中的所有类上使用piz_
一样,您可以在JavaScript中轻松使用它们。例如,如果要隐藏它们,则只需键入:
$('[class^=piz_]').hide();
。这将隐藏该类以piz_
开头的所有元素。
现在我就此作一个简单的例子。请知道,我只是制作了图块和一个重试按钮,以举一个例子。
$("[class^=piz_]").click(function(){ // Make all div's with the class piz_* clickable
$('[class^=piz_]').hide(); // Hide all elements
var classAttr = '.'+$(this).attr("class"); // Get the class from the tile you clicked on
$(classAttr).show(); // Show all tiles with the same class
});
// This is just to get all tiles back and try it again.
$('.retry').click(function() {
$('[class^=piz_]').show();
});
.piz_green { background:green; }
.piz_blue { background:blue; }
.piz_red { background:red; }
.piz_orange { background:orange; }
div, button { width:100px; height:100px; }
.retry { display:block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="piz_green"></div>
<div class="piz_blue"></div>
<div class="piz_red"></div>
<div class="piz_orange"></div>
<div class="piz_green"></div>
<button class="retry">
Retry!
</button>