百度贴吧图片放大

点击图片放大,再次点击还原

As of 2014-07-25. See the latest version.

// ==UserScript==
// @name        百度贴吧图片放大
// @namespace   http://blog.sbw.so/
// @description 点击图片放大,再次点击还原
// @include     http://tieba.baidu.com/p/*
// @include     http://tieba.baidu.com/f?*
// @grant       unsafeWindow
// @require     http://code.jquery.com/jquery-2.1.1.min.js
// @author      o丨Reborn <sbwtws@gmail.com>
// @icon        http://tb.himg.baidu.com/sys/portrait/item/d92f6fd8ad5265626f726ee90f
// @version     14.07.25.0
// ==/UserScript==

//14-07-25.0    阻止默认的新窗口创建(可能造成不兼容或者其它问题)
//14-07-11.1    看圖功能支持貼吧籤名檔
//14-07-11.0    支持GreaseMonkey 2.0
//14-07-01.0    簡化代碼,增加兼容性
//14-03-19.1    为了实现拖拽图片,将鼠标按下放大改为点击放大
//14-03-18.1    修复右键点击时关闭图片
//14-03-17.2    解决百度异步加载时图片无效
//13-01-29.1    解决楼中视频无法播放的bug
//13-01-25.1    防止图片缩过小无法关闭,解决个别图片脚本不生效,保留收藏图片功能,去除百度小图不能收藏的bug
//13-01-23.2    修复在看大图时不能右键下载,新增鼠标滚动调整大小功能:w
//13-01-23.1    应网友建议,将双击移除图片改为单击移除.
//13-01-22.1    去掉了一个ajax查询,应该能快点,图片显示从左上角改为居中
//13-01-21.4    一些小改动
//13-01-21.3    支持同时点开多个图片
//13-01-21.2    解决拖动卡
//13-01-21.1    解决图片位置错乱

(function(){    
    var _clock = null;
    
    function addPicture(img){
        if (img.width < 50)
            return ;
        
        $(img).css({
            'position':'fixed',
            'z-index':'999999',
            'box-shadow':'0 0 50px #333',
            'border':'1px dashed hsl(40, 50%, 30%)',
            'top':'50%',
            'left':'50%',
            'margin-top':parseInt(img.height) / -2 + 'px',
            'margin-left':parseInt(img.width) / -2 + 'px'
        });

        document.body.appendChild(img);

        clearInterval(_clock);
    }
    
    function pictureScroll(e) {
        var width = $(this)[0].width - e.detail * 15;
    //    $(this)[0].width = width < 100 ? 100 : width;
        $(this).attr({
            'width' : width < 100 ? 100 : width,
            'height' : ''
        });

        $(this).css({
            'margin-top':parseInt($(this)[0].height) / -2 + 'px',
            'margin-left':parseInt($(this)[0].width) / -2 + 'px'
        });

        e.preventDefault();
        return false;
    }
    
    function picMouseDown(e){
        var mouseX = e.pageX;
        var mouseY = e.pageY;
        var oldX = parseInt($(this).css('left'));
        var oldY = parseInt($(this).css('top'));
        var close = true;
        
        $(document).bind('mousemove',function(e){
            $(this).css({
                'top':e.pageY - mouseY + oldY + 'px',
                'left':e.pageX - mouseX + oldX + 'px'
            });
            close = false;
        });
        
        $(document).mouseup(function(e){
            if (close)
                $(this).remove();
            $(document).unbind('mousemove');
        });
        
        e.preventDefault();
        return false;
    }

    function pictureView(e){
        if (e.button != 0)
            return true;
       
//        $(this).unbind('click');
       
        var reg=/\/[a-z0-9]{20,}\.[a-zA-Z]{3,}/;
        var match=$(this).attr("src").match(reg);
        
        if(!match)
           return ;
        
        var img = document.createElement('img');
        img.src="http://imgsrc.baidu.com/forum/pic/item" + match[0];

//        $(img).one('load', function() {
//            $(img).css({
//                'margin-top':parseInt(this.height) / -2 + 'px',
//                'margin-left':parseInt(this.width) / -2 + 'px'
//            });
//        }).each(function() {
//              if(this.complete) 
//                  $(this).load();
//        });
        
        img.addEventListener('DOMMouseScroll', pictureScroll);
        $(img).mousedown(function(e){
            if (e.button != 0)
                return ;

            var mouseX=e.pageX;
            var mouseY=e.pageY;
            var oldX=parseInt($(this).css('left'));
            var oldY=parseInt($(this).css('top'));
            var remove = true;
            $(document).bind('mousemove',function(e){
                $(img).css({
                    'top':e.pageY - mouseY + oldY,
                    'left':e.pageX - mouseX + oldX
                });
                remove = false;
            });
            $(document).mouseup(function(e){
                if (remove)
                    $(img).remove();
                $(document).unbind('mousemove');
            });
    //		e.preventDefault();
            return false;
        });

        // 添加图片
        _clock = setInterval(function(){
            addPicture(img);
        }, 50);

        e.preventDefault();
        return false;
    }
    
    function crackElement(e){
        // 兼容其它腳本
        if (e.ctrlKey || e.altKey || e.shiftKey)
            return ;

        $(this).unbind('click');
        this.onclick = pictureView;
        
        return false;
    }
    
    //document.addEventListener('DOMContentLoaded', function(){
        exportFunction(function() {}, unsafeWindow, {defineAs: "open"});
        //unsafeWindow.$('.BDE_Image').unbind();
        $('.BDE_Image').mousedown(crackElement);
        $('.j_user_sign').mousedown(crackElement);
        /*$(document).on('mousedown', '.BDE_Image', function(e){
            // 兼容其它腳本
            if (e.ctrlKey || e.altKey || e.shiftKey)
               return ;
            
            //$(this).unbind('click');
            this.onclick = pictureView;
        });*/
    //}, true);
})();