Rumah hujung hadapan web tutorial js js类 from qq_javascript技巧

js类 from qq_javascript技巧

May 16, 2016 pm 07:24 PM
from qq

复制代码 代码如下:

var Comment = new Object();

var $C = function(tagName)
{
    return document.createElement(tagName);
};
String.prototype.trim = function()
{
    return this.replace(/^\s*|\s*$/g,"");
};
String.prototype.realLength = function()
{
    return this.replace(/[^\x00-\xff]/g,"**").length;
};
String.prototype.left = function(n)
{
    if (this.length > n)
    {
        return this.substr(0, n) + '...';
    }
    else
    {
        return this;
    }
};
Array.prototype.remove = function(n)
{
    if (n     {
        return this;
    }
    else
    {
        return this.slice(0, n).concat(this.slice(n + 1, this.length));
    }
};
function findPosX(obj) 
{
    var curleft = 0;
    if (obj && obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else if (obj && obj.x) curleft += obj.x;
    return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    if (obj && obj.offsetParent) 
    {
        while (obj.offsetParent) 
        {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    } 
    else if (obj && obj.y) curtop += obj.y;
    return curtop;
}
var input_domain = 'http://input.comment.qq.com';
var index_domain = 'http://comment1.qq.com';
var pinglun_domain = 'http://pinglun.qq.com';
var js_domain = 'http://pinglun.qq.com';
var img_domain = 'http://mat1.qq.com/pinglun';
Comment.Configure = {
    version:                '1.0',
    newline:                '\n',
    site_length:            20,
    key_length:                20,
    id_length:                10,
    index_line_sum:            10000,
    index_width:            5,
    default_mode:            'origin_count',
    default_order:            1,
    default_reply_per_page:    10,
    quote_str_len:            60,
    intro_len:                150,
    debate_intro_len:        200,
    content_len:            200,
    reply_default_title:    '请填写标题',
    intro_min_length:        20,
    request_delay:            100,
    login_frame_delay:        2000,
    reply_type_def:            {
        '1':    '[精] ',
        '2':    '[荐] ',
        '3':    '[专] '
    },
    postUrl:                input_domain + '/post.cmt',
    logoutUrl:                input_domain + '/cgi-bin/qqlogout',
    commentIndex:            'http://pinglun.qq.com/',
    loginIframeUrl:            index_domain + '/i_login.htm',
    defaultLogoUrl:            img_domain + '/images/defpic.jpg'
}

Comment.Define = {
    getReplyType: function(type)
    {
        if (Comment.Configure.reply_type_def[type])
        {
            return Comment.Configure.reply_type_def[type];
        }
        else
        {
            return '';
        }
    }
}

Comment.PGV_Count = function(option)
{
    if (typeof(pgvMain) == 'function')
    {
        pvRepeatCount = 1;
        pvCurDomain = sDomain;
        if (option)
        {
            if (option.domain)
            {
                pvCurDomain = option.domain;
            }
            if (option.path)
            {
                pvCurUrl = option.path;
            }
        }
        pgvMain();
        //Debug.log('call pgv function');
    }
}

Comment.UrlFactory = {
    get3LevelDir: function(id)
    {
        var path = parseInt(id / 1000000) + '/';
        path += parseInt(id / 1000) + '/';
        path += id / 1;
        return path;
    },
    getCommentUrl: function(id)
    {
        return (this.get3LevelDir(id) + '/');
    },
    getDebateUrl: function(id)
    {
        return this.get3LevelDir(id);
    },
    getUserUrl: function(id)
    {
        return this.get3LevelDir(id);
    },
    getReplyUrl: function(key)
    {
        var path = key.substr(0, 8);
        path += '/' + (key.substr(8, 4));
        path += '/' + (key.substr(12, 2));
        path += '/' + key;
        return path;
    },
    getIndexUrl: function(id)
    {
        var length = id.toString().length;
        if (length         {
            for (var i = 0; i             {
                id = '0' + id;
            }
        }
        return id;
    },
    getIndexDir: function(mode)
    {
        var modes = {
            'origin_count':    'originindex',
            'total_count':    'allindex',
            'top_count':    'topindex'
        };
        return modes[mode];
    },
    getRangeHeader: function(start, length, line_len)
    {
        var range_start = start * line_len;
        var range_length = length * line_len;
        return ['Range','bytes=' + range_start + '-' + (parseInt(range_start) + parseInt(range_length) - 1 - Comment.Configure.newline.length)];
    },
    getCommentNormalUrl: function(site, id)
    {
        return 'comment.htm?site=' + site + '&id=' + id;
    },
    getCommentGroupUrl: function(site, id)
    {
        return 'comment_group.htm?site=' + site + '&id=' + id;
    },
    getCommentDebateUrl: function(site, id)
    {
        return 'comment_debate.htm?site=' + site + '&id=' + id;
    },
    getCommentUserUrl: function(uin)
    {
        return 'comment_user.htm?uin=' + uin;
    },
    getCommentUserLink: function(uin, nick)
    {
        return '' + (nick ? nick : uin) + '';
    },
    getCommentListLink: function(site_en, site_cn, sort_en, sort_cn, className)
    {
        if (className)
        {
            className = 'class="' + className + '"';
        }
        else
        {
            className = '';
        }
        return '评论首页 >> '
            + '' + site_cn + ' >> '
            + '' + sort_cn + '';
    }
}

Comment.ContentFormat = {
    decode: function(content)
    {
        return content.split(Comment.Configure.newline);
    }
}

Comment.DataObjectFactory = function(content, model)
{
    content = Comment.ContentFormat.decode(content);
    var dataModel = Comment.DataObject[model];
    if (content.length - 1 != dataModel.length)
    {
        if (model != 'commentinfo' && model != 'listsum')
        {
            //alert('[DEBUG 信息] O/R 映射失败,远程数据和本地模型数量不匹配!请检查!');
        }
    }
    var dataObject = new Object();
    for (var i = 0; i     {
        dataObject[dataModel[i]] = content[i];
    }
    return dataObject;
}

Comment.DataObject = {
    'commentinfo':
    [
        'site_cn',
        'sort_en',
        'sort_cn',
        'source',
        'source_url',
        'title',
        'url',
        'intro',
        'intro_img',
        'group_id',
        'intro_show',
        'create_time',
        'debate_id'
    ],
    'groupinfo':
    [
         'site_cn',
        'title',
        'url',
        'intro',
        'intro_img',
        'comment_id',
        'intro_show',
        'create_time'
    ],
    'debateinfo':
    [
         'site_cn',
        'title',
        'url',
        'intro',
        'intro_img',
        'agree_id',
        'disagree_id',
        'middle_id',
        'intro_show',
        'create_time'
    ],
    'sum':
    [
         'origin_count',
        'total_count',
        'top_count'
    ],
    'reply':
    [
        'comment_id',
        'uin',
        'nickname',
        'pub_time',
        'pass_time',
        'ip',
        'title',
        'content',
        'reply_key',
        'is_del',
        'reply_type',
        'reply_kind',
        'tips'
    ],
    'pksum':
    [
         'agree',
        'disagree',
        'middle'
    ],
    'listsum':
    [
        'all'
    ],
    'usersum':
    [
         'total_count',
        'top_count',
        'is_expert'

    ],
    'userinfo':
    [
         'user_img',
        'user_intro'
    ]
}

/* 控制器类 */
Comment.Control = new Object();

/* 分页控制器 */
Comment.Control.Pagination = Class.create();
Comment.Control.Pagination.prototype = {
    initialize: function(option)
    {
        this.totalPage = option.totalPage;
        this.currPage = 1;
        this.zoom_start = 3;
        this.zoom_end = 613;
        this.bindControl();
    },
    reset: function(option)
    {
        this.totalPage = option.totalPage;
        this.currPage = 1;
        this.movePageControl(this.currPage);
    },
    updateOrder: function()
    {

    },
    countCurrPage: function(offset)
    {
        var page = parseInt(offset * this.totalPage / this.zoom_end) + 1;
        if (page > this.totalPage)
        {
            page = this.totalPage;
        }
        return page;
    },
    movePageControl: function(toPage)
    {
        if (toPage  this.totalPage)
        {
            return;
        }
        var offset = 0;
        if (toPage == 1)
        {
            offset = this.zoom_start;
        }
        else if (toPage == this.totalPage)
        {
            offset = this.zoom_end;
        }
        else
        {
            offset = this.zoom_start + (toPage - 1) * (this.zoom_end / (this.totalPage - 1));
        }
        $('scrfloat').style.left = offset + 'px';
        //$('scrfloat_2').style.left = offset + 'px';
    },
    bindControl: function()
    {
        var self = this;
        var tooltip = $('Page_tip');
        var offsetX = 10;
        var offsetY = -10;
        function getSite(o)
        {
            var obj = o;
            var objS = obj.offsetLeft;
            while (obj != obj.offsetParent && obj.offsetParent)
            {
                obj = obj.offsetParent;
                if (obj.tagName == 'span')
                {
                    objS += obj.offsetLeft;
                }
            }
            return objS;
        }
        Event.observe($('scr'), 'mousedown', mDown, false);
        //Event.observe($('scr_2'), 'mousedown', mDown, false);
        var flag = false;
        function mDown()
        {
            flag = true;
            if(window.event.srcElement.id != 'scr'
               && window.event.srcElement.id != 'scr_2')
            {
                $('scrfloat').style.left = $('scrfloat').offsetLeft;
                //$('scrfloat_2').style.left = $('scrfloat').style.left;
            }
            else
            {
                $('scrfloat').style.left = (window.event.x - 5);
                //$('scrfloat_2').style.left = $('scrfloat').style.left;
            }
            tooltip.style.display = 'block';
            t = $('scrfloat').offsetLeft;
            tooltip.innerHTML = self.countCurrPage(t);
            tooltip.style.left = window.event.clientX + offsetX + 'px';
            tooltip.style.top = window.event.clientY + offsetY + document.documentElement.scrollTop + 'px';
        }
        function mMove()
        {
            if(flag)
            {
                $('scrfloat').style.left = window.event.clientX - getSite($('scr')) - 5 + 'px';
                //$('scrfloat_2').style.left = window.event.clientX - getSite($('scr')) - 5 + 'px';
            }
            if (parseInt($('scrfloat').style.left.replace('px', '')) > self.zoom_end)
            {
                $('scrfloat').style.left = self.zoom_end + 'px';
                //$('scrfloat_2').style.left = $('scrfloat').style.left;
            }
            if (parseInt($("scrfloat").style.left.replace('px', ''))             {
                $('scrfloat').style.left = self.zoom_start + 'px';
                //$('scrfloat_2').style.left = $('scrfloat').style.left;
            }
            if (flag)
            {
                t = $('scrfloat').offsetLeft;
                tooltip.innerHTML = self.countCurrPage(t);
                tooltip.style.left = window.event.clientX + offsetX + 'px';
                tooltip.style.top = window.event.clientY + offsetY + document.documentElement.scrollTop + 'px';
            }
        }  
        function mUp()
        {
            if (flag)
            {
                t = $('scrfloat').offsetLeft;
                self.setCurrPage(self.countCurrPage(t));
            }
            flag = false;
            tooltip.style.display = 'none';
        }

        function mEnd()
        {
            window.event.returnValue = false;
        }

        window.document.onmousemove = mMove;
        window.document.ondragstart = mEnd;
        window.document.onmouseup = mUp;

        Event.observe($('up'), 'click', mUpBtn, false);
        Event.observe($('down'), 'click', mDownBtn, false);
        function mUpBtn()
        {
            self.setCurrPage(self.currPage - 1, 1);
        }
        function mDownBtn()
        {
            self.setCurrPage(self.currPage + 1, 1);
        }
    },
    nextPage: function()
    {
        if (this.currPage         {
            ++this.currPage;
            this.onPageChange();
        }
    },
    previousPage: function()
    {
        if (this.currPage > 0)
        {
            --this.currPage;
            this.onPageChange();
        }
    },
    setCurrPage: function(page, move)
    {
        if (page > 0 && page         {
            this.currPage = page;
            this.onPageChange();
            if (move != null)
            {
                this.movePageControl(page);
            }
        }
    },
    onPageChange: function()
    {
    },
    getCurrPage: function()
    {
        return this.currPage;
    }
}

Comment.Iterator = {
    getIndex: function(objComment)
    {
        var rangeList = new Array();
        function getIndexId(reply_id)
        {
            return parseInt(reply_id / Comment.Configure.index_line_sum);
        }
        function getReplyPos(reply_id)
        {
            return (reply_id % Comment.Configure.index_line_sum);
        }

        if (objComment.order == 0)
        {
            var reply_start = (objComment.currPage - 1) * objComment.replyPerPage;
            var start_index_id = getIndexId(reply_start);
            var start_reply_id = getReplyPos(reply_start);
            var currReply = 1;
            var replySum = 0;
            while (currReply++)
            {
                if (reply_start + currReply > objComment.totalReply)
                {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(start_reply_id, currReply - replySum - 1, objComment.index_line_len)
                    });
                    break;
                }
                if (currReply == objComment.replyPerPage)
                {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(start_reply_id, currReply - replySum, objComment.index_line_len)
                    });
                    break;
                }
                if (start_reply_id + currReply > Comment.Configure.index_line_sum)
                {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(start_reply_id, currReply, objComment.index_line_len)
                    });
                    start_index_id++;
                    start_reply_id = 0;
                    replySum = currReply - 1;
                }
            }
        }
        else
        {
            var reply_start = objComment.totalReply - 1 - (objComment.currPage - 1) * objComment.replyPerPage;
            var start_index_id = getIndexId(reply_start);
            var start_reply_id = getReplyPos(reply_start);
            var currReply = 1;
            var replySum = 0;
            while (currReply++)
            {
                if (reply_start - currReply                 {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, objComment.index_line_len)
                    });
                    break;
                }
                if (currReply == objComment.replyPerPage)
                {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(start_reply_id - currReply + replySum + 1, currReply - replySum, objComment.index_line_len)
                    });
                    break;
                }
                if (start_reply_id - currReply                 {
                    rangeList.push({
                        url:    Comment.UrlFactory.getIndexUrl(start_index_id),
                        range:    Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, objComment.index_line_len)
                    });
                    start_index_id--;
                    start_reply_id = Comment.Configure.index_line_sum - 1;
                    replySum = currReply;
                }
            }
        }
        return rangeList;
    }
}

