• todolist_高级写法


    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        <title>ToDoList—最简单的待办事项列表</title>
        <meta name="description" content="ToDoList无须注册即可使用,数据存储在用户浏览器的html5本地数据库里,是最简单最安全的待办事项列表应用!">
        <title>ToDoList</title>
        <style type="text/css">
            body {
                margin:0;
                padding:0;
                font-size:16px;
                background: #CDCDCD;
            }
            header {
                height:50px;
                background:#333;
                background:rgba(47,40,45,0.70);
            }
            section{
                margin:0 auto;
            }
            label{
                float:left;
                100px;
                line-height:50px;
                color:#DDD;
                font-size:24px;
                cursor:pointer;
                font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
            }
            header input{
                float:right;
                60%;
                height:24px;
                margin-top:12px;
                /*首行缩进*/
                text-indent:10px;
                border-radius:5px;
                /*向框添加一个或多个阴影。该属性是由逗号分隔的阴影列表,每个阴影由 2-4 个长度值、可选的颜色值以及可选的 inset 关键词来规定。省略长度的值是 0*/
                box-shadow: 0 1px 0 rgba(255,255,255,0.24), 0 1px 6px rgba(0,0,0,0.45) inset;
                border:none
            }
            input:focus{
                /*属性设置元素整个轮廓的宽度,只有当轮廓样式不是 none 时,这个宽度才会起作用*/
                outline-0
            }
            h2{
                position:relative;
            }
            span{
                position:absolute;
                top:2px;
                right:5px;
                display:inline-block;
                padding:0 5px;
                height:20px;
                border-radius:20px;
                background:#E6E6FA;
                line-height:22px;
                text-align:center;
                color:#666;
                font-size:14px;
            }
            ol,ul{
                padding:0;
                list-style:none;
            }
            li input{
                position:absolute;
                top:2px;
                left:10px;
                22px;
                height:22px;
                cursor:pointer;
            }
            p{
                margin: 0;
            }
            li p input{
                top:3px;
                left:40px;
                70%;
                height:20px;
                line-height:14px;
                text-indent:5px;
                font-size:14px;
            }
            li{
                height:32px;
                line-height:32px;
                background: #fff;
                position:relative;
                margin-bottom: 10px;
                padding:0 45px;
                border-radius:3px;
                border-left: 5px solid #629A9C;
                box-shadow: 0 1px 2px rgba(0,0,0,0.07);
            }
            ol li{
                cursor:move;
            }
            ul li{
                border-left: 5px solid #999;
                /*不透明度*/
                opacity: 0.5;
            }
            li a{
                position:absolute;
                top:2px;
                right:5px;
                display:inline-block;
                14px;
                height:12px;
                border-radius:14px;
                border:6px double #FFF;
                background:#CCC;
                line-height:14px;
                text-align:center;
                color:#FFF;
                font-weight:bold;
                font-size:14px;
                cursor:pointer;
            }
            footer{
                color:#666;
                font-size:14px;
                text-align:center;
            }
            footer a{
                color:#666;
                text-decoration:none;
                color:#999;
            }
            /*页面宽度等于620时候执行里面代码*/
            @media screen and (max-device- 620px) {
                section{96%;padding:0 2%;}
            }
            /*当浏览器尺寸大于620px时候的代码了*/
            @media screen and (min- 620px) {
                section{600px;padding:0 10px;}
            }
        </style>
    </head>
    <body>
    <header>
        <section>
            <form action="javascript:postaction()" id="form">
                <label for="title">ToDoList</label>
                <!--autocomplete="off"规定禁用自动完成功能-->
                <input type="text" id="title" name="title" placeholder="添加ToDo" required="required" autocomplete="off">
            </form>
        </section>
    </header>
    <section>
        <h2 onclick="save()">正在进行 <span id="todocount">0</span></h2>
        <ol id="todolist" class="demo-box"></ol>
        <h2>已经完成 <span id="donecount">0</span></h2>
        <ul id="donelist"></ul>
    </section>
    <footer>
        Copyright © 2014 todolist.cn <a href="javascript:clear();">clear</a>
    </footer>
    <script type="text/javascript">
    function clear(){
        // localStorage本地存储
        localStorage.clear();
        load();
    }

    function postaction(){
        var title = document.getElementById("title");
        if(title.value == "") {
            alert("内容不能为空");
        }else{
            var data=loadData();
            var todo={"title":title.value,"done":false};
            data.push(todo);
            saveData(data);
            var form=document.getElementById("form");
            form.reset();
            load();
        }
    }

    function loadData(){
        var collection=localStorage.getItem("todo");
        if(collection!=null){
            return JSON.parse(collection);
        }
        else return [];
    }

    function saveSort(){
        var todolist=document.getElementById("todolist");
        var donelist=document.getElementById("donelist");
        var ts=todolist.getElementsByTagName("p");
        var ds=donelist.getElementsByTagName("p");
        var data=[];
        for(i = 0;i < ts.length; i++){
            var todo={"title":ts[i].innerHTML,"done":false};
            // unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
            data.unshift(todo);
        }
        for(i = 0;i < ds.length; i++){
            var todo={"title":ds[i].innerHTML,"done":true};
            data.unshift(todo);
        }
        saveData(data);
    }

    function saveData(data){
        // JSON.stringify()把对象的类型转换为字符串类型
        localStorage.setItem("todo",JSON.stringify(data));
    }

    function remove(i){
        var data=loadData();
        var todo=data.splice(i,1)[0];// 从i开始删除一个元素
        saveData(data);
        load();
    }

    function update(i,field,value){
        var data = loadData();
        var todo = data.splice(i,1)[0];
        todo[field] = value;
        data.splice(i,0,todo);
        saveData(data);
        load();
    }

    function edit(i)
    {
        load();
        var p = document.getElementById("p-"+i);
        title = p.innerHTML;
        p.innerHTML="<input id='input-"+i+"' value='"+title+"' />";
        var input = document.getElementById("input-"+i);
        input.setSelectionRange(0,input.value.length); // 选中value内容
        input.focus();
        input.onblur =function(){
            if(input.value.length == 0){
                p.innerHTML = title;
                alert("内容不能为空");
            }
            else{
                update(i,"title",input.value);
            }
        };
    }

    function load(){
        var todolist=document.getElementById("todolist");
        var donelist=document.getElementById("donelist");
        var collection=localStorage.getItem("todo");
        if(collection!=null){
            var data=JSON.parse(collection);
            var todoCount=0;
            var doneCount=0;
            var todoString="";
            var doneString="";
            for (var i = data.length - 1; i >= 0; i--) {
                if(data[i].done){
                    doneString+="<li draggable='true'><input type='checkbox' onchange='update("+i+","done",false)' checked='checked' />"
                    +"<p id='p-"+i+"' onclick='edit("+i+")'>"+data[i].title+"</p>"
                    +"<a href='javascript:remove("+i+")'>-</a></li>";
                    doneCount++;
                }
                else{
                    todoString+="<li draggable='true'><input type='checkbox' onchange='update("+i+","done",true)' />"
                    +"<p id='p-"+i+"' onclick='edit("+i+")'>"+data[i].title+"</p>"
                    +"<a href='javascript:remove("+i+")'>-</a></li>";
                    todoCount++;
                }
            };
            todocount.innerHTML=todoCount;
            todolist.innerHTML=todoString;
            donecount.innerHTML=doneCount;
            donelist.innerHTML=doneString;
        }
        else{
            todocount.innerHTML=0;
            todolist.innerHTML="";
            donecount.innerHTML=0;
            donelist.innerHTML="";
        }

        var lis=todolist.querySelectorAll('ol li'); // 返回li元素的集合
        [].forEach.call(lis, function(li) {
            li.addEventListener('dragstart', handleDragStart, false);
            li.addEventListener('dragover', handleDragOver, false);
            li.addEventListener('drop', handleDrop, false);

            onmouseout =function(){
                saveSort();
            };
        });
    }

    window.onload=load;

    window.addEventListener("storage",load,false);

    var dragSrcEl = null;
    function handleDragStart(e) {
        dragSrcEl = this;
        e.dataTransfer.effectAllowed = 'move';
        e.dataTransfer.setData('text/html', this.innerHTML);
    }
    function handleDragOver(e) {
        if (e.preventDefault) {
            e.preventDefault();
        }
        e.dataTransfer.dropEffect = 'move';
        return false;
    }
    function handleDrop(e) {
        if (e.stopPropagation) {
            e.stopPropagation();
        }
        if (dragSrcEl != this) {
            dragSrcEl.innerHTML = this.innerHTML;
            this.innerHTML = e.dataTransfer.getData('text/html');
        }
        return false;
    }

    </script>

    </body>
    </html>

  • 相关阅读:
    iOS企业版打包 发布在线安装包 plist
    iOS企业版打包(转载)
    微信小程序开发入门教程
    SVN常用命令说明
    高仿QQ、微信效果的图片浏览器(支持原图和缩略图、多种手势、CocoaPods)
    iOS 调试大法
    MFMailComposeViewController发送邮件的实例
    自定义UISearchBar外观
    npm 包命令:不是内部或外部命令 问题分析
    angular 子路由跳转出现Navigation triggered outside Angular zone, did you forget to call ‘ngZone.run() 的问题修复
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9277908.html
Copyright © 2020-2023  润新知