策展规划组 黄河流速edit icon

Fork(复制)
下载
嵌入
BUG反馈
index.html
现在支持上传本地图片了!
index.html
            
            <!DOCTYPE html>
<html lang="en">
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>诗酒长廊·将进酒数字艺术装置</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script>
    <style>
        :root {
            --wine-color: #c23531;
            --river-color: #2f4554;
            --hair-color: #61a0a8;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
        .control-panel {
            background: rgba(255,255,255,0.9);
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 15px rgba(0,0,0,0.1);
            margin-bottom: 30px;
        }
        .slider-group {
            margin: 15px 0;
        }
        .visual-container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 20px;
            height: 60vh;
        }
        .poem-chart {
            background: rgba(255,255,255,0.8);
            border-radius: 8px;
            padding: 15px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>《将进酒》数字意象长廊</h1>
        
        <!-- 后台数据控制面板 -->
        <div class="control-panel">
            <div class="slider-group">
                <label>酒意浓度:<input type="range" id="wine" min="0" max="100" value="50"></label>
                <span id="wineValue">50%</span>
            </div>
            <div class="slider-group">
                <label>黄河流速:<input type="range" id="river" min="0" max="100" value="70"></span>
            </div>
            <div class="slider-group">
                <label>白发比例:<input type="range" id="hair" min="0" max="100" value="40"></span>
            </div>
        </div>

        <!-- 前台可视化展示 -->
        <div class="visual-container">
            <div id="wineChart" class="poem-chart"></div>
            <div id="riverChart" class="poem-chart"></div>
            <div id="hairChart" class="poem-chart"></div>
        </div>
    </div>

<script>
// 数据存储对象
let poemData = {
    wine: {
        current: 50,
        history: [30, 45, 50]  // 情感演变数据
    },
    river: {
        current: 70,
        history: [20, 50, 70]
    },
    hair: {
        current: 40,
        history: [10, 25, 40]
    }
};

// 初始化图表
const wineChart = echarts.init(document.getElementById('wineChart'));
const riverChart = echarts.init(document.getElementById('riverChart'));
const hairChart = echarts.init(document.getElementById('hairChart'));

// 通用图表配置
const baseOption = {
    tooltip: { trigger: 'axis' },
    xAxis: { 
        type: 'category',
        data: ['初现', '发展', '高潮'] 
    },
    yAxis: { max: 100 },
    series: [{
        type: 'line',
        smooth: true,
        showSymbol: false
    }]
};

// 更新图表函数
function updateCharts() {
    const updateChart = (chart, color, data) => {
        chart.setOption({
            ...baseOption,
            color: [color],
            series: [{
                ...baseOption.series[0],
                data: data.history.concat(data.current),
                areaStyle: { color: color + '20' }
            }]
        });
    };

    updateChart(wineChart, '#c23531', poemData.wine);
    updateChart(riverChart, '#2f4554', poemData.river);
    updateChart(hairChart, '#61a0a8', poemData.hair);
}

// 实时数据绑定
document.querySelectorAll('input[type="range"]').forEach(slider => {
    slider.addEventListener('input', function() {
        const type = this.id;
        const value = parseInt(this.value);
        
        // 更新数据
        poemData[type].current = value;
        poemData[type].history = updateHistory(poemData[type].history, value);
        
        // 更新显示
        document.getElementById(type + 'Value').textContent = value + '%';
        updateCharts();
    });
});

// 历史数据处理
function updateHistory(arr, newValue) {
    const newArr = [...arr.slice(1), newValue];
    return newArr.map(v => Math.min(v + Math.random()*10-5, 100)); // 添加自然波动
}

// 初始化渲染
updateCharts();

// 数据保存/加载
function saveData() {
    localStorage.setItem('poemConfig', JSON.stringify(poemData));
}
function loadData() {
    const saved = localStorage.getItem('poemConfig');
    if(saved) poemData = JSON.parse(saved);
}
</script>
</body>
</html
  </html>
  
        
编辑器加载中
预览
控制台