动态替换图片
最简单的示例
| <div class="img-wrapper"> |
| <div onclick='replacement'> |
| <img src='[图片1]' > |
| </div> |
| |
| |
| |
| <div onclick='replacement'> |
| <img src='[图片10]'> |
| </div> |
| </div> |
| .img-wrapper { |
| margin-top: 30px; |
| display: flex; |
| justify-content: space-around; |
| } |
| .img-wrapper > div { |
| flex: 0 0 100px; |
| border: 1px solid; |
| } |
| |
| img { |
| width: 100%; |
| height: 100%; |
| } |
| |
| let imgs = [ |
| '[图片1]', |
| |
| |
| |
| '[图片2]', |
| ]; |
| function replacement() { |
| |
| let imgWrapper = document.getElementsByClassName('img-wrapper').childNodes; |
| |
| for (let i = 0; i < imgWrapper.length; i++) { |
| imgWrapper[i].children[0].src = imgs[i]; |
| } |
| |
| this.children[0].src = '[需要展示的图片链接]'; |
| } |
<js-2018_10_28_01-dynamic_replacement_image/>
稍微复杂一点
通多js
去创建重复的div
布局.并设置样式.最后结果同上.
但是这个例子没有做需要做循环的元素总量达到 100 或是更高数量的性能优化.
| <div id="imgWrapper"></div> |
| #imgWrapper { |
| display: flex; |
| width: 100%; |
| flex-wrap: wrap; |
| } |
| |
| #imgWrapper > div { |
| flex: 0 0 200px; |
| } |
| |
| #imgWrapper > div > img { |
| display: block; |
| width: 100%; |
| height: auto; |
| } |
| window.onload = () => { |
| let imgWrapper = document.getElementById('imgWrapper'); |
| |
| for (let i = 0; i < 10; i++) { |
| let newNode = document.createElement('div'); |
| let newNodeImage = document.createElement('img'); |
| |
| |
| let index = indexSrc(j); |
| |
| newNodeImage.src = `./images/${index}.png`; |
| newNode.appendChild(newNodeImage); |
| imgWrapper.appendChild(newNode); |
| } |
| |
| for (let i = 0; i < imgWrapper.children.length; i++) { |
| imgWrapper.children[i].addEventListener('click', function() { |
| for (let j = 0; j < imgWrapper.children.length; j++) { |
| let index = indexSrc(j); |
| imgWrapper.children[j].children[0].src = `./images/${index}.png`; |
| } |
| this.children[0].src = './images/qq.png'; |
| }); |
| } |
| function indexSrc(index) { |
| |
| index = '' + index + 1; |
| if (index.length < 2) { |
| index = '0' + index; |
| } |
| return index; |
| } |
| }; |
更新说明:
下面的内容部分还有函数部分,写的一团糟糕.建议不要做浏览(由于是第一篇博文,所以做保留处理).
所以我写了一个最简单的示例.看上面部分即可.
目的:
在制作个人网站的时候,我需要在 header 里面加入各大社交网站的直链,可以让更多人,找到我,提供他们的想法。并且去实现那个想法。
展现方式:
是以一种点击图标的的形式,展示不同社交网站的二维码或者是链接。在开发过程中遇到很多有意思的坑,想分享给大家,希望可以给看到本文的小伙伴提供点帮助。
使用技巧
由于在一开始,我们就用了多个程序来进行区分不同事件点击之后,显示不同的图片的功能。但是在一段时间之后发现这样子的代码谈不上什么有价值的,所以我重新花了点时间,把代码重新架构了一番。清理了冗余代码,同时也把程序优化了。
优化之后的程序只要将植入代码,就可以实现简单的点击不同按钮,相同位置展示不同图片功能。
项目结构:
| ├──index |
| │ ├──js |
| │ │ └──index.js |
| │ ├──css |
| │ │ └──index.js |
index.html 详解
首先页面 header 排版,设置具体结构
| ├── div // 示例 header |
| │ ├── div |
| │ │ └── img |
| │ │ └── img |
| │ │ └── img |
在每个 img 中添加 onclick="hImage()"属性,并给每个"hImage()"中加入"1-3"值;设置这个值,是为了在 index.js 的 hImage()函数中做出对应的判断。
| <img class="h-image" onclick="hImage(1)" width="50" height="25" alt="图标1" title="1"> |
| |
| <div class="h-box"> |
| <div style="color: #fff;text-align: center"> |
| <img class="h-image" onclick="hImage(1)" width="50" height="25" alt="图标1" title="1"> |
| <img class="h-image" onclick="hImage(2)" width="50" height="25" alt="图标2" title="2"> |
| <img class="h-image" onclick="hImage(3)" width="50" height="25" alt="图标3" title="3"> |
| </div> |
| </div> |
模态框
| ├── div // 示例 模态框 |
| │ ├── div |
| │ │ └── div |
| │ │ └── img |
| │ │ └── h1 |
第一层 div 设置模态框显示之后的透明色背景。
第二层 div 主要是做模态框显示之后的内容的框架
第二层 div 下面的 div 是关闭模态框按钮。里面加入 onclick="hShow()" 函数,该函数负责关闭模态框
| <div onclick="hShow()">×</div> |
第二层 div 下面的 img 则是展示不同图标点击之后,显示的二维码
第二层 div 下面的 h1 则是展示不同图标点击之后,显示的提示信息
这里的模态框设置
使用 position 中的 fixed,来设置模态框的位置与样式。同
| |
| <div class="h-module"> |
| |
| <div> |
| |
| <div onclick="hShow()">×</div> |
| |
| <img id="hhtImg" src="" alt=""> |
| <h1 id="hText"></h1> |
| </div> |
| </div> |
index.js 详解
| var hModule = document.getElementsByClassName('h-module'); |
| var hhtImg = document.getElementById('hhtImg'); |
| var hText = document.getElementById('hText'); |
| |
| |
| |
| |
| |
| function hImage(e) { |
| console.log(); |
| switch (e) { |
| case 1: |
| |
| hhtImg.src = |
| 'http://oigzh9iic.bkt.clouddn.com/%E4%BA%AB%E6%9C%88%E4%BC%9A%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg'; |
| hhtImg.title = '这里是' + e; |
| hText.innerHTML = '这里是二维码' + e; |
| break; |
| case 2: |
| hhtImg.src = |
| 'http://oigzh9iic.bkt.clouddn.com/%E4%BA%AB%E6%9C%88%E4%BC%9A%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg'; |
| hhtImg.title = '这里是' + e; |
| hText.innerHTML = '这里是二维码' + e; |
| break; |
| case 3: |
| hhtImg.src = |
| 'http://oigzh9iic.bkt.clouddn.com/%E4%BA%AB%E6%9C%88%E4%BC%9A%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg'; |
| hhtImg.title = '这里是' + e; |
| hText.innerHTML = '这里是二维码' + e; |
| break; |
| } |
| hModule[0].style.display = 'block'; |
| } |
| |
| |
| |
| |
| |
| |
| |
| function hShow() { |
| hModule[0].style.display = 'none'; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~