You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript实现的文字冒险游戏文本元素中插入图片

第一步:修正HTML图片标签

你之前用的<image>是非标准标签,换成标准<img>并添加id方便控制:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link href="OP1.0c.css" rel="stylesheet">
    <script defer src="OP1.0j.js"></script>
    <title>Text Adventure</title>
    <style>
        /* 新增样式,默认隐藏图片,需要显示时再打开 */
        #story-image {
            display: none;
            max-width: 100%;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <div id="story"></div>
        <!-- 把图片移到文本容器里,和文本同步展示,也可以保留原来的位置 -->
        <img id="story-image" alt="剧情图片">
    </div>
    <div id="option-buttons" class="btn-grid">
        <button class="btn">Option 1</button>
        <button class="btn">Option 2</button>
        <button class="btn">Option 3</button>
        <button class="btn">Option 4</button>
    </div>
</body>
</html>

第二步:调整textNodes数据结构

不需要用数组存图片,直接在每个文本节点下加可选的imageUrl字段即可:

const textNodes = [
    {
        id: 1,
        text: "I did it all for you.",
        // 有需要展示的图片就填url,不需要就不写这个字段
        imageUrl: "https://images.unsplash.com/photo-1544526226-d4568090ffb8?ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8aGQlMjBpbWFnZXxlbnwwfHwwfHw%3D&ixlib=rb-1.2.1&w=1000&q=80",
        options: [
            {
                text: '>>',
                nextText: 2,
            }
        ]
    },
    {
        id: 2,
        text: "这段剧情没有配图,图片会自动隐藏",
        options: [
            {
                text: '返回开头',
                nextText: 1,
            }
        ]
    }
]

第三步:修改JS的节点切换逻辑

在你原来负责切换文本的showTextNode函数里,新增图片控制的代码:

// 先提前拿到图片DOM元素
const storyImageElement = document.getElementById('story-image')
const textElement = document.getElementById('story')
const optionButtonsElement = document.getElementById('option-buttons')

function showTextNode(textNodeId) {
    const textNode = textNodes.find(node => node.id === textNodeId)
    textElement.innerText = textNode.text
    
    // 新增图片处理逻辑
    if (textNode.imageUrl) {
        storyImageElement.src = textNode.imageUrl
        storyImageElement.style.display = 'block'
    } else {
        storyImageElement.style.display = 'none'
    }

    // 下面是你原来处理选项按钮的逻辑,不用改
    while (optionButtonsElement.firstChild) {
        optionButtonsElement.removeChild(optionButtonsElement.firstChild)
    }
    textNode.options.forEach(option => {
        const button = document.createElement('button')
        button.innerText = option.text
        button.classList.add('btn')
        button.addEventListener('click', () => showTextNode(option.nextText))
        optionButtonsElement.appendChild(button)
    })
}

// 页面加载完成后初始化调用
document.addEventListener('DOMContentLoaded', () => {
    showTextNode(1)
})

按照上面三步修改完就能实现图片随文本、按钮同步切换显示/隐藏的效果。

内容的提问来源于stack exchange,提问作者crosz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:48:04