怎樣製作web版的folder treeview

来源:http://www.cnblogs.com/kongxianghai/archive/2016/03/04/5242168.html
-Advertisement-
Play Games

文件夾treeview的效果 這樣的treeview在實際項目中使用的場景較多。 既然用的多,那就DIY一遍,雖沒有面面俱到,但也要將其基本實現完成一遍。 1.先準備圖標素材 file.gif,文件圖標 folder.gif,文件夾打開中的圖標 folder-closed.gif,文件夾關閉著的圖標


文件夾treeview的效果

這樣的treeview在實際項目中使用的場景較多。

既然用的多,那就DIY一遍,雖沒有面面俱到,但也要將其基本實現完成一遍。

1.先準備圖標素材

 file.gif,文件圖標

 folder.gif,文件夾打開中的圖標

 folder-closed.gif,文件夾關閉著的圖標

 treeview-default.gif,摺疊圖標

 treeview-default-line.gif,摺疊線圖標,實際解析度是16*1776

 

2.

treeview是基於ul li以及他們的嵌套,將文件夾樹用列表搭出

html代碼

<!DOCTYPE>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
        <title>treeview</title>
        <style type="text/css">

        </style>
    </head>
    <body>
        
    <h4>treeview</h4>
    <ul id="browser" class="treeview">
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾1</span>
            <ul>
                <li class="last"><span class="file">文件1-1</span></li>
            </ul>
        </li>
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾2</span>
            <ul>
                <li>
                    <div class='foldarea foldarea-collapsable'></div>
                    <span class="folder folder-opened">文件夾2.1</span>
                    <ul id="">
                        <li><span class="file">文件2.1-1</span></li>
                        <li class="last"><span class="file">文件2.1-2</span></li>
                    </ul>
                </li>
                <li class="last"><span class="file">文件2-1</span></li>
            </ul>
        </li>
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾3</span>
            <ul>
                <li class="last"><span class="file">文件3-1</span></li>
            </ul>
        </li>
        <li class="last"><span class="file">文件0-1</span></li>
    </ul>

    <script src="lib/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        </script>
</body>
</html>

在代碼中使用css的類名將各個元素的角色定義好,已備後續的css定義。

 

3.

一個列表的樣式出來後,為了將列表的樣式改成文件夾樹的樣式,先得把列表ul樣式清空,包括嵌套的ul,將他們的padding和margin都設成0px已備後續按照自己的要求定義。

            .treeview, .treeview ul{
                list-style: none;
                padding: 0px;
                margin: 0px;
            }

 

 

4.

將列表的背景色設成白色,設置頂外邊距保持與上面的元素一點距離。

為li設上自定義的內邊距達到自定義縮進的目的。

            .treeview ul{
                background-color: white;
                margin-top: 4px;
            }

            .treeview li{
                margin:0px;
                padding:3px 0px 3px 16px;
            }

 

5.

列表模式是展開狀態。

在文件夾span前,加上加號或減號圖標,使用div作為圖標顯示元素,預設採用可摺疊樣式foldarea-collapsable,顯示減號圖標。

        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾1</span>
            <ul>
                <li class="last"><span class="file">文件1-1</span></li>
            </ul>
        </li>

將該div設成左浮動,這樣就可以變成可設定寬度的內聯元素,和文件夾span處於一行。

            .treeview .foldarea{
                height: 16px;
                width: 16px;
                float: left;
                margin-left: -16px;
            }

定義可摺疊樣式和可展開樣式。

可摺疊樣式表示,當前列表處於展開中,顯示減號圖標。

可展開樣式表示,當前列表處於摺疊中,顯示加號圖標。

            .treeview  .foldarea-expandable{
                background: url(images/treeview-default.gif) -80px -3px no-repeat;
            }

            .treeview .foldarea-collapsable{
                background: url(images/treeview-default.gif) -64px -25px no-repeat;
            }

 

6.

為文件夾文字前加上文件夾圖標,預設採用文件夾已打開樣式folder-opened,顯示文件夾已打開圖標。

        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾1</span>
            <ul>
                <li class="last"><span class="file">文件1-1</span></li>
            </ul>
        </li>

先設置文件夾文字縮進,讓其向右縮進自定義的距離,為圖標顯示留下空間。

            .treeview .folder{
                padding: 1px 0px 1px 16px;
            }

定義文件夾已打開和已關閉樣式,用來設置對應的圖標。

            .treeview .folder-opened{
                background: url(images/folder.gif) 0 0 no-repeat;
            }

            .treeview .folder-closed{
                background: url(images/folder-closed.gif) 0 0 no-repeat;
            }

 

7.

定義文件樣式,為文件文字前加上文件圖標。

        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾1</span>
            <ul>
                <li class="last"><span class="file">文件1-1</span></li>
            </ul>
        </li>

將文件文字縮進,為圖標露出顯示空間,設置文件背景圖標。

            .treeview .file{
                background: url(images/file.gif) 0 0 no-repeat;
                padding: 0px 0px 1px 16px;
            }

 

8.

為所有的li列表項設置摺疊線背景

摺疊線背景圖的上部有個直角的小分叉。

            .treeview li {
                background: url(images/treeview-default-line.gif) 0 0 no-repeat;
            }

設置完摺疊線後,每一個最後的列表項都會拖一個尾巴,為了去掉這個尾巴,摺疊線背景圖的最下部是一個直角的閉合樣式。

並且將所有最後一個li列表項設置成last樣式,表示這是最後一個列表項

<ul id="browser" class="treeview">
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾1</span>
            <ul>
                <li class="last"><span class="file">文件1-1</span></li>
            </ul>
        </li>
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾2</span>
            <ul>
                <li>
                    <div class='foldarea foldarea-collapsable'></div>
                    <span class="folder folder-opened">文件夾2.1</span>
                    <ul id="">
                        <li><span class="file">文件2.1-1</span></li>
                        <li class="last"><span class="file">文件2.1-2</span></li>
                    </ul>
                </li>
                <li class="last"><span class="file">文件2-1</span></li>
            </ul>
        </li>
        <li>
            <div class='foldarea foldarea-collapsable'></div>
            <span class="folder folder-opened">文件夾3</span>
            <ul>
                <li class="last"><span class="file">文件3-1</span></li>
            </ul>
        </li>
        <li class="last"><span class="file">文件0-1</span></li>
    </ul>

last樣式的關鍵點就是把摺疊線的可視部分通過background-position定位到下部的直角上,這樣在效果上就把摺疊線給關閉了。

            .treeview li.last {
                background-position: 0 -1766px;
            }

 

9.

最後,我們要在滑鼠移到文件夾上後改變文字色以及滑鼠指針。

那麼先定義hover樣式。

            .hover{
                cursor: pointer;
                color: red;
            }

找到所有的文件夾span,響應hover事件,動態的添加和刪除滑鼠進入樣式,已達到動態效果。

並且響應文件夾span和加減號div的單擊事件,在展開的時候單擊就摺疊其下的列表,在摺疊的時候單擊就展開,摺疊和展開是通過控制display:none樣式來實現。

然後就是根據摺疊或展開的狀態控製圖標的顯示。

       $(document).ready(function(){

            var folders = $('.folder');
            var foldareas = $('.foldarea');

            //滑鼠移入文件夾節點上,節點文字變色,滑鼠指針改變
            folders.hover(
                    function(){
                        $(this).addClass('hover');
                    },
                    function(){
                        $(this).removeClass('hover');
                    }
            );

            var doFold = function(){
                var ul = $('ul',this.parentNode)[0];
                var foldarea = $('.foldarea',this.parentNode)[0];
                var folder = $('.folder',this.parentNode)[0];
                if(!ul){
                    return;
                }


                var ulDisplay =   $(ul).css('display');
                if(ulDisplay==='none'){
                    //展開列表
                    $(ul).css('display','block');

                    //顯示展開時的文件夾圖標
                    $(folder).removeClass('folder-closed');
                    $(folder).addClass('folder-opened');

                    //展開時顯示可摺疊圖標
                    $(foldarea).removeClass('foldarea-expandable');
                    $(foldarea).addClass('foldarea-collapsable');

                }else{
                    //通過隱藏來實現摺疊列表
                    $(ul).css('display','none');

                    //顯示摺疊時的文件夾圖標
                    $(folder).removeClass('folder-opened');
                    $(folder).addClass('folder-closed');

                    //摺疊時顯示可展開圖標
                    $(foldarea).removeClass('foldarea-collapsable');
                    $(foldarea).addClass('foldarea-expandable');
                }
            };

            //將文件夾節點下的列表摺疊或展開
            folders.click(doFold);
            foldareas.click(doFold);
        });

 

至此,完成了treeview的基本實現。

如果需要完成整體功能,就要在此基礎之上封裝實現treeview的各個功能。

 

代碼:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 所謂“單例”: 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。 C#中的例子: 轉:htt
  • 1 package com.shejimoshi.behavioral.Iterator; 2 3 4 /** 5 * 功能:我們的迭代器介面 6 * 時間:2016年3月4日上午9:17:36 7 * 作者:cutter_point 8 */ 9 public interface MyIterat
  • 1、概念:裝飾模式是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象,又叫做包裝模式。 2、在java的IO流這個章節中,我們會發現有底層流,比如說位元組和字元流,有緩衝流等等: FileOutputStream:基本的文件輸出流 B
  • 引言 用過ASP.NET WebApi2.0, 上次去面試被問到什麼是Restful ,一時間竟不知道從何說起,所以搜集資料,做個備註,有時間好多來看看加深理解。 什麼是Restful 一種軟體架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器交互類的軟體。基於
  • 面向對象原則綜述 七大原則總脈絡圖: 註:1,2,3,4,5顯示的重要等級 常用的面向對象設計原則包括7個,這些原則並不是孤立存在的,它們相互依賴,相互補充。 下麵就是面向對象七個原則的一一解析 一、開閉原則 1. 開閉原則定義 :一個軟體實體應當對擴展開放,對修改關閉。也就是說在設計一個模塊的時候
  • 1 package com.shejimoshi.behavioral.Interpreter; 2 3 4 /** 5 * 功能:演奏文本 6 * 時間:2016年3月3日上午9:26:19 7 * 作者:cutter_point 8 */ 9 public class PlayContext 1
  • 在沒有瞭解到面向對象設計的7大原則前,我只是一隻豆子! 但豆子終將會成長不是嗎? 1.開閉原則:一個軟體實體應當對擴展開放,對修改關閉。也就是說在所涉及一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展,即實現在不修改源代碼的情況下改變這個模塊的行為。 在開閉原則的定義中,軟體實體可以指一個
  • 定時器開之前一定要清,這是我之前疏忽的,導致頁面倒計時占用記憶體,頁面崩潰。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...