css - javascript单体问题,求解答
天蓬老师
天蓬老师 2017-04-10 16:13:04
[JavaScript讨论组]

出现如图的错误,代码贴在下面

//单例模式
var desk = (function(){
    var unique;
    function getInstance(){
        if(unique === undefined){
            unique = new Desk();
        }
        return unique;
    }

    //getInstance();
    return {
        getInstance:getInstance
    };


    /*
    桌面类
     */
    function Desk(){
        this.desk_main = document.getElementsByClassName('desk_main')[0];
        this.desk_top_navbar = document.getElementsByClassName('desk_top_navbar')[0];//顶部导航
        this.sub_desk = document.getElementsByClassName('sub_desk');//子桌面
        //alert(desk_main);
        this.desk_num = 5;//子桌面个数
        this.desk_index = this.desk_oldindex = 0;//当前字桌面索引
        this.pageNumber = document.getElementsByClassName('pageNumber')[0];
        this.aA = this.pageNumber.getElementsByTagName('a');//顶部导航数字按钮
        this.desk_top_navbar_wrap = document.getElementsByClassName('desk_top_navbar_wrap')[0];
        this.tool = document.getElementsByClassName('tool')[0];
        this.user = document.getElementsByClassName('user')[0];
        this.iTop = 30;
        this.iRight = 40;
        this.appSelector = 'desk_app';
        this.appHeight = 88;
        this.appWidth = 88;
        this.sortType = 0;//图标排列方式0竖排 1横排
        this.deskHeight = this.sub_desk[0].offsetHeight;
        this.deskWidth = this.sub_desk[0].offsetWidth;
        this.minZIndex = 100;
        this.textMenuHtml = '';//暂时不用
        this.textMenu = document.getElementsByClassName('textMenu')[0];//右键菜单
        this.appTextMenu = document.getElementsByClassName('appTextMenu')[0];//app右键菜单
        this.appName = 'app_name';
        this.appImg = 'app_img';
        this.sideBar = document.getElementsByClassName('side_bar')[0];
        //this.skinp = document.getElementsByClassName('skin')[0];    //皮肤设置区域
        //this.skinSetBtn = document.getElementsByClassName('pannel')[0];//皮肤设置按钮
        this.isAcitive = false;//用来判断背景设置弹窗是否被激活
        this.scrollBar_item = null;//背景设置弹窗滚动条
        this.bg = null;//背景设置弹窗滚动条控制区域
        this.scrollSpeed = 10;
        //console.log(this)
        this.doInit();
    }
    Desk.prototype = {
        constructor:'Desk',
        doInit:function(){
            this.setLayer();
            this.setNumNavBar();
            this.setScroll();
            this.setAppPos();
            this.setAppDrag();
            this.setTextMenu();
            this.blind();
            this.setSkin();
            this.sideBarPop();
        },
        /*
        桌面整体布局
         */
        setLayer:function(){
            //布局转换
            var _this = this;
            var top = _this.desk_main.offsetTop;
            with(_this.desk_main.style){
                position = 'absolute';
                width = this.desk_num*100+'%';
                left = 0;
                top = top + 'px';
                height = viewH() - _this.desk_top_navbar.offsetHeight-_this.desk_top_navbar.offsetTop + 'px';
            }
            var width = parseInt(1/_this.desk_num*100);
            for(var i=0;i<_this.sub_desk.length;i++){
                _this.sub_desk[i].style.width = width +'%';
            }
            //for()
        },
        /*
        设置app的排列方式
         */
        setAppPos:function(){
            var _this = this;
            var rows = Math.floor(_this.deskHeight/(_this.iTop+_this.appHeight));
            var cols = Math.floor(_this.deskWidth/(_this.iRight+_this.appWidth));
            for(var i=0;i<_this.sub_desk.length;i++){
                var apps = _this.sub_desk[i].getElementsByClassName(_this.appSelector);
                //console.log(apps);
                var pos = [];
                for(var j=0;j0){
                        cur += _this.scrollSpeed;
                        //scrollBar_item.sty
                        //_this.bg.style.top = 
                    }else{
                        cur -= _this.scrollSpeed;
                    }
                    if(cur<0){
                            cur=0
                    }else if(cur>_this.scrollBar_item.parentNode.offsetHeight-_this.scrollBar_item.offsetHeight){
                        cur = _this.scrollBar_item.parentNode.offsetHeight-_this.scrollBar_item.offsetHeight
                    }
                    var scale = cur/(_this.scrollBar_item.parentNode.offsetHeight-_this.scrollBar_item.offsetHeight);
                    _this.bg.style.top = -(_this.bg.offsetHeight-_this.scrollBar_item.parentNode.offsetHeight)*scale+'px';
                    _this.scrollBar_item.style.top = cur+'px';
                }else{
                    if(detail>0){
                        _this.desk_index++;
                        if(_this.desk_index==_this.desk_num){
                            _this.desk_index = 0;
                        }
                    }else{
                        _this.desk_index--;
                        if(_this.desk_index<0){
                            _this.desk_index = _this.desk_num-1;
                        }
                    }
                    _this.aA[_this.desk_oldindex].className = '';
                    _this.aA[_this.desk_index].className = 'on';
                    _this.desk_oldindex = _this.desk_index;
                    startMove(_this.desk_main,{
                        'left':-viewW()*_this.desk_index
                    },300,'Back easeOut');
                }
            }
            /*
            防止某一事件连续触发
             */
            var _timer = {};
            function delay_till_last(id,fn,wait){
                if(_timer[id]){
                    clearTimeout(_timer[id]);
                    delete _timer[id];
                }
                return _timer[id] = setTimeout(function(){
                    fn();
                    delete _timer[id];
                },wait);
            }
        },
        setAppDrag:function(){
            var _this = this;
            for(var i=0;i<_this.sub_desk.length;i++){
                var apps = _this.sub_desk[i].getElementsByClassName(_this.appSelector);
                var pos = [];
                for(var j=0;jscrollBar.offsetHeight-_this.scrollBar_item.offsetHeight){
                        t = scrollBar.offsetHeight-_this.scrollBar_item.offsetHeight;
                    }
                    scale = t/(scrollBar.offsetHeight-_this.scrollBar_item.offsetHeight);
                    _this.bg.style.top = -(_this.bg.offsetHeight-scrollBar.offsetHeight)*scale+'px';
                    //scrollBar_item.style.left = l + 'px';
                    _this.scrollBar_item.style.top = t + 'px';
                };
                document.onmouseup = function(){
                    this.onmousemove = null;
                    this.onmouseup = null;
                }
            };
        },
        sideBarPop:function(){
            var _this = this;
            var btn = _this.sideBar.getElementsByClassName('q')[0];
            var popMenu = _this.sideBar.getElementsByClassName('side_bar_menu')[0];
            var oExit = _this.sideBar.getElementsByClassName('exit')[0];

            btn.onclick = function(){
                startMove(popMenu,{
                    'left':popMenu.parentNode.offsetWidth + 10
                },300,'Back easeInOut');
            };
            oExit.onclick = function(){
                startMove(popMenu,{
                    'left':-popMenu.offsetWidth
                },300,'Back easeInOut');
            };
        }
    };
})();
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
ringa_lee

将你的

    return {
        getInstance:getInstance
    };

修改成

    return getInstance;

因为你的desk是个闭包,你这个闭包的要执行的是getInstance方法,但是你却return了一个对象,这样的话在执行desk()的时候自然报错。
这个是我的答案

<script type="text/javascript">
var desk = (function(){
    var unique;
    function getInstance(){
        if(unique === undefined){
            unique = new Desk();
        }
        return unique;
    }
    function Desk(){
        this.doInit();
    }
    Desk.prototype = {
        constructor:'Desk',
        doInit:function(){
            console.log(20151115); //在控制台里面显示了20151115,说明修改成功。
        }
    };
    return {
        getInstance:getInstance
    };
})();
desk();
</script>

亲测可用。

天蓬老师

这写的是什么年代的代码啊,又是 DOMMouseScroll 又是一堆 getElementsByClassName

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号