使用点击功能交换图像
Swapping images with click functions
我正在使用 JQuery 和 HTML 开发移动应用程序。我希望能够通过点击功能交换图像。这是我到目前为止取得的成功
HTML:
<table align="center" width="50%">
<tr>
<td align="center" id="one"><img src="image1.png" id="swap" width="90" height="90" />
<img src="" id="" width="90" height="90" />
</td>
<tr>
</table>
代码:
$("#swap").click(function(){
$(this).replaceWith('<img src="image2.png" id="swap" width="90" height="90" />')
$("#swap").click(function(){
{
$(this.).replaceWith('<img src="image1.png" id="swap" width="90" height="90" />')
}
}
此设置的唯一问题是它只交换图像嵌套的次数。我希望能够无限期地交换它们。我已经尝试了 CSS 我在这个网站上找到的方法,并成功地进行了交换,但图像不在旁边并且有白色背景。我还尝试用图像制作复选框,取得了一些成功,但在途中出现了其他问题。这是我发现的唯一半成功的方法,用我所发现的和我目前的知识来做到这一点。
感谢任何帮助。
麦克
好的迈克!
您似乎遇到的问题是点击侦听器没有查看 SAME 元素。当你交换它时,你基本上删除了元素并用一个新元素替换它,所以听众甚至找不到元素。要解决此问题,请尝试使用 $("#swap").one('click', 函数) 并将其嵌套在函数本身中。
像这样:
function fn(e) {
...
$(selector).one('click', fn);
}
$(selector).one('click', fn);
您只需要 1 个点击处理程序,您可以在其中检查图像的当前 src 并像
一样交换源
$("#swap").click(function () {
$(this).attr('src', this.src.indexOf('image2.png') > -1 ? 'image1.png': 'image2.png')
})
演示:Fiddle
试试这个
在 html
<table align="center" width="50%">
<tr>
<td align="center" id="one"><img src="image1.png" id="swap" width="90" height="90" />
</td>
<tr>
</table>
在 js 中
$("#swap").click(function(){
var imgsrc = $(this).attr('src');
if(imgsrc == 'image2.png'){
$(this).attr('src', 'image1.png' );
}else{
$(this).attr('src', 'image2.png' );
}
});
我更愿意使用的另一个选项。
$("#one").on("click", ".swap", function () {
if ($(this).hasClass("swap-2"))
{
$(this).replaceWith('<img src="image2.png" class="swap swap-1" width="90" height="90">');
}
else {
$(this).replaceWith('<img src="image1.png" class="swap swap-2" width="90" height="90">');
}
});
<table align="center" width="50%">
<tr>
<td align="center" id="one">
<img src="image1.png" id="swap" width="90" height="90" />
<img src="" id="" width="90" height="90" />
</td>
<tr>
</table>
var index=1;
var images=["image1.png", "image2.png"];
$("#swap").click(function(){
$(this).attr("src",images[index]);
if(index == images.length-1){
index=0;
}
else{
index++;
}
}
我正在使用 JQuery 和 HTML 开发移动应用程序。我希望能够通过点击功能交换图像。这是我到目前为止取得的成功
HTML:
<table align="center" width="50%">
<tr>
<td align="center" id="one"><img src="image1.png" id="swap" width="90" height="90" />
<img src="" id="" width="90" height="90" />
</td>
<tr>
</table>
代码:
$("#swap").click(function(){
$(this).replaceWith('<img src="image2.png" id="swap" width="90" height="90" />')
$("#swap").click(function(){
{
$(this.).replaceWith('<img src="image1.png" id="swap" width="90" height="90" />')
}
}
此设置的唯一问题是它只交换图像嵌套的次数。我希望能够无限期地交换它们。我已经尝试了 CSS 我在这个网站上找到的方法,并成功地进行了交换,但图像不在旁边并且有白色背景。我还尝试用图像制作复选框,取得了一些成功,但在途中出现了其他问题。这是我发现的唯一半成功的方法,用我所发现的和我目前的知识来做到这一点。
感谢任何帮助。
麦克
好的迈克!
您似乎遇到的问题是点击侦听器没有查看 SAME 元素。当你交换它时,你基本上删除了元素并用一个新元素替换它,所以听众甚至找不到元素。要解决此问题,请尝试使用 $("#swap").one('click', 函数) 并将其嵌套在函数本身中。
像这样:
function fn(e) {
...
$(selector).one('click', fn);
}
$(selector).one('click', fn);
您只需要 1 个点击处理程序,您可以在其中检查图像的当前 src 并像
一样交换源$("#swap").click(function () {
$(this).attr('src', this.src.indexOf('image2.png') > -1 ? 'image1.png': 'image2.png')
})
演示:Fiddle
试试这个 在 html
<table align="center" width="50%">
<tr>
<td align="center" id="one"><img src="image1.png" id="swap" width="90" height="90" />
</td>
<tr>
</table>
在 js 中
$("#swap").click(function(){
var imgsrc = $(this).attr('src');
if(imgsrc == 'image2.png'){
$(this).attr('src', 'image1.png' );
}else{
$(this).attr('src', 'image2.png' );
}
});
我更愿意使用的另一个选项。
$("#one").on("click", ".swap", function () {
if ($(this).hasClass("swap-2"))
{
$(this).replaceWith('<img src="image2.png" class="swap swap-1" width="90" height="90">');
}
else {
$(this).replaceWith('<img src="image1.png" class="swap swap-2" width="90" height="90">');
}
});
<table align="center" width="50%">
<tr>
<td align="center" id="one">
<img src="image1.png" id="swap" width="90" height="90" />
<img src="" id="" width="90" height="90" />
</td>
<tr>
</table>
var index=1;
var images=["image1.png", "image2.png"];
$("#swap").click(function(){
$(this).attr("src",images[index]);
if(index == images.length-1){
index=0;
}
else{
index++;
}
}