繁体   English   中英

一个图像元素中的多个图像源

[英]Multiple image sources in one image element

我对 Javascript 很陌生(没有 jquery pls),我想知道是否可以将多个图像源放在一个图像元素中

sadImages = document.createElement("img");
sadImages.src = "video/sadness/sadPhoto1.png";
sadImages.className = "projectImages";
sadScrollContainer.append(sadImages);

我想从悲伤文件夹中添加更多图像(不是全部。)而不创建太多图像元素。

我试过这样写

sadImages.src = "video/sadness/sadPhoto1.png" + "video/sadness/sadPhoto2.png";

sadImages.src = "video/sadness/sadPhoto1.png","video/sadness/sadPhoto2.png";

sadImages.src = ["video/sadness/sadPhoto1.png","video/sadness/sadPhoto2.png"];

但这不起作用。 这可能真的很愚蠢,但我试图让我的代码尽可能短。

您不能创建 1 个内部图像很少的图像元素。

要不手动创建图像,您可以创建存储所有图像路径的数组,然后为数组中的每个路径创建 img 元素

const images = 
['video/sadness/sadPhoto1.png','video/sadness/sadPhoto2.png']
images.forEach((img)=>{
    sadImages = document.createElement("img");
    sadImages.src = img;
    sadImages.className = "projectImages";
    sadScrollContainer.append(sadImages);
})

RTM也许 srcset 或 sizes 很有用

响应式图像有示例

<img srcset="sad-480w.jpg 480w,
             sad-800w.jpg 800w"
     sizes="(max-width: 600px) 480px, 800px"
 src="sad-800w.jpg"
 alt="sad">

或者使用 JSON

 console.log(JSON.parse(document.getElementById('img1').dataset.alternative))
 <img id="img1" src="sad1.jpg" data-alternative='["sad2.jpg","sad3.jpg"]' />

如果要在图像源列表中旋转,则必须为图像元素分配数据属性。 这可以通过访问dataset属性来实现。

 const createMultiImage = (sources, startingIndex = 0) => { const img = new Image(); img.className = 'multi-image'; img.dataset.currentIndex = startingIndex; img.dataset.sources = JSON.stringify(sources); img.src = sources[startingIndex]; return img; }; const duration = 2000, container = document.querySelector('#container'), multiImage = createMultiImage([ "http://placekitten.com/200/200", "http://placekitten.com/200/300", "http://placekitten.com/300/200", "http://placekitten.com/300/300" ]); const incrMulti = (img, count) => { const sources = JSON.parse(img.dataset.sources), currentIndex = parseInt(img.dataset.currentIndex, 10), nextIndex = (currentIndex + count + sources.length) % sources.length; img.src = sources[nextIndex]; img.dataset.currentIndex = nextIndex; }, nextMulti = img => incrMulti(img, 1), prevMulti = img => incrMulti(img, -1), // Unused nextMultiAll = () => document.querySelectorAll('.multi-image').forEach(nextMulti); container.append(multiImage); setInterval(nextMultiAll, duration);
 <div id="container"></div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM