Ztree组件右键弹出菜单位置显示错误

做项目的时候用到了Ztree组件来维护树形结构,没想到碰到了一个问题:
Ztree组件的右键菜单无法正确显示,位置总是不正确
这个是刚刚整合进去的,以前没有前端页面的时候是完全好用的!
在这里插入图片描述
在元素上点击右键,会发现弹出的菜单总是在右下方显示!

在这里插入图片描述
后来发现,画红色箭头区域的宽高与画蓝色距离差的位置大致相同
也就是说:正好差出了一个上下边框的问题

所以我就怀疑,会不会是布局定位的问题,因为以前没有前端模板,所以正常。

在这里插入图片描述
ztree得到的点击位置正好是绝对定位(按屏幕边缘计算的),显示菜单使用的是以父DIV计算的,而加入了模板之后,所以父DIV就不是以网页的边缘开始起点了,所以显示位置会出现偏差!

既然这样,就把父DIV改变为以网页边缘为起始的绝对定位就可以了:

style="position: fixed"

在这里插入图片描述
在这里插入图片描述
加入之后一切正常!

其实既然是定位问题引发的错误,那么直接把DIV放在最外层其实也是可以的(一开始一样)

但是一般项目开发中都会使用模板引擎继承,所以很难将它放到最上层的body中,除非改变父页面,如果改变父页面,在其他不使用Ztree的页面这又是一个垃圾代码,得不偿失!

所以直接加入就可以啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
zTree可以通过异步加载数据来实现动态菜单。具体步骤如下: 1. 初始化zTree时,设置异步加载参数,包括异步请求的URL、请求方法、请求参数等。 2. 当需要加载动态数据时,调用zTree的异步加载方法,传入请求参数。 3. 服务器接收到请求参数后,根据参数查询数据库或其他数据源,生成对应的数据,并返回给前端。 4. 前端接收到响应数据后,将数据转换成zTree所需的JSON格式,并调用zTree的更新节点数据方法,将数据更新到zTree中即可。 示例代码如下: ``` // 初始化zTree var setting = { async: { enable: true, // 开启异步加载 url: "dynamicMenu.php", // 异步请求的URL type: "POST", // 请求方法 autoParam: ["id"], // 请求参数 dataType: "json" // 响应数据类型 } }; var zTreeObj = $.fn.zTree.init($("#tree"), setting); // 加载动态数据 zTreeObj.reAsyncChildNodes(null, "refresh"); ``` 服务器端代码示例(PHP): ``` // 获取请求参数 $id = isset($_POST['id']) ? intval($_POST['id']) : 0; // 查询数据库获取节点数据 $nodes = array(); if ($id == 0) { // 查询根节点 $nodes[] = array( 'id' => 1, 'name' => '根节点', 'isParent' => true ); } else { // 查询子节点 $result = mysql_query("SELECT * FROM menu WHERE parent_id=$id"); while ($row = mysql_fetch_array($result)) { $nodes[] = array( 'id' => $row['id'], 'name' => $row['name'], 'isParent' => $row['has_child'] == 1 ); } } // 返回响应数据 echo json_encode($nodes); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值