ht html的渲染元素像素精确、像素精准,是否选可选中的逻辑!像素精确、可否选中,与事件传递到dom的关系

本文探讨了在渲染元素图标及图纸中使用像素精确功能的影响,包括如何影响元素的选中状态与DOM事件的传递。文章还介绍了在不同设置下事件冒泡的行为,以及JavaScript中DOM元素的监听和刷新机制。

1、图标及图纸都勾选像素精确,才以像素精确;一个不勾选就是不精确。并且图标内设置优先!

①、染元素图标上不勾选像素精确,拖到图纸上不管是否勾选像素精确,都可选中,但是运行后点击事件不能传递到dom!

②、渲染图标上勾选了像素精确后,拖到图纸上要去掉像素精确才能选中,而且运行后事件就能传递到dom里!

2、像素精确下,选中是看canvas上有绘制到点,否则就是以图标外框区域算。

①、“像素精准”时,拓扑中判断选中的依据是,点击位置是否有图形,点击位置上的像素点是否有绘制的图形。

②、不勾选“像素精准”, 那判断是否选中的依据是图标的rect,只要在这个范围内点击就能识别到该图元。

总结:渲染元素图标中、以及拖放到的图纸中,同时都勾选“像素精确”,才能让事件到渲染元素的dom里!

ht 调用是renderHTML是很密集的,只要节点刷新就会走一次这个方法,比如页面刷新就执行了 3 次

第一次进来 div.innerHTML = '<div id="test"></div>'

你对 这个 div 加了监听没错

但是马上第二次执行就来了,又执行了一次 div.innerHTML = '<div id="test"></div>' ,这个时候相当于 div 重新创建了,而你监听的代码已经过了,不会再次监听

所以我说第一次加监听的对象已经变了,

 div.innerHTML = '<div id="test"></div>' 是不会判断判断新旧值一样就不去更新的,只要赋值,就会更新。不论是否精确、是否选中,事件都会到dom!事件是否能捕获,主要看dom的元素会不会在渲染元素中刷新被重新赋值,同时没有再执行js来绑定事件:

①、像素精确下渲染元素不可选中,但是事件可以冒泡到渲染元素!

②、不勾选像素精确,图元可以选中,事件也会捕获到dom元素!

JavaScript
if (!cache.htmlView) {
    var div = cache.htmlView = document.createElement('div');
    div.style.position = 'absolute';
    div.style.overflow = 'hidden';
    div.style.setProperty("box-sizing", "border-box", null);
    div.style.setProperty("-moz-box-sizing", "border-box", null);
    data.div = div;
    div.addEventListener('mousedown', function(e){
        e.preventDefault();
        e.stopPropagation();        //①、都像素精确,那么3D底图会相应事件,元素dom不会阻挡,这里加上冒泡会拦截事件!
//②、如果没有勾选像素精确,自然不会传递到3D底图,这里也不需要加上这句阻止冒泡!2D图标已经获取到事件并且消化掉了!
//在某些场景,比如想渲染元素多余的透明区域不要阻挡事件,让2D、3D场景都能交互,那么要像①中都设置像素精确,同时不能阻止冒泡!
    }, false);
    div.layoutHTML = function() {
        gv.layoutHTML(data, div);
        if(data.a('div.debug')) console.log('Div is layout');
    };
    div.onHTMLAdded = function() {
        if(data.a('div.debug')) console.log('Div is added');
    };
    div.onHTMLRemoved = function() {
        if(data.a('div.debug')) console.log('Div is removed');
    };

    //放置dom,并且监听事件
    cache.htmlView.innerHTML = data.a('div.content');
    importCssJs.loadArr('js',data)
    importCssJs.loadArr('css',data)
}
cache.htmlView.style.color = data.a('div.color');
cache.htmlView.style.padding = data.a('div.padding') + 'px';
cache.htmlView.style.background = data.a('div.background');
return cache.htmlView;

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IOTOS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值