|
|

楼主 |
发表于 2022-12-27 08:21
|
显示全部楼层
二楼完整代码
- <style>
- #papa {
- margin: auto;
- width: 600px;
- height: 460px;
- border: 1px solid olive;
- position: relative;
- }
- #papa::before, #papa::after {
- position: absolute;
- content: '伪元素1';
- top: 100px;
- left: 100px;
- width: 100px;
- height: 100px;
- border: 1px solid silver;
- padding: 10px;
- box-sizing: content-box;
- }
- #papa::after {
- content: '伪元素2';
- left: 260px;
- }
- #clickMsg { position: absolute; top: 20px; left: 20px; }
- </style>
- <div id="papa">
- <div id="clickMsg">点击消息 ...</div>
- </div>
- <script>
- let hover = 2;
- let res = ['伪元素1','伪元素2','元素其它区域'];
- papa.onmousemove = (e) => {
- let v1 = pseVal(papa,'::before'), v2 = pseVal(papa,'::after');
- let x1 = parseInt(v1.left), y1 = parseInt(v1.top), w1 = parseInt(v1.top), h1 = parseInt(v1.height), p1 = parseInt(v1.padding), b1 = parseInt(v1.border),
- x2 = parseInt(v2.left), y2 = parseInt(v2.top), w2 = parseInt(v2.width), h2 = parseInt(v2.height), p2 = parseInt(v2.padding), b2 = parseInt(v2.border);
- let width1 = x1 + w1 + (v1['box-sizing'] === 'border-box' ? 0 : (b1+p1)*2),
- width2 = x2 + w2 + (v2['box-sizing'] === 'border-box' ? 0 : (b2+p2)*2),
- height1 = y1 + h1 + (v1['box-sizing'] === 'border-box' ? 0 : (b1+p1)*2),
- height2 = y2 + h2 + (v1['box-sizing'] === 'border-box' ? 0 : (b2+p2)*2);
- let a1 = isOver(e, x1,y1,width1, height1), a2 = isOver(e, x2, y2, width2, height2);
- hover = a1 || a2 ? (a1 ? 0 : 1) : 2;
- papa.style.cursor = (hover < 2) ? 'pointer' : 'default';
- };
- papa.onclick = (e) => clickMsg.innerText = '点击了' + res[hover];
- let isOver = (e,x,y,w,h) => e.offsetX > x && e.offsetX< w && e.offsetY > y && e.offsetY < h;
- let pseVal = (ele,pseudo) => {
- let items = { left: '', top: '', width: '', height: '', padding: '', border: '', 'box-sizing': '' };
- for(key in items) items[key] = window.getComputedStyle(ele,pseudo).getPropertyValue(key);
- return items;
- };
- </script>
复制代码
|
|