我有一个HTML表格,例如50x50。我需要提出一种可以垂直和水平镜像的算法。我正在使用javascript / jquery替换表中的图像。垂直和水平镜像必须彼此分开,以便可以分别激活/停用它们。我是编程和堆栈溢出的新手,所以如果不确定我需要提供/描述什么。希望这个问题有意义。
这是我现在的桌子。
<table>
<% 50.times do %>
<tr>
<% 50.times do %>
<td><img src='/assets/floor_tile.png'></td>
<% end %>
</td>
<% end %>
</table>
例如。如果单击左上方的单元格,并且水平镜像处于打开状态,那么右上方的单元格也会发生变化。
我当前的js,不确定是否有帮助,因为当时更多的是测试。
// Get mouse status.
var down = false;
$(document).mousedown(function() {
down = true;
}).mouseup(function() {
down = false;
});
// Basic tile change test.
$("img").mouseover(function(){
var tile_to_change = this;
if(down) {
$(tile_to_change).attr('src', '/assets/wall_tile.png');
}
else {
}
});
$("img").mousedown(function(){
$(this).attr('src', '/assets/wall_tile.png');
})
最佳答案
下面是完成您想要的一种方法。我假设您在其他地方设置了变量horizontalMirror
和verticalMirror
(例如,通过复选框处理程序):
// Get mouse status.
var down = false;
$(document).mousedown(function() {
down = true;
}).mouseup(function() {
down = false;
});
function make_wall_tile(selector, noVertMirror) {
selector.attr('src', '/assets/wall_tile.png');
td = selector.parent();
tr = td.parent();
column = td.index("td");
if(horizontalMirror) {
hmirror_td = tr.children("td").get(-1-column);
hmirror_td.attr('src', '/assets/wall_tile.png');
}
if(verticalMirror && !noVertMirror) {
table = tr.parent();
row = tr.index("tr");
vmirrorTr = table.children("tr").get(-1-row);
td = vmirrorTr.children("td").get(column);
img = td.children("img");
make_wall_tile(img, true);
}
}
// Basic tile change test.
$("img").mouseover(function(){
var tile_to_change = this;
if(down) {
$(tile_to_change).attr('src', '/assets/wall_tile.png');
}
else {
}
});
$("img").mousedown(function(){
$(this).attr('src', '/assets/wall_tile.png');
})
对于所需的.parent()/。children()的数量,我可能有点模糊,因为我认为某些浏览器(或者可能是标准浏览器)在表中添加了tbody / trow / w / e元素,但这应该可以给您基本思想。