JS+CSS 如何从右上到左下显示数组中的图像
JS+CSS How to display images from an array from top right to bottom left
我正在尝试按以下顺序对齐一组图像:
13 | 10 | 7 | 4 | 1
14 | 11 | 8 | 5 | 2
| 12 | 9 | 6 | 3
我在js中用cssFloat让序列从右到左显示,但我不知道如何让它在一列中显示3张图片。请问有没有人知道如何让它按我想要的顺序显示?
function loadImagesInSequence(images){
if(!images.length){
return;
}
var img = new Image(),
url = images.shift();
img.onload = function(){loadImagesInSequence(images)};
img.src = url;
img.style.width = "10%";
img.style.cssFloat = "right";
document.body.appendChild(img);
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png'
]);
您可以使用Array.prototype.splice()
、for
循环
function loadImagesInSequence(images) {
if (!images.length) {
return;
}
var curr = images.splice(0, 3);
var div = document.createElement("div");
div.style.height = "30px";
div.style.width = "30px";
div.style.display = "inline-block";
for (var i = 0; i < curr.length; i++) {
(function(n) {
var img = new Image(),
url = curr[n];
img.src = url;
img.width = "10%";
div.style.cssFloat = "right";
div.appendChild(img);
div.appendChild(document.createElement("br"))
document.body.appendChild(div);
}(i))
}
loadImagesInSequence(images)
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png'
]);
function loadImagesInSequence(images) {
if (!images.length) {
return;
}
var curr = images.splice(0, 3);
var div = document.createElement("div");
div.style.height = "90px";
div.style.width = "30px";
div.style.display = "block";
for (var i = 0; i < curr.length; i++) {
(function(n) {
var text = document.createElement("span");
text.style.display = "block";
text.textContent = curr[n];
text.style.border = "1px solid #000";
text.style.margin = "1px";
var img = new Image();
// url = curr[n];
// img.src = url;
// img.width = "10%";
div.style.cssFloat = "right";
div.appendChild(text);
div.appendChild(document.createElement("br"))
document.body.appendChild(div);
}(i))
}
loadImagesInSequence(images)
}
loadImagesInSequence([
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14'
]);
更新:这是基于更改信息的重大重写。
这将在一列中放置最多 3 张图片,然后在左侧添加一张图片,直到用完所有图片。列数会有所不同。
<body>
<div id="box" style="overflow:auto;white-space:nowrap;text-align:right"></div>
<script>
function loadImagesInSequence(images) {
var count = 0, html = '', iBlock = '';
var i, len = images.length;
for(i = 0;i < len;i++) {
iBlock += '<img src="'+ images[i] +'" title="['+ i +']" style="display:block;width:100%" />';
count++;
if (count == 3) {
if (i != (len - 1)) {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
iBlock = '';
}
count = 0;
}
}
if (iBlock != '') {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
}
document.getElementById('box').innerHTML = html;
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png']);
function loadImagesInSequence(images) {
var count = 0; html = '', iBlock = '';
var i; len = images.length;
for(i = 0;i < len;i++) {
iBlock += '<img src="'+ images[i] +'" title="image:['+ i +']" style="display:block;width:100%" />';
count++;
if (count == 3) {
if (i != (len - 1)) {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
iBlock = '';
}
count = 0;
}
}
if (iBlock != '') {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
}
document.getElementById('box').innerHTML = html;
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png']);
<div id="box" style="overflow:auto;white-space:nowrap;text-align:right"></div>
您要问两件事,如何根据项目在数组中的顺序对项目进行分组,以及如何在 HMTL 中构建项目。
将项目分成 3 组可以简单地使用模数运算符 (%
) 完成,即 returns 尽可能多地拟合一个数字后的整数余数,也就是识别什么时候是某物的倍数。
递归打印一个数组并观察索引何时达到 3 的倍数,如下所示:
for(i = 0; i < array.length; i++) {
if i % 3 == 0 {
// move on to new group using HTML, I'll let you figure this out
}
}
现在,可以通过多种不同的方式将这些项目分组到 HTML 和 CSS 的垂直列中。首先想到的是使用 table
,但我认为这很奇怪而且多余。
我建议制作图像块元素,这样它们每个都有自己的行,将 3 组包装在一个 div 容器中,最后将 div
包装在一个 flexbox 中将项目右对齐。像这样:
<div id="#images">
<div>
<img src="1.jpg">
<img src="2.jpg">
<img src="3.jpg">
</div>
<div>
<img src="4.jpg">
<img src="5.jpg">
<img src="6.jpg">
</div>
etc...
</div>
#images {
display: flex;
justify-content: flex-end;
}
#images img {
display: block;
}
如何解释?对不起,如果它听起来有点迟钝和谦逊......我已经习惯了这个 Whosebug 的东西。如果您愿意,我会带着更好的解释和 CodePen 示例回来:)
我正在尝试按以下顺序对齐一组图像:
13 | 10 | 7 | 4 | 1
14 | 11 | 8 | 5 | 2
| 12 | 9 | 6 | 3
我在js中用cssFloat让序列从右到左显示,但我不知道如何让它在一列中显示3张图片。请问有没有人知道如何让它按我想要的顺序显示?
function loadImagesInSequence(images){
if(!images.length){
return;
}
var img = new Image(),
url = images.shift();
img.onload = function(){loadImagesInSequence(images)};
img.src = url;
img.style.width = "10%";
img.style.cssFloat = "right";
document.body.appendChild(img);
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png'
]);
您可以使用Array.prototype.splice()
、for
循环
function loadImagesInSequence(images) {
if (!images.length) {
return;
}
var curr = images.splice(0, 3);
var div = document.createElement("div");
div.style.height = "30px";
div.style.width = "30px";
div.style.display = "inline-block";
for (var i = 0; i < curr.length; i++) {
(function(n) {
var img = new Image(),
url = curr[n];
img.src = url;
img.width = "10%";
div.style.cssFloat = "right";
div.appendChild(img);
div.appendChild(document.createElement("br"))
document.body.appendChild(div);
}(i))
}
loadImagesInSequence(images)
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png'
]);
function loadImagesInSequence(images) {
if (!images.length) {
return;
}
var curr = images.splice(0, 3);
var div = document.createElement("div");
div.style.height = "90px";
div.style.width = "30px";
div.style.display = "block";
for (var i = 0; i < curr.length; i++) {
(function(n) {
var text = document.createElement("span");
text.style.display = "block";
text.textContent = curr[n];
text.style.border = "1px solid #000";
text.style.margin = "1px";
var img = new Image();
// url = curr[n];
// img.src = url;
// img.width = "10%";
div.style.cssFloat = "right";
div.appendChild(text);
div.appendChild(document.createElement("br"))
document.body.appendChild(div);
}(i))
}
loadImagesInSequence(images)
}
loadImagesInSequence([
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14'
]);
更新:这是基于更改信息的重大重写。
这将在一列中放置最多 3 张图片,然后在左侧添加一张图片,直到用完所有图片。列数会有所不同。
<body>
<div id="box" style="overflow:auto;white-space:nowrap;text-align:right"></div>
<script>
function loadImagesInSequence(images) {
var count = 0, html = '', iBlock = '';
var i, len = images.length;
for(i = 0;i < len;i++) {
iBlock += '<img src="'+ images[i] +'" title="['+ i +']" style="display:block;width:100%" />';
count++;
if (count == 3) {
if (i != (len - 1)) {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
iBlock = '';
}
count = 0;
}
}
if (iBlock != '') {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
}
document.getElementById('box').innerHTML = html;
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png']);
function loadImagesInSequence(images) {
var count = 0; html = '', iBlock = '';
var i; len = images.length;
for(i = 0;i < len;i++) {
iBlock += '<img src="'+ images[i] +'" title="image:['+ i +']" style="display:block;width:100%" />';
count++;
if (count == 3) {
if (i != (len - 1)) {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
iBlock = '';
}
count = 0;
}
}
if (iBlock != '') {
html = '<div style="display:inline-block;width:10%;vertical-align:top">'+ iBlock +'</div>'+ html;
}
document.getElementById('box').innerHTML = html;
}
loadImagesInSequence([
'imgs/sample_2016-04-29-23-00-29-794.png',
'imgs/sample_2016-05-04-17-49-17-927.png',
'imgs/sample_2016-05-04-17-59-00-325.png',
'imgs/sample_2016-05-08-15-28-02-630.png',
'imgs/sample_2016-05-08-15-37-26-939.png',
'imgs/sample_2016-05-08-15-47-37-141.png',
'imgs/sample_2016-05-08-16-06-15-130.png',
'imgs/sample_2016-05-08-16-07-57-144.png',
'imgs/sample_2016-05-08-16-10-49-457.png',
'imgs/sample_2016-05-08-16-35-27-171.png']);
<div id="box" style="overflow:auto;white-space:nowrap;text-align:right"></div>
您要问两件事,如何根据项目在数组中的顺序对项目进行分组,以及如何在 HMTL 中构建项目。
将项目分成 3 组可以简单地使用模数运算符 (%
) 完成,即 returns 尽可能多地拟合一个数字后的整数余数,也就是识别什么时候是某物的倍数。
递归打印一个数组并观察索引何时达到 3 的倍数,如下所示:
for(i = 0; i < array.length; i++) {
if i % 3 == 0 {
// move on to new group using HTML, I'll let you figure this out
}
}
现在,可以通过多种不同的方式将这些项目分组到 HTML 和 CSS 的垂直列中。首先想到的是使用 table
,但我认为这很奇怪而且多余。
我建议制作图像块元素,这样它们每个都有自己的行,将 3 组包装在一个 div 容器中,最后将 div
包装在一个 flexbox 中将项目右对齐。像这样:
<div id="#images">
<div>
<img src="1.jpg">
<img src="2.jpg">
<img src="3.jpg">
</div>
<div>
<img src="4.jpg">
<img src="5.jpg">
<img src="6.jpg">
</div>
etc...
</div>
#images {
display: flex;
justify-content: flex-end;
}
#images img {
display: block;
}
如何解释?对不起,如果它听起来有点迟钝和谦逊......我已经习惯了这个 Whosebug 的东西。如果您愿意,我会带着更好的解释和 CodePen 示例回来:)