jquery实现模拟mac苹果系统桌面及文件系统效果代码

代码语言:html

所属分类:其他

代码描述:jquery实现模拟mac苹果系统桌面及文件系统效果代码

代码标签: mac 苹果 系统 桌面 文件 系统 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>

  <meta charset="UTF-8">


  
  
<style>
/** CORE STYLES **/
*,
*:before,
*:after {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
        user-select: none;
}

html {
    font-size: 62.5%;
    font-family: "Consolas", monospace;
}

#desktop {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5ef16bc8e6ab0.png");
    background-size: cover;
    cursor: default;
    overflow: hidden;
}



/** BASE ELEMENT STYLES **/
input {
    position: relative;
    display: inline-block;
    vertical-align: top;
    width: 28px;
    height: 22px;
    font: normal 1.2rem "Consolas", monospace;
    color: #999999;
    background-color: #ffffff;
    border: none;
    border-radius: 3px;
    padding: 0 5px;
    box-shadow: 0 1px 1px rgba(40, 40, 40, 0.25);
    outline: none;
}

input:focus {
    color: #333333;
}



/** UTILITY CLASSES **/
.hidden {
    display: none;
}

.error {
    box-shadow: 0 0 2px 2px rgba(255, 95, 80, 0.4) !important;
}

.clearfix:after {
    content: "";
    display: block;
    clear: both;
}



/** GENERIC WINDOW STYLES **/
.window {
    position: absolute;
    top: 100px;
    left: 100px;
    z-index: 1;
    width: 700px;
    height: 400px;
    border-top: 30px solid #eeeeee;
    border-radius: 3px;
    background-color: #ffffff;
    box-shadow: inset 0 1px 0 rgba(14, 14, 14, 0.3),
                0 9px 20px 6px rgba(50, 50, 50, 0.5);
}

.window:before {
    content: attr(data-title);
    display: block;
    font-size: 1.4rem;
    line-height: 28px;
    text-align: center;
    color: #333333;
    margin-top: -28px;
}

.window header {
    position: absolute;
    top: -30px;
    left: 0;
    right: 0;
    height: 30px;
    padding-left: 10px;
}

.window .action {
    float: left;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background-color: #cdcdcd;
    margin: 8px 5px 0 0;
    cursor: pointer;
}

.window.focused .action.close {
    background-color: #ff5f50;
}

.window.focused .action.minimize {
    background-color: #fec107;
}

.window.focused .action.maximize {
    background-color: #16CF36;
}

.window main {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    overflow: auto;
}



/** CUSTOM WINDOW OVERRIDES **/
.finder header {
    height: 60px;
}

.finder .action-bar {
    width: calc(100% + 10px);
    height: 30px;
    font-size: 0;
    padding: 0 10px;
    margin: 30px 0 0 -10px;
    background-color: #eeeeee;
    box-shadow: 0 1px 0 rgba(14, 14, 14, 0.3);
}

.finder input[name="path"] {
    width: calc(100% - 324px);
    margin-left: 10px;
}

.finder input[name="search"] {
    width: 180px;
    margin: 0 10px;
}

.finder aside {
    position: absolute;
    top: 31px;
    left: 0;
    bottom: 0;
    width: 200px;
    background-color: #eeeeee;
    border-right: 1px solid #d2d0d5;
    border-bottom-left-radius: 3px;
}

.finder aside section {
    padding: 15px;
}

.finder aside section h1 {
    font-size: 1.2rem;
    line-height: 1;
    text-transform: uppercase;
    color: #888888;
    margin-bottom: 8px;
}

.finder aside section li {
    width: calc(100% + 30px);
    margin-left: -15px;
    list-style: none;
    font-size: 1.2rem;
    line-height: 1;
    color: #333333;
    cursor: pointer;
    padding: 4px 15px 2px 15px;
}

.finder aside section li:hover {
    color: #ffffff;
    background-color: #4f8edb;
}

.finder main {
    top: 30px;
    left: auto;
    width: calc(100% - 200px);
}

.finder main p {
    font-size: 1.2rem;
    text-align: center;
    color: #777777;
    margin-top: 15px;
}

.terminal {
    top: calc(100% - 400px);
    left: calc(100% - 600px);
    width: 500px;
    height: 300px;
    background-color: #222222;
}

.terminal main {
    margin: 7px;
}

.terminal .contents.overflow {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
}

.terminal p {
    font-size: 1.2rem;
    line-height: 1;
    color: #ffffff;
    word-break: break-all;
}

