纯css弹窗处理
一、使用情况
最开始是要做一个高德地图展示,需要在多个 market 上展示弹窗,但是高德地图的 infoWindow 同时只能存在一个,所以需要自己写 market 的逻辑
可以直接使用react-amap这个包给market传入组件就不需要考虑这个问题
二、实现思路
1、利用 type 为 checkbox 的 input 标签的选中和非选中实现两种状态
2、 css 中的选择器实现 style 的改变,通过切换 display 的状态来展示弹窗
<!-- 省去了一些样式 -->
<div class="marker">
<label for="inputId">
<!--此svg是一个带波纹动画的圆圈-->
<svg
width="20"
height="20"
viewBox="0 0 40 40"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="20" cy="20" r="10" fill="red" />
<circle id="circle" cx="20" cy="20" r="0" fill="red">
<animate
attributeName="r"
from="0"
to="20"
dur="1s"
repeatCount="indefinite"
/>
<animate
attributeName="opacity"
from="1"
to="0.1"
dur="1s"
repeatCount="indefinite"
/>
</circle>
</svg>
</label>
<input type="checkbox" class="check_input" id="inputId" />
<!--此div必须要和input相邻-->
<div class="infoWindow">
<!--在这里写悬浮窗中的内容-->
</div>
</div>
.marker {
position: relative;
/*设置宽高颜色等 */
}
.infoWindow {
/*设置窗口的样式*/
position: absolute;
display: none;
}
/**重点 通过选择器实现切换显示隐藏*/
.check_input[type="checkbox"]:checked + .infoWindow {
display: block;
}
三、其他
原生 html 写起来挺麻烦的,但是是一种解题思路,想要简单的实现方式还是需要用第三方包,