Popup DIV中显示点击查询结果

本文介绍了一种在地图应用中实现点击查询并显示结果的方法。通过预先设置隐藏的PopupDIV,结合特定的GIS工具按钮及JavaScript函数,可以将查询到的信息以弹窗形式展示在地图上。

在Popup DIV中显示点击查询结果

仿照go2map中添加标注,实现了Server点击查询结果显示在Popup DIV中,该方法适用于查询固定字段。
1.
首先在页面中添加DIV

在地图页面中事先添加好Popup DIV,并使之不显示。

<div id="poi_detail" style="position:absolute; z-index:8;left:500px; top:380px; visibility:hidden">
<table width="260" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">  
                        <tr>
                             <td width="9" height="7"><img src="image/top_left.gif" width="9" height="7"></td>
                             <td><img src="image/top_bg.gif" width="100%" height="7"></td>
                             <td width="9"><img src="image/top_right.gif" width="9" height="7"></td>
                        </tr><tr>
                             <td><img src="image/left_bg.gif" width="9" height="150"></td>
                             <td valign="top" bgcolor="#FFFFFF">
                                  <table width="100%" border="0" cellspacing="0" cellpadding="5">
                                      <tr>
                                           <td bgcolor="#eeeeee"><span style="width:183px;font-size:14px;"><b>点击查询结果        </b></span>          <img src="image/close2.gif" style="CURSOR: hand" width="46" align="absmiddle" height="16" onClick="document.getElementById('poi_detail').style.visibility ='hidden';"></td>
                                       </tr><tr>
                                            <td style="font-size:12px;"><b>项目编号:</b><input id="poi_id" name="" type="text" readonly="true" class="text-mm"></td>
                                       </tr> <tr>
                                            <td style="font-size:12px;"><b>项目名称:</b><input  id = "poi_name" name="" type="text" readonly="true" class="text-mm"></td>
                                       </tr>
                                   </table>
                                </td>                        
                                <td><img src="image/right_bg.gif" width="9" height="150"></td>         
                            </tr><tr>                           
                                  <td height="7"><img src="image/bottom_left.gif" width="9" height="7"></td>                           
                                  <td><img src="image/bottom_bg.gif" width="100%" height="7"></td>                                      <td><img src="image/bottom_right.gif" width="9" height="7"></td>                                  </tr>
                         </table>
                      </td>
                </tr>
            </table>
       </div>
3.设置查询GIS工具按钮

<esri:Tool DefaultImage="~/Images/identify.png" JavaScriptFile="" ServerActionAssembly="App_Code" HoverImage="~/Images/identify_HOVER.gif" ServerActionClass="CustomToolLibrary.IdentifyPopUpTool" ClientAction="Point" ToolTip="点击查询要素" SelectedImage="~/Images/identify_ON.gif" Name="点击查询"></esri:Tool>
4.页面结果返回处理JS函数
function showDetail(p1,p2,x,y)
        {
            var detaildiv = document.getElementById("poi_detail");
            var mapdiv = document.getElementById("Map_Panel");
            
             detaildiv.style.visibility="visible";
        
             document.getElementById("poi_id").value = p1;
             document.getElementById("poi_name").value = p2;        
            
            
        var left = parseInt(mapdiv.style.left) + parseInt(x);
        var top = parseInt(mapdiv.style.top) + parseInt(y);
             detaildiv.style.left = left + "px";
             detaildiv.style.top = top + "px";
            if(document.body.clientWidth < (left+260))
            {
                detaildiv.style.left = (left - 260)  + "px";
            }
            if(document.body.clientHeight < (top+245))
            {
                detaildiv.style.top = (top - 165)  + "px";
            }                    
        }