.terminal p.green {
    color: #16cf36;
}

.terminal p.yellow {
    color: #fec107;
}

.terminal p.red {
    color: #ff5f50;
}

.terminal .prompt {
    position: relative;
}

.terminal main span {
    position: absolute;
    font-size: 1.2rem;
    line-height: 1;
    color: #ffffff;
}

.terminal main span:after {
    content: " $";
}

.terminal textarea {
    display: block;
    width: 100%;
    height: 12px;
    font: normal 1.2rem/1 "Consolas", monospace;
    text-indent: 26.5px;
    white-space: pre-wrap;
    word-wrap: break-word;
    word-break: break-all;
    color: #ffffff;
    background: none;
    border: none;
    outline: none;
    resize: none;
}

.terminal textarea[data-capture-enter="false"] {
    text-indent: 0 !important;
}

.textedit {
    top: calc(100% - 350px);
    left: 250px;
    width: 400px;
    height: 300px;
}

.textedit main {
    padding: 5px;
}

.textedit textarea {
    display: block;
    width: 100%;
    height: 100%;
    font: normal 1.2rem/1 "Consolas", monospace;
    color: #222222;
    border: none;
    outline: none;
    resize: none;
}

.overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 3;
}

.alert {
    width: 300px;
    height: auto;
    z-index: 4;
}

.alert:before {
    content: "";
    position: absolute;
    top: 40px;
    left: 10px;
    width: 50px;
    height: 50px;
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5f7ab53f84ca3.png");
    opacity: 0.25;
}

.alert main {
    position: static;
    display: block;
    padding: 20px 0 20px 70px;
}

.alert h4 {
    font-size: 1.3rem;
    text-transform: uppercase;
    color: #333333;
    margin-bottom: 3px;
}

.alert p {
    font-size: 1.2rem;
    color: #222222;
}

.filebrowser {
    width: 350px;
    height: 250px;
    z-index: 3;
}

.filebrowser ul {
    height: calc(100% - 32px);
    padding: 10px 0;
    overflow: auto;
}

.filebrowser .file-info {
    padding: 5px 10px;
    background-color: #eeeeee;
    border-bottom-left-radius: 3px;
    border-bottom-right-radius: 3px;
    box-shadow: 0 -1px 0 rgba(14, 14, 14, 0.3);
}

.filebrowser label {
    float: left;
    font-size: 1.2rem;
    line-height: 2.2rem;
    color: #333333;
    margin-right: 5px;
}

.filebrowser input {
    float: left;
    width: 236px;
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
    margin-right: 1px;
}

.filebrowser .action-button {
    float: left;
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}



/** COMPONENTS STYLES **/
.icon {
    display: inline-block;
    vertical-align: top;
    width: 75px;
    height: auto;
    font-size: 1.2rem;
    text-align: center;
    line-height: 1;
    white-space: pre-wrap;
    word-break: break-word;
    color: #222222;
    background: none;
    border-radius: 3px;
    margin: 5px;
    padding: 5px;
    cursor: pointer;
}

.icon:before {
    content: "";
    display: block;
    width: 80%;
    padding: 40% 0;
    margin: 0 auto 5px auto;
    background: center center no-repeat;
    background-size: cover;
    box-sizing: content-box;
}

.icon.list {
    display: block;
    width: 100%;
    text-align: left;
    margin: 1px 0;
    border-radius: 0;
    padding: 4px 10px 2px 30px;
    position: relative;
}

.icon.list:nth-of-type(2n) {
    background-color: #eeeeee;
}

.icon.list:before {
    position: absolute;
    top: 2px;
    left: 10px;
    width: 14px;
    height: 14px;
    padding: 0;
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5f7ab563e14e8.png");
    opacity: 0.5;
}

.icon.highlighted {
    color: #ffffff !important;
    background-color: rgba(119, 170, 219, 1) !important;
}

.icon.launchpad:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5df872a0dab9f.png");
}

.icon.terminal:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5f7ab69c66efd.png");
}

.icon.textedit:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5f7ab6ba26918.png");
}

.icon.documents:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5d835147aa4b2.png");
}

.icon.sublimetext:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5d83505e72b9f.png");
}

.icon textarea {
    display: block;
    width: 100%;
    height: 12px;
    font: normal 1.2rem/1 "Consolas", monospace;
    text-align: center;
    border: none;
    border-radius: 2px;
    padding: none;
    resize: none;
    outline: none;
}

