一个可以实现把自已经常访问或者稍候要访问的页面放到一个暂存箱,然后可以方便的访问

使用方法:
1、拖动网页中的目标链接(或者按shift和+键将当前页面)到一个浮动的框中进行保存
2、刷新页面或者访问其它页面时,可以移动鼠标到暂存框,显示已经存放的链接进行访问

function simpleDialog(diaObj) {
    if (typeof diaObj !== "object") {
        return false;
    }
    var c = diaObj.content;
    if (!c) {
        c = diaObj.msg;
    }
    var dom = $('#simpleDialog');
    if (dom.length == 0) {
        dom = $('<div class="simpleDialog" id="simpleDialog"></div>');
        $("body").append(dom);
    }
    dom.text(c)
    var w = dom.outerWidth();
    var h = dom.outerHeight();
    dom.css({
        'margin-left': -w / 2,
        'margin-top': -h / 2
    });
    dom.fadeIn(300);
    clearInterval(simpleDialogInterval);
    simpleDialogInterval = setTimeout(closeSimpleDialog, 2700);
}

        //链接暂存箱功能
        var $dragDom, dragTimer, storageKey = 'temporary-storage';
        function checkDragUrl (url) { return !url || /^javascript/i.test(url) || /^#/i.test(url); }
        // $('a:not([href^=javascript])').prop('draggable', true)
        $('a').on('dragstart', function (e) {
            var href = $(this).attr('href'), isAjax = $(this).hasClass('j-ajax-action') || $(this).is('[class*=ajax]')
            if (isAjax || checkDragUrl(href)) return;

            $dragDom = $(this);
            var offset = $dragDom.offset(), w = $dragDom.width() / 2, h = $dragDom.height() / 2, scrollTop = $('html,body').scrollTop(), scrollLeft = $('html,body').scrollLeft()
            var ww = $(window).innerWidth(), wh = $(window).innerHeight()
            var l = offset.left - scrollLeft, t = offset.top - scrollTop
            $('#temporary-storage').show().addClass('show-add')
            if (t > wh - 150) {
                //显示在上方
                $('#temporary-storage').css({left: l + w - 20, top: t - 100})
            } else if (l > ww - 150) {
                //显示在左方
                $('#temporary-storage').css({left: l + w - 100, top: t + h - 20})
            } else if (l < 150) {
                //显示在右方
                $('#temporary-storage').css({left: l + w + 100, top: t + h - 20})
            } else {
                //显示在下方
                $('#temporary-storage').css({left: l + w - 20, top: t + 100})
            }
            clearTimeout(dragTimer)
            $(document).unbind('mousemove', temporaryStorageEyeHandler)
        }).on('dragend', function (e) {
            if (!$dragDom) return;
            $dragDom = null;
            $('#temporary-storage').removeClass('show-add').css({left: -100, top: -100})
            clearTimeout(dragTimer)
            dragTimer = setTimeout(function () {
                $(document).bind('mousemove', temporaryStorageEyeHandler)
            }, 1000)
        })
        $("#temporary-storage .droppable").on('dragenter',function (e) {
            if (!$dragDom) return;
            var href = $dragDom.attr('href')
            if (checkDragUrl(href)) return;
            $('#temporary-storage').addClass('add')
        }).on('dragleave', function (e) {
            $('#temporary-storage').removeClass('add')
        }).on('drop', function (e) {
            $("#temporary-storage").hide().removeClass('show-add add').css({left: -100, top: -100})
            if (!$dragDom) return;
            var title = $dragDom.text() || $dragDom.attr('title') || '',
                href = $dragDom.attr('href')
            if (checkDragUrl(href)) return;
            var newLink = {title, href, ding: false}
            var storage = localStorage.getItem(storageKey)
            storage = storage && JSON.parse(storage) || []
            for (var i=storage.length-1; i>=0; i--) {
                if (storage[i].href == href) {
                    newLink.ding = storage[i].ding || false
                    storage.splice(i, 1)
                }
            }
            storage.unshift(newLink)
            storage.sort(function (v1,v2) {
                if (!v2.ding && !v1.ding) return 0;
                return v2.ding && !v1.ding ? 1 : -1;
            })
            localStorage.setItem(storageKey, JSON.stringify(storage))
            updateStorageLink()
        })
        $("#temporary-storage-list").mouseenter(function (e) {
            clearTimeout(dragTimer)
            $(document).unbind('mousemove',temporaryStorageEyeHandler)
        })
            .mouseleave(function (e) {
                $(this).removeClass('opened')
                dragTimer = setTimeout(function () {
                    $(document).bind('mousemove', temporaryStorageEyeHandler)
                }, 500)
            })
            .on('click', '.li-link', function (e) {
                var $li = $(this).parent(), d = $li.data()
                if ($li.hasClass('active')) return;
                var storage = localStorage.getItem(storageKey)
                storage = storage && JSON.parse(storage) || []
                storage.splice(d.idx, 1)
                localStorage.setItem(storageKey, JSON.stringify(storage))
                updateStorageLink()
            })
            .on('click', '.link-ding', function (e) {
                e.stopPropagation()
                var $li = $(this).parent(), d = $li.data()
                var storage = localStorage.getItem(storageKey)
                storage = storage && JSON.parse(storage) || []
                storage[d.idx].ding = !storage[d.idx].ding
                storage.sort(function (v1,v2) {
                    if (!v2.ding && !v1.ding) return 0;
                    return v2.ding && !v1.ding ? 1 : -1;
                })
                localStorage.setItem(storageKey, JSON.stringify(storage))
                updateStorageLink()
            })
            .on('click', '.storage-clean', function (e) {
                var storage = localStorage.getItem(storageKey)
                storage = storage && JSON.parse(storage) || []
                for(var i=storage.length-1; i>=0; i--) {
                    if (!storage[i].ding) storage.splice(i,1)
                }
                localStorage.setItem(storageKey, JSON.stringify(storage))
                updateStorageLink()
            })
            .on('click', '.storage-help', function (e) {
                dialog({title: '快捷访问暂存区功能', msg: '<div><p>暂存区数据被保存在浏览器中,并且跳转页面后也不会消失,可以把即将要使用的链接放入暂存区,以达到快捷来回访问的目的。</p><p>如果点击链接后不想让链接消失,可以点击旁边的“<i class="fa fa-gavel"></i>”按钮把链接固定。</p><p>固定的链接会以新窗口的形式打开,并且点击后不会消失。 </p><p>添加链接到暂存区方法:</p><p>1、可以从页面拖动链接,放入暂存区</p><p>2、可以按 <kbd>Shift 和 +(加号键)</kbd> 添加当前页面到暂存区</p><p>清空操作不会清理被固定的链接</p></div>'})
            })
        //更新链表显示列表
        function updateStorageLink() {
            var storage = localStorage.getItem(storageKey)
            storage = storage && JSON.parse(storage) || []
            $("#temporary-storage-list").empty()
            for (var i in storage) {
                $("#temporary-storage-list").append('<div class="li '+(storage[i].ding?'active':'')+'" data-idx="'+i+'"><a href="'+storage[i].href+'" class="li-link" target="'+(storage[i].ding?'_blank':'_self')+'">'+storage[i].title+'</a><div class="link-ding" title="固定"></div></div>')
            }
            var $btns = $('<div class="actions text-center"><div class="btn btn-xs btn-text storage-help pull-right" style="margin-top: 4px;"><i class="fa fa-question-circle-o"></i></div></div>')
            if (storage.length>0) {
                $btns.append('<div class="btn btn-xs btn-text storage-clean" title="固定链接不会被清理"><i class="fa fa-trash-o"></i> 清空</div>')
            }
            $("#temporary-storage-list").append($btns)
        }
        function showStorageLinks() {
            $("#temporary-storage-list").addClass('opened')
        }
        function temporaryStorageEyeHandler(e) {
            if (e.clientX < 80 && e.clientY<50) {
                showStorageLinks()
            } else if ($("#temporary-storage-list").hasClass('opened') && (e.clientX > 80 || e.clientY>50)) {
                $("#temporary-storage-list").removeClass('opened')
            }
        }
        $(document).mousemove(temporaryStorageEyeHandler)
        $('body').keypress(function (e) {
            if (e.key != '+' || !e.shiftKey || e.target.tagName != 'BODY') return;

            var title = document.title, href = location.href
            var newLink = {title, href, ding: false}
            var storage = localStorage.getItem(storageKey)
            storage = storage && JSON.parse(storage) || []
            for (var i=storage.length-1; i>=0; i--) {
                if (storage[i].href == href) {
                    newLink.ding = storage[i].ding || false
                    storage.splice(i, 1)
                }
            }
            storage.unshift(newLink)
            storage.sort(function (v1,v2) {
                if (!v2.ding && !v1.ding) return 0;
                return v2.ding && !v1.ding ? 1 : -1;
            })
            localStorage.setItem(storageKey, JSON.stringify(storage))
            updateStorageLink()
            simpleDialog({msg: '当前页面已添加到快速访问区'})
        })
        updateStorageLink()
        //链接暂存箱功能,END

/** temporary-storage **/
.temporary-storage-box{
    position: fixed;
    left: -100px;
    top: -100px;
    z-index: 100;
    box-sizing: border-box;
    background: rgba(250, 80, 137, 0.5);
    border-radius:4px;
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transform: scale(1);
    transition: transform,background,opacity .3s;
    overflow: hidden;
}
.temporary-storage-box.show-add{
    left: 0;
    top: 0;
    opacity: 1;
}
.temporary-storage-box.add{
    transform: scale(1.2);
    background: rgb(250, 80, 137);
}
.temporary-storage-box:before{
    font-family: FontAwesome;
    font-size: 24px;
    content: "\f196";
    display: inline;
    color: #fff;
}
.temporary-storage-box.eye:before{
    content: "\f06e";
}
.temporary-storage-box .droppable{
    position: absolute;
    width: 100%;
    height: 100%;
    opacity: 0;
    z-index: 1;
    left: 0;
    top: 0;
}
.temporary-storage-box .droppable.debug{
    background-color: rgba(255,255,255,.5); opacity: 1
}
.temporary-storage-list {
    position: fixed;
    left: -100%;
    top: 0;
    z-index: 100;
    box-sizing: border-box;
    background: rgb(250, 80, 137);
    width: 140px;
    overflow: hidden;
    transition: all .3s;
    line-height: 30px;
}
.temporary-storage-list.opened {
    left: 0;
}
.temporary-storage-list .actions {
    color: #fff;
    border-top: 1px solid #ff84ad;
}
.temporary-storage-list .li{
    padding-left: 10px;
    text-decoration: none;
    color: #fff;
    display: flex;
    width: 100%;
    height: 30px;
    overflow: hidden;
}
.temporary-storage-list .li+.li{
    border-top: 1px dashed #ff84ad;
}
.temporary-storage-list .li:hover{background-color: #ff709f}
.temporary-storage-list .li .li-link{
    width: calc(100% - 30px); color: #fff; display: block; text-decoration: none;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.temporary-storage-list .li .link-ding{
    width: 30px;
    text-align: center;
    color: #fd95b7;
    cursor: pointer;
}
.temporary-storage-list .li.active .link-ding{
    color: #fff;
}
.temporary-storage-list .li .link-ding:before{
    display: inline;
    font-family: FontAwesome;
    content: "\f0e3";
}
/** temporary-storage end **/

标签: none

添加新评论