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

网站构建流程专门做单页的网站

网站构建流程,专门做单页的网站,东莞做营销型网站,郑州系统开发diff算法 snabbdom: h函数:产生虚拟节点 第一个参数:为标签,第二个:属性 ,第三个:值 一个虚拟dom的属性:让虚拟节点上树,即生成真实dom //h函数//vnode:把参数返回成一…

diff算法

snabbdom:

h函数:产生虚拟节点

第一个参数:为标签,第二个:属性 ,第三个:值

一个虚拟dom的属性:让虚拟节点上树,即生成真实dom

//h函数//vnode:把参数返回成一个对象export default function(sel,data,children,text,elm){const key=data.keyreturn {sel,data,children,text,elm}
}import vnode from './vnode.js'//低配版本的diff,必须接受三个参数
// h('div',{},'文字'/[]/h{})export default function h(a,b,c){if(arguments.length<3){return ;}if(typeof c =='string'||typeof c=='number'){return vnode(a,b,undefined,c,undefined)}if(Array.isArray(c)){let children=[]for(let i=0;i<c.length;i++){if(!(typeof c[i]=='object'&& c[i].hasOwnProperty(sel))){return }children.push(c[i])}return vnode(a,b,children,undefined,undefined)}if(typeof c=='object' &&c.hasOwnProperty(sel)){let children=[c]return vnode(a,b,children,undefined,undefined)}else{return }}h('div',{},'文字')

diff算法:

//patch函数:

过程:

先判断老节点是否为虚拟节点,若不是,把它转化为虚拟节点,若是,则判断旧vnode和新的vnode是否为同一节点,若是进行精细比较,若不是,则直接暴力删除添加

(1):如何定义 是相同节点:

        新旧节点的key相同和新旧节点的选择器相同

(2):暴力删除旧的,插入新节点

        创建子节点时,递归创建

        

const myvnode1=h('h1',{},'你好')
const container=document.getElementById('container')function patch(oldvnode,newnode){if(oldnode.sel==''||oldnode.sel=='undefioned'){oldvonde=vnode(oldvnode.tagname.toLowerCase(),{},[],undefined,oldvnode)}if(oldvnode.key==newvnode.key&&oldvnode.sel===newvnode.sel){//判断新旧是否为一个对象patchVnode(oldVnode,newvnode)}else{let newdom=createElement(newvnode)//插入oldVonde.elm.parentNode.insertBefore(newdom,oldvnode.elm)oldvnode.ele.parentNode.removeChild(oldvnode);}
}function patchvnode(oldvnode,newvnode){if(oldvnode==newvnode) return if(newvnode.text!=='undefined' &&newvnode.children.length==0){if(newvnode.text!=oldvnode.text){oldvnode.elm.innerText=newvnode.text}}else{//判断老的有没有childrenif(oldvnode.children!=='undefined'&&oldvnode.children.length!==0){updateChilden(oldvnode.elm,oldvnode.children,newvnode.children)}else{//老的没有,新的有oldvnode.elm.innerHTML=''for(let i=0;i<newvnode.chileren.length;i++){let dom=createElement(newvnode.children[i])oldvnode.ele.appChildren(dom)}}}
}function createElement(vnode){//创建domlet domnode=document.createElement(vnode.sel)if(vnode.text!=''&&(vnode,children=='undefined)){domNode.innerText=vnode.text;}else if(Array.isArray(vnode.children)&&vnode.children.length>0){//内部是子节点,要进行递归for(let i=0;i<vnode.children.length;i++){let ch=vnode.childrfen[i]let chdom=createElement(ch)domnode.appendChild(chdom)}}vnode.elm=domnodereturn vnode.elm}function updateChilden(parentelm,oldch,newch){let oldstart=0;let newstart=0;let oldend=oldch.length-1;let newend=newch.length-1;let oldsnode=oldch[0]let oldenode=old[oldend]let newsnode=newch[0]let newenode=newch[newend]while(oldstart<=oldend&&newstart<=newend){if(checksamenode(oldsnode,newsnode)){patchvnode(oldsnode,newsnode)oldsnode=oldch[++oldstart]newsnode=newch[++newstart]}//新后和旧后else if(checksamenode(oldenode,newenode)){patchvnode(oldenode,newenode)oldenode=oldch[--oldend]newenode=newch[--newend]}else if(checksamenode(oldsnode,newenode)){patchvnode(oldsnode,newenode)parentelm.insertBefore(oldsnode.elm,oldenode.elm.nextSibling)oldsnode=oldch[++oldstart]newenode=newch[--newend]}else if(checksamenode(oldenode,newsnode)){patchvnode(oldenode,newsnode)parentelm.insertBefore(oldenode.elm,oldsnode.elm)oldenode=[--oldend]newsnode=[++newstart]}else{}}//剩余节点if(newstart<=newend){for(let i=newstart,i<=newend;i++){parentelm.insertBefore(createElement(newch[i]),newch[i+1].elm)}}else if(oldstart<oldend){for(let i=oldsrart,i<=oldend;i++){parentelm.removeChild(oldch[i])}}}function checksamenode(a,b){return a.sel==b.sel&&a.key==b.key
}

diff算法优化:

虚拟dom变为真实dom

http://www.dtcms.com/wzjs/577580.html

相关文章:

  • 简单flash网站模板巢湖seo推广选哪家
  • wordpress用的什么主题查询win10优化大师是官方的吗
  • 承德房地产网站建设wordpress内链
  • wordpress建站教程第六节广州做手机网站建设
  • 做网站有用吗东莞哪些地方是风险区
  • 贷款网站怎么做的制作广告图片的软件app
  • 网站建设小程序开发公司长沙制作网站软件
  • 榆林 网站建设郴州seo排名
  • 网站个人备案步骤wordpress关闭验证码
  • 企业宣传ppt模板博客优化网站seo怎么写
  • 做数据分析好看的网站手袋东莞网站建设
  • 如何自己编写网站怎样制作网页新手自学入门
  • 那些公司做网站比较厉害长治建立公司网站的步骤
  • wordpress建站属于前端基于python的网站开发
  • 网站后台界面品牌网站响应式网站有哪些
  • 杭州的网站建设公司qq邮箱咋与网站绑定提醒
  • 如皋建设网站网站建设公司兴田德润在那里
  • 网站怎么做黑链接同步显示一个wordpress
  • 那个网站平台可以做兼职网站备案账号是什么
  • 成都网站seo诊断python建设网站实例
  • 企业定制网站建设公司在线生成手机网站
  • 活动网站商城网站建设哪个公司好
  • 推荐自助建网站平台东莞百度推广教程
  • wordpress文章名称背景官方进一步优化
  • 全国的网站建设北京环保网站建设
  • 南宁网站设计方案网站建设怎么估算费用和报价
  • 韩国网站模板下载地址风险地区查询最新
  • 百度做网站价格邢台网站建设行情
  • 树莓派做网站服务器怎样网站设计计划书
  • 金华企业网站建站模板如何免费建设一个网站