.action-button {
    position: relative;
    display: inline-block;
    width: 28px;
    height: 22px;
    background-color: #ffffff;
    border-radius: 3px;
    box-shadow: 0 1px 1px rgba(40, 40, 40, 0.25);
    cursor: pointer;
}

.action-button:before {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    background: transparent center center no-repeat;
    background-size: 80% auto;
    opacity: 0.5;
}

.action-button:active,
.action-button.pressed {
    top: 1px;
    background-color: #fafafa;
    box-shadow: 0 0 1px rgba(40, 40, 40, 0.25);
}

.action-button.disabled {
    background-color: #f5f5f5;
}

.action-button.disabled:active {
    top: 0;
    box-shadow: 0 1px 1px rgba(40, 40, 40, 0.25);
}

.action-button[data-icon="back"]:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5f7ab7a3a8387.png");
}

.action-button[data-icon="forward"]:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5f7ab7cfd3599.png");
}

.action-button[data-icon="folder"]:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5d835147aa4b2.png");
    background-size: 60% auto;
}

.action-button[data-icon="file"]:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/icon/5d83505e72b9f.png");
    background-size: 60% auto;
}

.action-button[data-icon="check"]:before {
    background-image: url("//repo.bfw.wiki/bfwrepo/image/5f7ab8327fc85.png");
    background-size: 60% auto;
}

.button-group {
    display: inline-block;
    font-size: 0;
}

.button-group .action-button {
    margin-right: 1px;
    border-radius: 0;
}

.button-group .action-button:first-child {
    border-top-left-radius: 3px;
    border-bottom-left-radius: 3px;
}

.button-group .action-button:last-child {
    margin-right: 0;
    border-top-right-radius: 3px;
    border-bottom-right-radius: 3px;
}

.contextmenu {
    position: absolute;
    z-index: 2;
    width: 100px;
    list-style: none;
    background-color: #ffffff;
    font-size: 1.2rem;
    color: #222222;
    border-radius: 2px;
    cursor: pointer;
    overflow: hidden;
    box-shadow: 0 4px 15px 3px rgba(50, 50, 50, 0.5);
}

.contextmenu li {
    padding: 5px 10px;
}

.contextmenu li:hover {
    color: #ffffff;
    background-color: #4f8edb;
}
</style>



</head>

<body translate="no" >
  <div id="desktop">
            <div class="icon launchpad" data-application="finder">Finder</div>
            <div class="icon terminal" data-application="terminal">Terminal</div>
            <div class="icon textedit" data-application="textedit">TextEdit</div>
            <ul class="contextmenu hidden">
                <li class="rename">Rename</li>
            </ul>
        </div>

        <template id="finder">
            <section class="window finder" data-application="finder" data-title="Finder">
                <header>
                    <span class="action close"></span>
                    <span class="action minimize"></span>
                    <span class="action maximize"></span>
                    <div class="action-bar">
                        <div class="button-group">
                            <span class="action-button back" data-icon="back"></span>
                            <span class="action-button forward" data-icon="forward"></span>
                        </div>
                        <input type="text" name="path">
                        <input type="text" name="search" placeholder="Search">
                        <div class="button-group">
                            <span class="action-button folder" data-icon="folder"></span>
                            <span class="action-button file" data-icon="file"></span>
                        </div>
                    </div>
                </header>
                <aside>
                    <section>
                        <h1>Favorites</h1>
                        <ul class="favorites">
                            <li>Documents</li>
                            <li>Pictures</li>
                            <li>Music</li>
                            <li>Videos</li>
                        </ul>
                    </section>
                </aside>
                <main></main>
            </section>
        </template>
        <template id="terminal">
            <section class="window terminal" data-application="terminal" data-title="Terminal">
                <header>
                    <span class="action close"></span>
                    <span class="action minimize"></span>
                    <span class="action maximize"></span>
                </header>
                <main>
                    <div class="contents">
                        <div class="prompt">
                            <span>/</span>
                            <textarea class="autosize" data-capture-enter="true" spellcheck="off"></textarea>
                        </div>
                    </div>
                </main>
            </section>
        </template>
        <template id="textedit">
            <section class="window textedit" data-application="textedit" data-title="TextEdit - Untitled">
                <header>
                    <span class="action close"></span>
                    <span class="action minimize"></span>
                    <span class="action maximize"></span>
                </header>
                <main>
                    <textarea spellcheck="off"></textarea>
                </main>
            </section>
        </template>
        <template id="alert">
            <section class="window alert focused">
                <header>
                    <span class="action close"></span>
                </header>
                <main>
                    <h4>Error</h4>
                    <p>The error message gets here.</p>
                </main>
            </section>
        </template>
        <template id="filebrowser">
            <section class="window filebrowser" data-title="">
                <header>
                    <span class="action close"></span>
                </header>
                <main>
                    <ul></ul>
                    <div class="file-info clearfix">
                        <label>Filename:</label>
                        <input type="text" name="filename">
                        <span class="action-button" data-icon="check"></span>
                    </div>
                </main>
            </section>
        </template>
  
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
      <script>
