国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

ztree獲取選中節點時不能進入可視區域出現BUG如何解決

2019-11-20 11:05:28
字體:
來源:轉載
供稿:網友

zTree 是一個依靠 jQuery 實現的多功能 “樹插件”。優異的性能、靈活的配置、多種功能的組合是 zTree 最大優點。

zTree 的特點編輯

● zTree v3.0 將核心代碼按照功能進行了分割,不需要的代碼可以不用加載
● 采用了延遲加載技術,上萬節點輕松加載,即使在 IE6 下也能基本做到秒殺
● 兼容 IE、FireFox、Chrome、Opera、Safari 等瀏覽器
● 支持 JSON 數據
● 支持靜態和 Ajax 異步加載節點數據
● 支持任意更換皮膚 / 自定義圖標(依靠css)
● 支持極其靈活的 checkbox 或 radio 選擇功能
● 提供多種事件響應回調
● 靈活的編輯(增/刪/改/查)功能,可隨意拖拽節點,還可以多節點拖拽喲
● 在一個頁面內可同時生成多個 Tree 實例
● 簡單的參數配置實現 靈活多變的功能

zTree 的優勢編輯

zTree 的作者利用業余時間不斷改進 zTree 功能,并且還能及時與用戶溝通,及時回復各種疑問,便于新用戶快速掌握。目前越來越多的用戶都使用 zTree 替換了系統中原有的 樹插件,這其中包括最近剛發布最新版本的QUI框架。

相關插件版本:

jquery.ztree.exedit-3.4.js

jquery.ztree.all-3.4.js

jquery-1.8.0.js

 function onAsyncSuccess(event, treeId, treeNode, msg) {     curAsyncCount--;     if (curStatus == "expand") {       expandNodes(treeNode.children);     } else if (curStatus == "async") {       asyncNodes(treeNode.children);     }      if (curAsyncCount <= ) {       curStatus = "";       // 節點定位       if(devicesSelect.selectNodeId){         // 節點變成被選中狀態         var zTree = $.fn.zTree.getZTreeObj(zTreeId);         zTree.cancelSelectedNode();         $("#" + devicesSelect.selectNodeId + "_a").addClass("curSelectedNode");         $("#treeDiv").animate({scrollTop:$("#"+devicesSelect.selectNodeId).offset().top-},);//是ms,也可以用slow代替         devicesSelect.selectNodeId = "";       }     }   }    function expandNodes(nodes) {     if (!nodes) return;     curStatus = "expand";     var zTree = $.fn.zTree.getZTreeObj(zTreeId);     for (var i=, l=nodes.length; i<l; i++) {       if(ids.indexOf(nodes[i].id) != -){         if (nodes[i].isParent&&(ids.substring(,ids.indexOf(","))!=nodes[i].id)) {           if(nodes[i].typeName.indexOf("虛擬")=="-"){             zTree.expandNode(nodes[i], true, false, false);           } else if(nodes[i].type.indexOf(type)>"-"){             zTree.expandNode(nodes[i], true, false, false);           }         } else {           goAsync = true;         }       }     }     if(goAsync==true){       var id_ = ids.substring(,ids.indexOf(","));       var node = zTree.getNodeByParam("id",id_);       goAsync = false;       me.curStatus = "";       me.type = "";       me.selectNodeId = node.tId;     }   } 

定位思路:

1、假設要定位節點A,該節點A的唯一標識是objid

2、根據objid從db中獲取所有上級的objid,拼接并保存在ids變量。

3、在onAsyncSuccess方法中調用expandNodes,該方法中通過[if (nodes[i].isParent&&(ids.substring(0,ids.indexOf(","))!=nodes[i].id))]過濾,展開id在ids里的節點。

4、通常情況看下,在展開最后,依據objid通過【var node = zTree.getNodeByParam("id",id_);】獲取節點A對象,然后通過【zTree.selectNode(node);】選擇節點。

這種情況下,能夠定位并選擇目標節點,但是,當與該節點有同一父節點的數據較多時,節點A可能不會出現在可視區域內。查找源碼,發現Ztree用的是【$("#" + node.tId).focus().blur();】方法實現定位。但很遺憾,有BUG。

于是,使用控制滾動條的方式自己控制定位。實現方式如下:

1、刪除【zTree.selectNode(node);】,防止定位沖突

2、在onAsyncSuccess方法中,判定當節點展開完畢后,獲取節點A的偏移量,并將值賦給樹所在DIV的scrollTop屬性。

$("#treeDiv1").animate({scrollTop:$("#"+devicesSelect.selectNodeId).offset().top-300},1000);//1000是ms,也可以用slow代替

注:devicesSelect.selectNodeId為節點A的節點tid,通過【me.selectNodeId = node.tId】獲取;treeDiv1樹所在div的id屬性

3、取消之前選中節點:zTree.cancelSelectedNode();

4、為節點A增加被選中狀態class:$("#" + devicesSelect.selectNodeId + "_a").addClass("curSelectedNode");

筆者淡淡的說:第2點我本來想用【$("#treeDiv1").scrollTop($("#"+devicesSelect.selectNodeId).offset().top-200);】這種方式的,雖然有效,但是同層節點過多時候,還是不能進入可視區域,我深深的懷疑是因為這個時候樹還沒展開,所以我就用了動畫,無賴之舉。

筆者最后的話:如果本文有任何錯誤,敬請看官火辣指出,不勝感激涕零。。。。

以上內容是本文給大家介紹ztree獲取選中節點時不能進入可視區域出現BUG如何解決的全部敘述,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖州| 垫江县| 伊吾县| 成武县| 安康市| 合作市| 河南省| 郁南县| 汕头市| 公安县| 句容市| 大洼县| 墨竹工卡县| 衡南县| 青浦区| 海晏县| 亳州市| 克拉玛依市| 图们市| 方山县| 大埔县| 临城县| 舞阳县| 贵州省| 雷州市| 鹰潭市| 嘉祥县| 南靖县| 遂平县| 嘉荫县| 同心县| 邛崃市| 百色市| 禹城市| 莱州市| 镇康县| 囊谦县| 施甸县| 潞西市| 凤台县| 晋州市|