原生的DOM操作

虚拟DOM和diff算法

虚拟dom就是用对象的方式区代真实的dom操作。

当页面打开时浏览器解析HTML元素,构建一个dom树,将状态保存起来,在内存中模拟dom操作,又会生成一个dom树,两个进行比较,根据diff算法找出不同的地方,之渲染一次不同的地方

diff算法:就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新Dom

JS中所有全局都是window的

window的作用:在封闭空间中声明一个全局的变量
全局变量和函数都属于window

javascript

 由什么东西组成?
 ECMAScript 核心解释器(ES5和ES6)
 DOM BOM
提供最基本的功能比如:12+5  var a = 12; function show(){}
兼容性:完全兼容。

DOM 文档对象模型 Document Object Model

就是document 操作页面的。
获取元素,修改样式,创建元素
兼容性:很好,有不兼容的,但是可以解决。

节点=== 标签 ===元素

DOM树 页面结构关系

    获取子节点
        oEle.children
            只能获取一层
    获取父节点
        oEle.parentNode
            获取结构父级
        oEle.offsetParent
            获取定位父级
    获取兄弟节点
        获取上一个兄弟节点
            oEle.previousElementSibling
        获取下一个兄弟节点
            oEle.nextElementSibling
        注意:不兼容低版本IE浏览器
    获取首尾子节点
        首子节点
            aEle[0]
            oPrent.firstElementChild
        尾子节点
            aEle[aEle.length-1]
            oPrent.lastElementChild

    获取标签名
        oEle.tagName

创建
        document.createElement(‘标签名’);

插入
        后面添加
        父级.appendChild(要添加的子级)
        某一个子级前面插入
        父级.insertBefore(要插入的元素,插入谁之前);
删除
        父级.removeChild(要删的元素);

拖拽 drag

            onmousedown             鼠标按下
                获取鼠标在div中的位置
                var disX = ev.pageX-oDiv.offsetLeft
                var disY = ev.pageY-oDiv.offsetTop
            onmousemove             鼠标移动
                改变div的left和top
                oDiv.style.left = ev.pageX-disX+'px';
                oDiv.style.top = ev.pageY-disY+'px';
            onmouseup               鼠标抬起
                把onmousemove干掉
                把onmouseup干掉

    
        问题一:
            鼠标没点就懂了
            解决:
                把onmousemove放在onmousedown里面
        问题二:
            鼠标移动过快,就移出div了
            解决:
                1.把div放大        不靠谱,设计和产品会找你拼命
                以下方法靠谱
                把onmousemove事件加给document
        问题三:
            鼠标抬起依然能动
            解决:
                正在onmouseup中把onmousemove干掉
        问题四:
            鼠标拖拽的时候,会选中页面内容
            解决:
                在onmousedown中把默认事件阻止
                return false;   注意一定要放在最后
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奔波的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值