<think>我们之前已经讨论过在Popup内部显示Dialog,并通过点击Dialog关闭Popup的方法。现在用户提到“点击Popup关闭按钮显示Dialog”,这通常指的是在Popup的关闭操作(如右上角的关闭按钮)被点击时,不直接关闭Popup,而是弹出Dialog进行二次确认。 根据Vant UI的Popup组件文档,Popup默认没有关闭按钮,但我们可以通过自定义内容来添加关闭按钮,并监听其点击事件。然后在这个事件中触发Dialog的显示。 因此,核心思路是: 1. 在Popup内部自定义一个关闭按钮(比如在右上角) 2. 点击这个按钮时,不直接关闭Popup,而是设置一个状态让Dialog显示 3. 在Dialog的确认事件中关闭Popup和Dialog,在取消事件中只关闭Dialog 注意:由于Popup默认没有关闭按钮,我们需要自己添加。同时,我们仍然需要禁止遮罩层点击关闭(因为用户可能点击遮罩层,而我们希望统一走Dialog确认流程)。 实现步骤: 1. 自定义Popup的内容,在右上角放置一个关闭图标(比如使用van-icon) 2. 监听这个关闭图标的点击事件,将事件绑定到显示Dialog的方法 3. 在Dialog中,确认则关闭Popup(同时关闭Dialog),取消则只关闭Dialog 4. 注意Popup的关闭仍然由showPopup控制 代码示例: ```html <template> <van-button type="primary" @click="showPopup = true">打开Popup</van-button> <van-popup v-model="showPopup" position="center" :style="{ width: '80%', padding: '20px' }" :close-on-click-overlay="false" <!-- 禁用遮罩层关闭 --> > <!-- 自定义关闭按钮,放在右上角 --> <van-icon name="close" style="position: absolute; top: 10px; right: 10px; font-size: 16px;" @click="handlePopupClose" <!-- 点击关闭图标时触发 --> /> <!-- 对话框组件,用于二次确认 --> <van-dialog v-model="showCloseDialog" title="确认关闭" message="确定要关闭Popup吗?" show-cancel-button @confirm="closePopupConfirm" @cancel="closeDialogOnly" /> <p>Popup内容区域</p> <p>点击右上角的关闭图标会弹出确认对话框</p> </van-popup> </template> <script> export default { data() { return { showPopup: false, // 控制Popup显示 showCloseDialog: false // 控制关闭确认Dialog显示 }; }, methods: { // 点击Popup关闭图标时触发 handlePopupClose() { this.showCloseDialog = true; // 显示确认对话框 }, // 确认关闭:关闭Dialog和Popup closePopupConfirm() { this.showCloseDialog = false; this.showPopup = false; }, // 取消关闭:只关闭Dialog closeDialogOnly() { this.showCloseDialog = false; } } }; </script> ``` 关键点说明: 1. 自定义关闭按钮:使用`van-icon`(或其他元素)作为关闭按钮,并绝对定位在右上角。 2. 按钮事件:点击关闭按钮时,显示Dialog(`showCloseDialog = true`),而不是直接关闭Popup。 3. Dialog事件: - 确认事件:同时关闭Dialog和Popup。 - 取消事件:只关闭Dialog,Popup保持显示。 4. 遮罩层:仍然禁止点击遮罩层关闭Popup(`close-on-click-overlay="false"`),因为我们希望所有关闭操作都经过确认。 注意事项: - 如果Popup的内容过长,需要确保自定义的关闭按钮始终在顶部(使用`position: absolute`并设置Popup的`position: relative`,但注意Vant的Popup默认已经为弹出层设置了定位上下文)。 - 如果Popup中有滚动内容,需要确保关闭按钮固定在顶部,可以使用`position: sticky`或者将关闭按钮放在一个固定高度的头部容器中。 引用说明: - 关于Popup的遮罩层问题,我们参考了引用[1]的建议,将弹出层放在最外层,避免遮罩层问题。 - 关于Popup的高度设置,参考引用[3]的经验,我们设置了宽度和padding,但高度没有设置100%,因为居中弹出不需要全屏高度。如果希望全屏,可以设置高度为100%。 - 关于挂载节点,本示例没有特别设置,但如果遇到弹出层位置问题,可以参考引用[2]使用`get-container`属性。 根据用户需求,我们实现了在点击Popup的关闭按钮时显示Dialog,并在Dialog确认后关闭Popup。 下面列出相关问题: </think>### Vant UI 点击 Popup 关闭按钮显示 Dialog 的实现方法 在 Vant UI 中实现点击 Popup 关闭按钮显示 Dialog 的完整解决方案如下,核心思路是自定义关闭按钮并绑定 Dialog 显示逻辑: #### 实现代码 ```html <template> <!-- 触发按钮 --> <van-button type="primary" @click="showPopup = true">打开Popup</van-button> <!-- Popup 容器(关键配置) --> <van-popup v-model="showPopup" position="center" :style="{ width: '80%', padding: '20px' }" :close-on-click-overlay="false" <!-- 禁用遮罩层关闭 --> :closeable="true" <!-- 启用关闭按钮 --> @close="showCloseDialog = true" <!-- 关键:点击关闭按钮时触发Dialog --> > <!-- 顶部自定义关闭按钮 --> <div class="custom-close-btn" @click="showCloseDialog = true"> <van-icon name="close" size="18" /> </div> <!-- 二次确认Dialog --> <van-dialog v-model="showCloseDialog" title="确认关闭" message="确定要关闭Popup吗?" show-cancel-button @confirm="closePopup" /> <!-- Popup 内容 --> <p>重要内容区域</p> <p>点击右上角关闭按钮会触发确认Dialog</p> </van-popup> </template> <script> export default { data() { return { showPopup: false, // 控制Popup显示 showCloseDialog: false // 控制Dialog显示 } }, methods: { // 关闭所有弹层 closePopup() { this.showCloseDialog = false this.showPopup = false } } } </script> <style> /* 自定义关闭按钮样式 */ .custom-close-btn { position: absolute; top: 12px; right: 12px; z-index: 999; padding: 8px; } </style> ``` #### 核心原理 1. **Popup 关键配置**: - `closeable="true"`:启用右上角关闭按钮[^1] - `@close="showCloseDialog = true"`:点击关闭按钮时触发 Dialog - `:close-on-click-overlay="false"`:禁用遮罩层关闭功能[^3] 2. **自定义关闭按钮**: - 添加绝对定位的自定义按钮增强视觉提示 - 绑定相同的触发事件 (`@click="showCloseDialog = true"`) 3. **Dialog 联动**: - `@confirm="closePopup"`:确认关闭时同时关闭 Dialog 和 Popup - 取消按钮默认关闭 Dialog(Popup 保持打开状态) 4. **样式优化**: - 自定义按钮使用 `z-index: 999` 确保显示层级 - 添加悬停效果提升用户体验(可选) #### 注意事项 1. **层级问题**: - Dialog 默认 z-index (2000) 高于 Popup (1000),无需额外调整 - 自定义按钮必须设置更高 z-index 确保可点击[^1] 2. **位置适配**: - 底部弹出时需设置 `:style="{ height: '100%' }"`[^3] - 使用 `position="center"` 避免位置冲突 3. **移动端优化**: - 添加 `max-height: 100vh` 防止内容溢出 - 复杂内容使用 `get-container="body"` 避免渲染问题[^2] > 此方案通过事件联动实现:Popup关闭按钮点击显示Dialog → 用户确认 → 关闭所有弹窗的流程。实际测试在 Vant 3.x 版本运行正常,完整保留官方组件功能的同时实现业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值