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

德国 网站建设河南网站建设公

德国 网站建设,河南网站建设公,开发公司冬季安全生产工作方案,简述电子商务网站建设的基本要求6文章目录前言一、事件未绑定的原因二、如何处理原生template标签总结前言 需要原生Javascript three.js的数据标注平台加入Vue框架. 本来挺顺利的, 我直接在mounted周期做了初始化, 然后剩下的操作还是交给JavaScript文件执行, 最后发现里面有很明显的事件触发问题. 一、事件… 文章目录前言一、事件未绑定的原因二、如何处理原生template标签总结前言 需要原生Javascript three.js的数据标注平台加入Vue框架. 本来挺顺利的, 我直接在mounted周期做了初始化, 然后剩下的操作还是交给JavaScript文件执行, 最后发现里面有很明显的事件触发问题. 一、事件未绑定的原因 找了整一天也没找着这事件为什么触发不了, 在这中间还把代码简化掉只留下事件触发逻辑执行了好几次. 第二天意识到原生代码里的template可能有问题, 在原生环境中template标签内部的东西是不会渲染出来的, 虽然解析器在加载页面的时候确实会处理这部分代码片段. 取自MDN: 将模板视为一个可存储在文档中以便后续使用的内容片段. 虽然解析器在加载页面时确实会处理 template 元素的内容, 但这样做只是为了确保这些内容有效, 元素内容不会被渲染.但是放到vue里(这里特指Vue2), 如果template标签在Vue实例绑定的元素内部存在(即不是根元素外的那个template), 那么在DOM中该template的子元素是正常存在并显示的, 我以前经常拿template做v-for容器. 然后联想前面几次结构简化demo, 大概不是没绑定而是绑错了目标. 这个原生项目的HTML代码很多, 所以作者做了一些优化, 在需要某个模块的时候才将其appendChild加入DOM, 其余的时候这些模块都被放在template标签内, 而vue把这些东西都出来渲染了, 那么初始化的时候事件大概率就已经被绑到了template里面的那些代码里, 等到这些模块被appendChild的时候, 事件绑定已经结束了, 所以appendChild是将没有事件绑定的DOM加到了正确位置. 我在控制台把视口里的DOM都删掉之后发现下面还有一层被挤出去的DOM, 那是有事件绑定的DOM. 的确是这样. 二、如何处理原生template标签 我是想把他appendChild这个优化留下来的, 我觉得在原生环境里能有这种封装的思想挺好, 不过看起来不好办… 我打算把原来那几个模块抽到组件里, 提前把组件写到后面会插入到的位置, 然后用这种结构控制显示隐藏: template v-ifisShowaaa/aaa /template这样挺好的其实, 如果这个项目的结构再简单一点我绝对会用组件方案的, 结果我发现我要传回调函数, 传4层干扰到3个很重要的类, 只是为了在合适的时机回调改变组件的状态, 我觉得很糟糕. 而且, 如果后面会有…或者现在就有我没有察觉到的需求是增加不定数量个这种模块, 我把组件直接注册到这里用就算是写死了, 恐怕会不好改. 需要这种操作的组件有三个, 我想起来学后端渲染的时候给前端发的html模板, 那…能不能把这些html转成字符串存到一个单独的js文件, 然后在需要的地方导入后appendChild呢? 这样对源代码改动最小, 不用改appendChild, 也让html文档那边更简洁一些. export const batchEditorToolsTemplate div idbatch-editor-tools-wrapper classnon-selectablediv idbatch-editor-toolsdiv classmenu-button idexit退出/divdiv classmenu-button idprev上一页/divdiv classmenu-button idnext下一页/divdiv classmenu-button idtrajectory轨迹/divdiv classmenu-button idauto-annotate自动/divdiv classmenu-button idauto-annotate-translate-only自动无旋转/divdiv classmenu-button idinterpolate插值/divdiv classmenu-button idreload重新加载/divdiv classmenu-button idfinalize定稿/div/div/div然后用这个工具函数把appendChild替换掉: function analyseDomStr(str, target) { // dom字符串, 目标元素const template document.createElement(template);template.innerHTML str;target.appendChild(template.content); }这样性能不如之前好, 不过——事件绑定看起来没什么问题了. 本来想用Document.createDocumentFragment()API的, 所以初版就写成这样了: function analyseDomStr(str, target) { // dom字符串, 目标元素const fragment document.createDocumentFragment();const template document.createElement(template);template.innerHTML str;fragment.appendChild(template.content); // 此处还是要按照原生template的那套来的, 这个template不会被vue特殊解析target.appendChild(fragment); }很遗憾并不能直接使用innerHTML向DocumentFragment内写入DOM, 仍旧需要appendChild来完成, 所以完全没有必要创建DocumentFragment, 我认为这个API更加适合用于对频繁DOM操作进行优化, 比如用户点击按钮后就要插入100条tips, 那就更适合先使用这个API生成一个文档内容分段, 然后把成品分段加入DOM. 这个初版和旧版也都是回流一次… 因为文档片段存在于内存中, 并不在 DOM 树中, 所以将子元素插入到文档片段时不会引起页面回流(对元素位置和几何上的计算). 因此, 使用文档片段通常会带来更好的性能.完全可以把: const ul document.querySelector(ul); const li document.createElement(li);for (let i 0; i 100; i) {ul.appendChild(li); }这种会引起页面频繁回流的写法 改成 const ul document.querySelector(ul); const li document.createElement(li); const fragment document.createDocumentFragment();for (let i 0; i 100; i) {fragment.appendChild(li); } ul.appendChild(fragment);这样页面只会在fragment被appendChild后回流一次. 总结 …
http://www.dnsts.com.cn/news/95923.html

相关文章:

  • 青岛网站推广哪家便宜做企业网站需要准备什么
  • 建设一个个人网站不需要wordpress 显示访客数
  • 备案中又需要建设网站如何做网站推广营销
  • 关键词优化简易长沙自动seo
  • 沈阳网站建设企业六安网站建设推广
  • 男和男人怎么做那个视频网站百度网盘 做网站图床
  • 杭州做肉松饼的网站有多少家济南做网站哪家好怎么选
  • 网站的建设步骤包括什么公司网页设计论文题目大全
  • 北京网站优化实战宁波seo推广优化
  • 上海电子商务网站开发北京 网站建设托管公司
  • 经典重庆论坛畅谈重庆当阳seo外包
  • 网站建设纯免费官网商城网站一般用什么做二次开发
  • 网站营销力吉安律师网站建设
  • 建设银行上虞支行网站wordpress瀑布流展示插件
  • 布吉做网站的公司北京海淀区官网
  • wordpress修改主题文件夹专业网站优化推广
  • 凡科做网站怎么样网站的系统建设方式有哪些方面
  • 马鞍山的网站建设公司海丰网站建设
  • 净化网络环境网站该怎么做关键词全网搜索工具
  • 新农村建设评论网站大型旅游网站
  • 手机软件开发外包昆明搜索引擎的关键词优化
  • 做公司网站客户群体怎么找国际新闻报道
  • 一级域名做网站制作wordpress博客app
  • 网站建设栏目分析服饰网站新闻建设
  • app制作简易网站做游戏模板下载网站有哪些
  • linux 做网站宁波网络公司设计装修
  • 合肥网站制作价格游戏代理加盟
  • 泰州网站制作工具京东优惠券网站怎么做
  • 经营阅读网站需要怎么做下载百度免费版
  • ps做网站教程三亚网站建设哪家专业