(function(root, library) {
    if (typeof define === 'function' && define.amd) {
        define('generic-tree', [], library);
    } else {
        root.GenericTree = library();
    }
})(this, function() {
    function GenericTree() {
        this.root = null;

        this.insert = function(key, parent, properties) {
            if (key === undefined) {
                throw new Error('Missing argument: key');
            }
            parent = parent instanceof Node ? [parent] : this.search(parent);
            var node = new Node(key, properties);
            if (parent === null && !this.root) {
                this.root = node;
            } else if (parent === null && !!this.root) {
                throw new Error('GenericTree already has a root. Please specify the node\'s parent.');
            } else if (!parent.length) {
                throw new Error('Parent node not found.');
            } else {
                parent[0].insert(node);
            }
            return node;
        };

        this.delete = function(node) {
            if (node === undefined) {
                throw new Error('Missing argument: key');
            }
            var targets = node instanceof Node ? [node] : this.search(node);
            if (targets === null || !targets.length) {
                throw new Error('Target node not found.');
            }
            for (var i = 0; i < targets.length; i++) {
                var target = targets[i];
                if (target === this.root) {
                    this.root = null;
                } else {
                    target.parent.delete(target);
                }
            }
        };

        this.search = function(key) {
            return key !== undefined && this.root ? this.root.search(key) : null;
        };

        this.traverse = function() {
            if (this.root !== null) {
                var queue = [this.root];
                var levels = [];
                var level = [];
                for (var i = 1, j = 0; queue.length;) {
                    var pointer = queue.shift();
                    level.push(pointer);
                    j += pointer.children.length;
                    if (!--i) {
                        i = j;
                        j = 0;
                        levels.push(level);
                        level = [];
                    }
                    queue = queue.concat(pointer.children);
                }
                return levels;
            }
            return [];
        };
    }

    function Node(key, properties) {
        this.key = key;
        this.parent = null;
        this.children = [];

        properties = properties && typeof properties === 'object' ? properties : {};
        for (var i in properties) {
            this[i] = properties[i];
        }

        this.insert = function(child) {
            this.children.push(child);
            child.parent = this;
        };

        this.delete = function(child) {
            this.children.splice(this.children.indexOf(child), 1);
        };

        this.search = function(key) {
            var results = this.key.match('^' + key.replace(/\./g, '\\.').replace(/\*/g, '\.\*') + '$') ? [this] : [];
            for (var i in this.children) {
                results = results.concat(this.children[i].search(key));
            }
            return results;
        };

        this.find = function(key) {
            var results = [];
            for (var i in this.children) {
                if (this.children[i].key.match('^' + key.replace(/\./g, '\\.').replace(/\*/g, '\.\*') + '$')) {
                    results.push(this.children[i]);
                }
            }
            return results;
        };
    }

    return GenericTree;
});

(function(root, library) {
    if (typeof define === 'function' && define.amd) {
        define('virtual-filesystem', ['generic-tree'], library);
    } else {
        root.VirtualFileSystem = library(root.GenericTree);
    }
})(this, function(GenericTree) {
    function VirtualFileSystem() {
        this.tree = new GenericTree();
        this.tree.insert('', null, { type: 'directory' });
        this.pointer = this.tree.root;

        this.mkdir = function(path) {
            if (path === undefined) {
                throw new Error('Missing argument: path');
            }
            var segments = path.replace(/\/+$/g, '').split('/');
            var parent = this._resolve_path(segments.slice(0, segments.length - 1).join('/'));
            var name = segments[segments.length - 1];
            if (parent.find(name).length) {
                throw new Error('Name already taken: ' + name);
            }
            this.tree.insert(name, parent, { type: 'directory' });
        };

        this.rmdir = function(path) {
            if (path === undefined) {
                throw new Error('Missing argument: path');
            }
            var node = this._resolve_p.........完整代码请登录后点击上方下载按钮下载查看

网友评论0