/* 显示样式控制器 */
Comment.Control.Display = Class.create();
Comment.Control.Display.prototype = {
    initialize: function()
    {
    }
}

/* 页面显示类 */
Comment.Page = new Object();
/* 评论页控制接口 */
Comment.Page.Base = {
    changeMode: function(mode)
    {
        this.mode = mode;
        this.totalReply = this.data_sum[mode];
        this.totalPage = parseInt(this.totalReply / this.replyPerPage)
            + (this.totalReply % this.replyPerPage != 0 ? 1 : 0);
    },
    changeOrder: function(order)
    {
        if (this.order == order)
            return;
        this.order = order;
        this.currPage = 1;
        this.resetPageControl();
        this.bindPageNav();
        this.bindReplyList();
        this.bindOrderControl();
    },
    bindOrderControl: function()
    {
        var self = this;
        if (self.order == 0)
        {
            $('order_front').style.cursor = 'none';
            $('order_front').style.color = '#000';
            $('order_front').onclick = function(e)
            {
                return false;
            }
            $('order_desc').style.cursor = 'pointer';
            $('order_desc').style.color = '#3B78AF';
            $('order_desc').onclick = function()
            {
                self.changeOrder(1);
                return false;
            }
        }
        else if (self.order == 1)
        {
            $('order_front').style.cursor = 'pointer';
            $('order_front').style.color = '#3B78AF';
            $('order_front').onclick = function(e)
            {
                self.changeOrder(0);
                return false;
            }
            $('order_desc').style.cursor = 'none';
            $('order_desc').style.color = '#000';
            $('order_desc').onclick = function()
            {
                return false;
            }
        }
    },
    bindRowsPerPage: function()
    {
        var self = this;
        $A($('rows_page').getElementsByTagName('a')).each(function(button)
        {
            button.onclick = function()
            {
                self.replyPerPage = button.value;
                self.currPage = 1;
                self.resetPageControl();
                self.bindPageNav();
                self.bindReplyList();
                return false;
            }
        });
    },
    selectTab: function(mode)
    {
        var self = this;
        $A($('mode_tab').getElementsByTagName('p')).each(function(tab)
        {
            if (tab.value == mode)
            {
                $A($('mode_tab').getElementsByTagName('p')).each(function(t)
                {
                    if (t.value != '')
                    {
                        t.className = 'none';
                    }
                });
                tab.className = 'c';
            }
        });
    },
    appendTab: function(option)
    {
        var pTab = $C('p');
        pTab.innerHTML = option.title;
        pTab.value = '';
        $('mode_tab').appendChild(pTab);
        pTab.onclick = function()
        {
            window.open(option.url);
        }
        return false;
    },
    bindTabControl: function()
    {
        var self = this;
        $A($('mode_tab').getElementsByTagName('p')).each(function(tab)
        {
            var mode = tab.value;
            if (mode != '')
            {
                tab.onclick = function()
                {
                    $A($('mode_tab').getElementsByTagName('p')).each(function(t)
                    {
                        t.className = 'none';
                    });
                    this.className = 'c';
                    self.currPage = 1;
                    self.changeMode(mode)
                    self.resetPageControl();
                    self.bindPageNav();
                    self.bindReplyList();
                    return false;
                }
            }
        });
    },
    bindPageRandom: function()
    {
        var self = this;
        $A($('page_random', 'page_random_2')).each(function(button)
        {
            button.onclick = function()
            {
                if (self.totalPage == 1)
                {
                    self.currPage = 1;
                }
                else
                {
                    self.currPage = Math.floor(Math.random() * (self.totalPage + 1));
                    if (self.currPage == 0)
                    {
                        self.currPage = 1;
                    }
                }
                self.bindPageNav();
                self.bindReplyList();
                return false;
            
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Berapakah harga asal duit syiling Melania? Berapa banyak USD dijangka akan meningkat ke Melania Berapakah harga asal duit syiling Melania? Berapa banyak USD dijangka akan meningkat ke Melania Feb 15, 2025 pm 05:06 PM

Berapakah harga asal duit syiling Melania? Berapa banyak USD dijangka akan meningkat ke Melania

Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Feb 21, 2025 pm 09:30 PM

Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025

GATEIO EXCHANGE Versi lama Gateio Exchange App Versi Lama Saluran Muat turun GATEIO EXCHANGE Versi lama Gateio Exchange App Versi Lama Saluran Muat turun Mar 04, 2025 pm 11:36 PM

GATEIO EXCHANGE Versi lama Gateio Exchange App Versi Lama Saluran Muat turun

Perisian tontonan pasaran terbaik? Perisian tontonan pasaran terbaik? Feb 21, 2025 pm 09:48 PM

Perisian tontonan pasaran terbaik?

Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Feb 21, 2025 pm 09:42 PM

Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025

OUYI Masuk Login Rasmi 2025 OUYI OKX Platform Perdagangan Versi Rasmi OUYI Masuk Login Rasmi 2025 OUYI OKX Platform Perdagangan Versi Rasmi Feb 15, 2025 pm 07:15 PM

OUYI Masuk Login Rasmi 2025 OUYI OKX Platform Perdagangan Versi Rasmi

Platform Apl Perdagangan Top 10 Top menyenaraikan kedudukan terbaru 10 pertukaran mata wang teratas Platform Apl Perdagangan Top 10 Top menyenaraikan kedudukan terbaru 10 pertukaran mata wang teratas Feb 21, 2025 pm 09:33 PM

Platform Apl Perdagangan Top 10 Top menyenaraikan kedudukan terbaru 10 pertukaran mata wang teratas

Harga terbaru Bitcoin pada 2018-2024 USD Harga terbaru Bitcoin pada 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Harga terbaru Bitcoin pada 2018-2024 USD

See all articles