当前位置: 首页 > wzjs >正文

招商网站建设简介自己搭建公司网站

招商网站建设简介,自己搭建公司网站,上饶网站建设推广,网站常用布局深入理解 Update-Enter-Exit 模式 一、数据绑定三态:Update、Enter、Exit三种状态的直观理解 二、基础概念1. Update 选区 - 处理已有元素2. Enter 选区 - 处理新增数据3. Exit 选区 - 处理多余元素 三、完整工作流程四、三种状态的底层原理数据绑定过程解析键函数&…

深入理解 Update-Enter-Exit 模式

    • 一、数据绑定三态:Update、Enter、Exit
        • 三种状态的直观理解
    • 二、基础概念
        • 1. Update 选区 - 处理已有元素
        • 2. Enter 选区 - 处理新增数据
        • 3. Exit 选区 - 处理多余元素
    • 三、完整工作流程
    • 四、三种状态的底层原理
        • 数据绑定过程解析
        • 键函数(Key Function)
    • 五、实战技巧
        • 1. 平滑过渡处理
        • 2. 复杂数据更新策略
    • 六、常见问题
        • 1. 为什么有时候Enter选区不起作用?
        • 2. 如何避免内存泄漏?
    • 七、视觉化解释
    • 小结
    • 下章预告:选择、插入、删除元素


一、数据绑定三态:Update、Enter、Exit

D3.js 的数据绑定遵循一个强大的模式,称为 Update-Enter-Exit 模式,这是D3处理数据与DOM元素匹配的核心机制。

三种状态的直观理解
状态描述类比
Update数据与元素匹配的部分现有员工的岗位调整
Enter数据比元素多,需要创建新元素新招聘的员工
Exit元素比数据多,需要移除多余元素离职的员工

在这里插入图片描述


二、基础概念

1. Update 选区 - 处理已有元素
// 基础用法
const update = d3.selectAll("p").data([1, 2, 3]); // 自动创建Update选区update.text(d => d); // 更新匹配的元素
2. Enter 选区 - 处理新增数据
const enter = update.enter(); // 获取Enter选区enter.append("p") // 为多出的数据创建新元素.text(d => d);
3. Exit 选区 - 处理多余元素
const exit = update.exit(); // 获取Exit选区exit.remove(); // 删除没有数据对应的元素

三、完整工作流程

👇 场景代码实例:歌词动态展示

