手把手教你开发Chrome扩展二:为html添加行为

来源:互联网 发布:向量的斜对称矩阵 编辑:程序博客网 时间:2024/04/28 05:02

上一节我们已经讲了Chrome扩展的基础知识,并构建了基础的html,这一节我们将就html DOM添加部分添加脚本,即脚本在我们的popup页面中进行的操作,页面所产生的变化。

正常情况下数据处理加载完成状态,这些数据是从本地数据读取的。

点击“添加新项”,出现输入框,输入文字后回车提交数据:

添加完成后将数据存储,同时添加DOM元素:

考虑到功能最简化处理,点击已标为完成的任务,将提示“删除或重置为未完成”:

以上功能为最核心功能,可以在此基础上进行扩展,比如任务分组,修改任务,任务提醒,网络同步数据等等。

下面开始相应的脚本内容。

为了避免全局变量,使用匿名函数方式,所有事件处理及数据绑定均在此函数中进行,同时定义与jQuery中的$()类似的函数:

(function(){
    var $=function(id){return document.getElementById(id);}
})();

建立Tasks对象,定义show()函数和hide()函数,同时存储几个常用的DOM对象。

var Tasks = {
  show:function(obj){
    obj.className='';
    return this;
  },
  hide:function(obj){
    obj.className='hide';
    return this;
  },
  //存储dom
  $addItemDiv:$('addItemDiv'),
  $addItemInput:$('addItemInput'),
  $txtTaskTitle:$('txtTaskTitle'),
  $taskItemList:$('taskItemList')
}

其中show()函数和hide()函数均使用了链式调用,每次执行此函数均会返回对象本身,这样对象就可以使用形如类似jQuery书写方式来使用此函数。

然后注册事件:

//.....
//初始化
init:function(){
    /*注册事件*/
    //打开添加文本框
    Tasks.$addItemDiv.addEventListener('click',function(){
        Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
        Tasks.$txtTaskTitle.focus();
    },true);
    //回车添加
    Tasks.$txtTaskTitle.addEventListener('keyup',function(ev){
        var ev=ev || window.event;
        if(ev.keyCode==13){
            //TODO:写入本地数据
            Tasks.AppendHtml(task);
            Tasks.$txtTaskTitle.value='';
            Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
        }
        ev.preventDefault();
    },true);
    //取消
    Tasks.$txtTaskTitle.addEventListener('blur',function(){
        Tasks.$txtTaskTitle.value='';
        Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
    },true);
    //TODO:初始化数据,加载本地数据,生成html         
},
//....

其中待完成部分为我们下一节将重点计到的html5的本地存储功能。再定义数据操作部分,先写上空白函数:

//....
//增加
Add:function(){
    //TODO
},
//修改
Edit:function(){
    //TODO
},
//删除
Del:function(){
    //TODO
},
//...

还需要初始化此函数使其执行并让匿名函数执行:

(function(){
    var Tasks = {
//***
    }
    Tasks.init();
})();

好吧,以下就是本节中所要提到的全部代码:

(function(){
    var $=function(id){return document.getElementById(id);}
    var Tasks = {
        show:function(obj){
            obj.className='';
            return this;
        },
        hide:function(obj){
            obj.className='hide';
            return this;
        },
        //存储dom
        $addItemDiv:$('addItemDiv'),
        $addItemInput:$('addItemInput'),
        $txtTaskTitle:$('txtTaskTitle'),
        $taskItemList:$('taskItemList'),
        //初始化
        init:function(){
            /*注册事件*/
            //打开添加文本框
            Tasks.$addItemDiv.addEventListener('click',function(){
                Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
                Tasks.$txtTaskTitle.focus();
            },true);
            //回车添加
            Tasks.$txtTaskTitle.addEventListener('keyup',function(ev){
                var ev=ev || window.event;
                if(ev.keyCode==13){
                    //TODO:写入本地数据
                    Tasks.AppendHtml(Tasks.$txtTaskTitle.value);
                    Tasks.$txtTaskTitle.value='';
                    Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
                }
                ev.preventDefault();
            },true);
            //取消
            Tasks.$txtTaskTitle.addEventListener('blur',function(){
                Tasks.$txtTaskTitle.value='';
                Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
            },true);
            //TODO:初始化数据,加载本地数据,生成html         
        },
        //增加
        Add:function(){
            //TODO
        },
        //修改
        Edit:function(){
            //TODO
        },
        //删除
        Del:function(){
            //TODO
        },
        AppendHtml:function(title){
            var oDiv=document.createElement('div');
            oDiv.className='taskItem';
            var oLabel=document.createElement('label');
            oLabel.className= 'on';
            var oSpan=document.createElement('span');
            oSpan.className='taskTitle';
            var oText=document.createTextNode(title);
            oSpan.appendChild(oText);
            oDiv.appendChild(oLabel);
            oDiv.appendChild(oSpan);
            //注册事件
            oDiv.addEventListener('click',function(){
                //TODO
            },true);
            Tasks.$taskItemList.appendChild(oDiv); 
        },
        RemoveHtml:function(){
            //TODO
        }
    }
    Tasks.init();
})();
代码中尚未实现的部分,我们将会在下节详细讲解其实现。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1279) | 评论(0) | 转发(0) |
0

上一篇:HTML5简单介绍

下一篇:手把手教你开发Chrome扩展三:关于本地存储数据

相关热门文章
  • JavaSript模块规范 - AMD规范...
  • Modernizr的介绍和使用
  • Web调试利器fiddler介绍
  • js验证固定电话、手机号码...
  • 利用Extjs导出excel文件
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
原创粉丝点击