Maison interface Web js tutoriel 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;
            
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le prix d'origine des pièces Melania? Combien USD devrait monter à Melania Quel est le prix d'origine des pièces Melania? Combien USD devrait monter à Melania Feb 15, 2025 pm 05:06 PM

Quel est le prix d'origine des pièces Melania? Combien USD devrait monter à Melania

Quel logiciel peut faire du bitcoin? Top 10 des recommandations de logiciels de trading Bitcoin en 2025 Quel logiciel peut faire du bitcoin? Top 10 des recommandations de logiciels de trading Bitcoin en 2025 Feb 21, 2025 pm 09:30 PM

Quel logiciel peut faire du bitcoin? Top 10 des recommandations de logiciels de trading Bitcoin en 2025

Application Gateio Exchange Ancienne version GATEIO Exchange App Old Version Télécharger la chaîne de téléchargement Application Gateio Exchange Ancienne version GATEIO Exchange App Old Version Télécharger la chaîne de téléchargement Mar 04, 2025 pm 11:36 PM

Application Gateio Exchange Ancienne version GATEIO Exchange App Old Version Télécharger la chaîne de téléchargement

Quel est le meilleur logiciel de visualisation du marché? Quel est le meilleur logiciel de visualisation du marché? Feb 21, 2025 pm 09:48 PM

Quel est le meilleur logiciel de visualisation du marché?

Résumé du logiciel essentiel pour le cercle de devises 2025 Résumé du logiciel essentiel pour le cercle de devises 2025 Feb 21, 2025 pm 09:42 PM

Résumé du logiciel essentiel pour le cercle de devises 2025

OUYI OFFICIEL ENTRÉE DE CONNECTION 2025 OUYI OKX TRADING Plateforme Version officielle Entrée OUYI OFFICIEL ENTRÉE DE CONNECTION 2025 OUYI OKX TRADING Plateforme Version officielle Entrée Feb 15, 2025 pm 07:15 PM

OUYI OFFICIEL ENTRÉE DE CONNECTION 2025 OUYI OKX TRADING Plateforme Version officielle Entrée

Les 10 principales plates-formes d'applications de trading de devises répertorient le dernier classement des 10 premiers échanges de devises Les 10 principales plates-formes d'applications de trading de devises répertorient le dernier classement des 10 premiers échanges de devises Feb 21, 2025 pm 09:33 PM

Les 10 principales plates-formes d'applications de trading de devises répertorient le dernier classement des 10 premiers échanges de devises

Le dernier prix du bitcoin en 2018-2024 USD Le dernier prix du bitcoin en 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Le dernier prix du bitcoin en 2018-2024 USD

See all articles