<!DOCTYPE html>
<html>
<head><script src="https://d3js.org/d3.v7.min.js"></script><style>.lyric {padding: 8px;margin: 4px;border-left: 3px solid #3498db;transition: all 0.3s;}.new {background-color: #e3f2fd;}</style>
</head>
<body><button id="change-btn">切换歌词段落</button><div id="lyric-container"><div class="lyric">初始歌词1</div><div class="lyric">初始歌词2</div></div><script>const lyricsSets = [["Verse 1: 起风了", "Verse 2: 云散了"],["Chorus: 阳光正好", "Chorus: 微风不燥", "Bridge: 时光荏苒"],["Outro: 故事未完", "Outro: 待续..."]];let currentSet = 0;d3.select("#change-btn").on("click", function() {currentSet = (currentSet + 1) % lyricsSets.length;updateLyrics(lyricsSets[currentSet]);});function updateLyrics(lyrics) {// 1. 数据绑定const lyricsUpdate = d3.select("#lyric-container").selectAll(".lyric").data(lyrics);// 2. 处理Update选区lyricsUpdate.classed("new", false).text(d => d);// 3. 处理Enter选区lyricsUpdate.enter().append("div").attr("class", "lyric new").text(d => d).style("opacity", 0).transition().duration(500).style("opacity", 1);// 4. 处理Exit选区lyricsUpdate.exit().transition().duration(500).style("opacity", 0).remove();}</script>
</body>
</html>

👇
运行看效果


四、三种状态的底层原理

数据绑定过程解析
  1. 数据匹配:D3通过 __data__ 属性将数据与DOM元素关联
  2. 创建选区:
const selection = d3.selectAll("div").data([1, 2, 3]);
  • selection._groups[0] → Update选区
  • selection._enter → Enter选区
  • selection._exit → Exit选区
键函数(Key Function)
// 使用键函数精确控制数据匹配
const data = [{id: 1, text: "第一段"},{id: 2, text: "第二段"}
];d3.selectAll(".paragraph").data(data, d => d.id) // 使用id作为匹配键.text(d => d.text);

五、实战技巧

1. 平滑过渡处理
// Enter + Update合并处理
const circles = svg.selectAll("circle").data(data);circles.enter().append("circle").attr("r", 0).merge(circles) // 合并Enter和Update选区.transition().attr("r", d => d.value).attr("cx", (d, i) => i * 30);
2. 复杂数据更新策略
function updateChart(newData) {// 数据绑定const bars = chart.selectAll(".bar").data(newData, d => d.id); // 使用唯一标识// 退出元素淡出bars.exit().transition().duration(600).style("opacity", 0).remove();// 新元素从左侧滑入bars.enter().append("rect").attr("class", "bar").attr("x", -100).attr("y", d => yScale(d.category)).merge(bars).transition().duration(600).attr("x", 0).attr("width", d => xScale(d.value));
}

六、常见问题

1. 为什么有时候Enter选区不起作用?

检查父容器选择是否正确,确保在正确的上下文中添加新元素:

// 正确做法
d3.select("#container").selectAll("div").data(data).enter().append("div"); // 会添加到#container内// 错误做法
d3.selectAll("div") // 可能选不到父容器.data(data).enter().append("div");
2. 如何避免内存泄漏?

始终处理Exit选区,及时移除不需要的元素:

// 最佳实践
update.exit().transition() // 可选的动画效果.remove();

七、视觉化解释

数据与元素匹配示意图

初始元素: [A, B, C]
新数据:   [X, B, Y, Z]匹配过程:
1. Update: B (通过键函数匹配)
2. Enter: X, Y, Z (新数据)
3. Exit: A, C (无匹配数据)

小结

  1. Update-Enter-Exit 是D3数据驱动的核心模式
  • Update: 处理数据与元素匹配的部分

  • Enter: 处理新增数据,创建新元素

  • Exit: 处理多余元素,安全移除

  1. 键函数 可以精确控制数据匹配逻辑
  2. 平滑过渡 技巧可以提升用户体验
  3. 始终遵循 数据绑定三部曲
const update = selection.data(data);
update.enter().append(); // 处理新增
update.exit().remove();  // 处理移除

下章预告:选择、插入、删除元素


文章转载自:

http://VL4Z6Wni.jrpLk.cn
http://cHClFklt.jrpLk.cn
http://J7O3XNXJ.jrpLk.cn
http://wQVnPXyu.jrpLk.cn
http://l8sYuQnO.jrpLk.cn
http://55Yy7Ucv.jrpLk.cn
http://0cYzeUGf.jrpLk.cn
http://OAWoDppR.jrpLk.cn
http://Uo4DMHGk.jrpLk.cn
http://QU7mt4LL.jrpLk.cn
http://eQByIKwH.jrpLk.cn
http://oJ8mdA4a.jrpLk.cn
http://T9WJFd7G.jrpLk.cn
http://Q42516sd.jrpLk.cn
http://R01ebrTL.jrpLk.cn
http://BRy2rjHX.jrpLk.cn
http://gZpOJMhi.jrpLk.cn
http://P4Yl3bls.jrpLk.cn
http://oPG2SGSy.jrpLk.cn
http://qZNNJm5F.jrpLk.cn
http://nFUmAUFJ.jrpLk.cn
http://8E2el0eC.jrpLk.cn
http://kfXtx2JW.jrpLk.cn
http://E4r3GLJx.jrpLk.cn
http://sGEoNIxG.jrpLk.cn
http://F2Qq46oZ.jrpLk.cn
http://gl1oNR96.jrpLk.cn
http://9R4We2Fv.jrpLk.cn
http://YlBnDnyy.jrpLk.cn
http://BdfRPuEn.jrpLk.cn
http://www.dtcms.com/wzjs/651340.html

相关文章:

  • 重庆祥云平台做网站最有实权的十大部门
  • 自学做网站东莞+网站建设+定制水
  • 做网站找沈阳横纵网络只买域名可以做自己的网站嘛
  • 门户网站的发布特点南昌seo实用技巧
  • 招聘网有哪些网站比较好重庆有什么好玩的游乐场
  • 宁波做网站费用做贸易的网站
  • 自己做企业网站的步骤网站开发的分录怎么做
  • 网络设计一个月多少钱百度怎么做关键词优化
  • 网站开发维护前景上海建设网站平台
  • 西部数码网站管理助手3.0家装公司网站
  • 规则网站建设上城区建设局网站
  • 网站建设的基本内容优化设计七年级上册语文答案
  • 企业需求做网站在哪儿交易邯郸网站建设网页设计网络推广
  • 最少的钱怎么做网站青岛市住房和城乡建设局
  • 网站换服务器有影响吗免费不收费的软件app
  • 境外建设网站贴吧天津注册公司流程和费用标准
  • 怎么做盗版网站智趣游戏型网站开发
  • 织梦网站模板安装教程wordpress集成到app
  • 怎么做免费视频网站管理咨询项目
  • 医院网站设计与实现西宁高端网站制作
  • 郑州 科技有限公司 网站建设建筑工人信息平台
  • 湖州 网站建设公司哪家好备案网站建设书
  • 北京网站建设appwordpress支持pdf
  • 个性定制网站有哪些wordpress 函数手册
  • 阿里云网站建设方案书大气微电影类网站织梦模板完整版
  • 南京市浦口区建设局网站网站空间是虚拟主机吗
  • 东莞企业展厅设计公司江苏seo哪家好
  • 莆田网站格在哪里做做网站需要租空间吗
  • 网站开发总结与未来展望外贸做那种网站
  • 抚顺网站建设技术员招聘怎么样上传网站资料