<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # jquery 清單應用 3.0 需要實現的功能 1. 點擊查看詳情 2. 設置定時任務 3. 美化彈框 4. 美化 checkbox 5. 從垃圾筐物理刪除 # 首先還是布局... 不過我實在不想布局了![img](https://box.kancloud.cn/b8ed88e5104f4dda78b644927c564dae_240x240.jpg) css 讓我`超受傷`... 騷年, 你還在重復造輪子嗎? 什么是重復造輪子? 比如你要造一臺汽車, 難道輪子也要自己造一個嗎? 有專門的人來造輪子, 我們直接拿來用就好了, 如果自己造輪子, 浪費時間不說, 如果你造出來的輪子, 還不圓呢? 比如這樣... ![](https://box.kancloud.cn/b77b2192750d8dc5126529087e40da5e_426x240.gif) ![](https://box.kancloud.cn/ebbcae2c9081d1a06ccb75322217ed76_448x209.gif) 還好吧, 又不是不能跑... ![img](https://box.kancloud.cn/e825bd877798d3c632de751bc6421cd2_240x240.gif) 關鍵是, 既浪費時間, 效果又不好, 最重要的是, **程序員都比較懶**... 今天來給大家帶來一個神奇 UI 框架 `layui` ![1545233055645](https://box.kancloud.cn/0f1bb2f36319c46f72831a822ae89894_1813x642.png) 首先我們先下載... 讓后導入到項目 在`index.html`同級目錄, 拷入`layui`文件夾 ![1545233207935](https://box.kancloud.cn/d3f759182c44ecc1ce585d1d34cfc3aa_301x464.png) 讓后在`index.html` 中引入 ![1545233464849](https://box.kancloud.cn/bf929f9e6204afabacbd2439ce7ce541_1118x457.png) 注意順序, `jquery.js`最先引入, 其次是`layui.js`, 因為 layui 是基于 jquery 開發的 我們自己寫的 js 放在最后, 因為我們的代碼既用到了`jquery`,又用到了`layui` 注意文檔中對`layui.js`和`layui.all.js`的說明... > 模塊化, 需要哪個, 引入哪個, 非模塊化, 全部引用, 需要直接用, 會比較占帶寬資源 然后咱們在`index.js`寫個彈框試試效果 一言不合就彈框... ![img](https://box.kancloud.cn/476a8ff29996d16dff45c4a3a19b38fa_240x240.jpg) ![1545233780513](https://box.kancloud.cn/ca7a66d26a915803e2c3d8bf96102a56_1108x409.png) 看看效果... ![1545225786120](https://box.kancloud.cn/15d21800497e20f9407ac3cca830252e_1920x938.png) 可以彈框, 但是沒有字... hello world 不見了... 不是不見了, 是因為... ![1545225824838](https://box.kancloud.cn/cf1ba82b179ecbd1faec458809d3e908_432x153.png) 因為是白色, 所以看不見, 我們把它注釋了... ![1545225848082](https://box.kancloud.cn/57d76a65a46a751c440391d1fd954343_373x153.png) ![1545225868939](https://box.kancloud.cn/1a593229313c7eeee857b5cde00d89cb_1920x938.png) 可以看到字了, 但是標題好像變黑了, 其他還好, 那么我們單獨為`h1`加一個字體顏色吧 ```css h1.myTitle { text-align: center; margin: 20px; color: #fff; } ``` ![1545225932241](https://box.kancloud.cn/7560f058d9548496bae73319ef81e6e9_1920x938.png) 這回就完美了...![img](https://box.kancloud.cn/f0887c4e4865d57fa43f04553066682c_255x255.gif) 接下來, 我們就可以直接寫 js 了... ![img](https://box.kancloud.cn/c2f8e54aabaa5ca0585320fcc7dcc8f4_240x240.jpg) # 書寫 js 不過我們需要先把原來的代碼, 加到`layui.use()`中 ![1545233915165](https://box.kancloud.cn/2bd822cb5cc538dd941a5ad440a65dfc_1266x664.png) 第一個需求是, 點擊`task-item`, 展示詳情 展示內容, 我們可以使用 layer 的`tips`.... ![1545229762101](https://box.kancloud.cn/038af59c2c29f5d271f068912f7b1b16_1090x161.png) 不過首先有一個問題, 之前我們對于過長的內容, 都進行了的壓縮... 所以, 關于內容, 我們其實需要兩個屬性, `content`,`fullContent`, 所以我們還需要增加一個`fullContent`來保存所有`內容` 先修改保存的對象(記得先把之前的 layer 的彈框測試給刪掉...) ![1545226503306](https://box.kancloud.cn/80b62c58a5f0cb1e2964ecf7f8156868_1198x469.png) ![1545226539357](https://box.kancloud.cn/c437aac6936bbee85e36a004c5bf50be_1468x381.png) 然后我們需要監聽`task-item`的點擊事件 先輸出一下 index 屬性值 > `return false;` 效果相當于打斷點... ![1545226822397](https://box.kancloud.cn/6b71bb8b14bc417504b73d9233f3f6e1_727x366.png) ![1545227055763](https://box.kancloud.cn/c13ed5859410325c458e0d80ec654892_1920x774.png) 沒有問題, 可以獲取 index, 那么下一步, 我們獲取`content`和`fullContent`... ![1545227145867](https://box.kancloud.cn/6c1b1f73506d9c67d195213d548663d9_843x373.png) ![1545227205140](https://box.kancloud.cn/c469e9664e3e6616efd7520da5222e19_1920x938.png) 也沒有問題... 可以監聽 onclick, 數據也有了, 接下來就可以愉快的展示了... ![1545229787940](https://box.kancloud.cn/038af59c2c29f5d271f068912f7b1b16_1090x161.png) ```javascript //小tips layer.tips( "我是另外一個tips,只不過我長得跟之前那位稍有些不一樣。", "吸附元素選擇器", { tips: [1, "#3595CC"], // 位置和背景顏色 time: 4000 // 4s自動消失 } ); ``` 我們的代碼是這樣的... ```javascript // 監聽task-item的點擊事件 $(".task-item").on("click", function() { layui.layer.tips( aTaskList[$(this).attr("index")]["fullContent"], ".task-item[index=" + $(this).attr("index") + "]", { tips: [1, "#3595CC"], time: 4000 } ); }); ``` 看看效果... ![1545234123554](https://box.kancloud.cn/869a866df105e0af910c0ad333317e81_836x375.png) 多敲點字試試... ![1545234230672](https://box.kancloud.cn/5640e90571d592233bfb4e213165e062_822x671.png) 還行, 不過字有點小, 并且寬度有點窄 ![1545234267958](https://box.kancloud.cn/c94f01f68d1e04bc0e9c5809afdd6cee_875x324.png) `area` 屬性, 是個數字,設置寬高, 注意加`px`, `auto`表示高度自動, 我們再試試... ![1545234332084](https://box.kancloud.cn/da74610c1d7a3973b7556a3295283454_982x440.png) 這就好很多, 除了字有點小... 而且 4s 的話, 字數少的時候, 嫌時間長, 字數多的時候, 嫌時間短, 最好能自己控制... 我們把事件調長一點, 然后用`開發者工具`(F12)試著調試一下 ![1545234545561](https://box.kancloud.cn/d214730843be1bf2cdd938a1690577a8_1373x884.png) 接下來, 我么你設置 css ```css .layui-layer-tips .layui-layer-content { line-height: 28px; font-size: 18px; } ``` 看看效果... ![1545234613539](https://box.kancloud.cn/dfe9e23ba760e43620ac021946f715e4_925x437.png) 還是沒變... ![img](https://box.kancloud.cn/d69a5c621901499a1129de2a0dd0690f_200x200.jpg) **_注意 css 的順序問題..._** ![1545234681889](https://box.kancloud.cn/caac1ccb180c9043d4e04ec0af63e20c_957x435.png) 我們調一下順序, 再試一下... ![1545234710284](https://box.kancloud.cn/796614932a4f46ad464a9e3f1d2f18db_1064x398.png) ![1545236384655](https://box.kancloud.cn/de5f99bd520ffbe59bdfc6d3719c5253_881x625.png) 夭壽啊~~~ ![img](https://box.kancloud.cn/b49fb98124be36eae336d2b8746f2a61_400x400.png) 什么情況? 說好的`就近原則`呢? 通過開發者工具, 發現我們的樣式被覆蓋了.... ![1545236504249](https://box.kancloud.cn/87285932e24aad710a1f9a8a24b85ca3_1920x938.png) 不是已經調整了優先級嗎? 注意覆蓋我們樣式的 css 為`layer.css` ![1545236585673](https://box.kancloud.cn/e6cd193dce1c69925c81e51a4d6997a8_1402x857.png) 位置是在`layui\lay\modules\layer.js` 也就是說, css 是在 layui.js 文件里, 動態加載的, 因為我們的 css 在 js 之上, 所以根據就近原則, 瓦特了... 所以還得往下調... ![1545236725276](https://box.kancloud.cn/e39ec31c88dfdb9ecd17c305487b2143_820x231.png) 這兒可以嗎? ![1545236766118](https://box.kancloud.cn/08d6a34afd2a3f076988027b2c9c81a0_1920x927.png) 還是不行... ![img](https://box.kancloud.cn/a3c90b4a4140055c28a45accb532eccc_100x145.gif) 因為你忘了 `document.ready`.... 所以還要往下挪... 那我直接一擼到底吧.... ![1545236935152](https://box.kancloud.cn/44f4eb58bb4724e0ea2bb1af6cdf8b9c_838x251.png) 我 TM 挪到這總行了吧... ![1545236975857](https://box.kancloud.cn/1efc7a193184b42295e52a91686b0bfb_909x750.png) 還真行了... ![1545237009956](https://box.kancloud.cn/6975d2a46c468977338d0ce6a33a658c_606x173.png) 實際上在這個位置... 當然這只是方案之一, 我們也可以祭出強大的`!important` 請看方案二... ```css .layui-layer-tips .layui-layer-content { line-height: 28px !important; font-size: 18px !important; } ``` ![1545237099191](https://box.kancloud.cn/dce7fc3aa1ac5420ce38bce35e5aaf82_981x635.png) 依然完美...![img](https://box.kancloud.cn/b70e9d915ba7a515df5267061335da54_157x161.gif) 但是, bug 不是這么輕易就甩得掉的... `bug如風, 常伴吾身...` ![1545237266892](https://box.kancloud.cn/7850a71434c37f86e2a51e6186fbbb2d_789x183.png) 是一個 div... ![1545239075017](https://box.kancloud.cn/576d5f77d2a0d2c025fa63d2ee88659b_936x758.png) 所以, 我們需要在 css 里, 改成 inline-block ```css .layui-layer-tips .layui-layer-content { line-height: 28px !important; font-size: 18px !important; display: inline-block; } ``` ![1545239136087](https://box.kancloud.cn/78d73b0773195000040773ea81bd3401_766x266.png) 沒有問題, 但是還沒完.... ![1545239199318](https://box.kancloud.cn/bcdac33a66c84563af3a386301ff558b_1331x218.png) 文字太長了... 我們需要加上折行... ```css .layui-layer-tips .layui-layer-content { line-height: 28px !important; font-size: 18px !important; display: inline-block; word-break: break-all; } ``` ![1545239297542](https://box.kancloud.cn/dfc747a93543dfa90416b587635f112b_795x200.png) 可以, 不過把 input 遮住了... 改成 3... ![1545239347987](https://box.kancloud.cn/9a724c8b71766f2d07c7093ae83ac07d_774x350.png) ![1545239332272](https://box.kancloud.cn/9b6164cbd4d802dfda7252d3c920ae10_817x302.png) 再加上圓角吧, 這樣就不突兀了... ```css .layui-layer-tips .layui-layer-content { line-height: 28px !important; font-size: 18px !important; word-break: break-all; display: inline-block; border-radius: 10px !important; } ``` ![1545239436794](https://box.kancloud.cn/796fb8ede29e035d75379f205b7a9322_729x307.png) 挺好, 樣式調完了, 就這改功能吧... # 新的需求... 我們之前的問題是這樣的... 之前代碼里寫的是`4000` > 4s 的話, 字數少的時候, 嫌時間長, 字數多的時候, 嫌時間短, 最好能自己控制... 如何自己控制呢? 我們嘗試在藍色 tips 外點擊的話, 讓它關掉... 需要`layer.close()` ```javascript $(".task-item").on("click", function() { var index = layui.layer.tips( aTaskList[$(this).attr("index")]["fullContent"], ".task-item[index=" + $(this).attr("index") + "]", { tips: [3, "#3595CC"], time: 4000, area: ["500px", "auto"] } ); layui.layer.close(index); }); ``` 理論上會一閃而過, 而他真的一閃而過了... 說明 close 生效了... 記得把折行測試注釋掉... ![1545240076349](https://box.kancloud.cn/07e1dbda079163796184b53d4417c6a1_506x164.png) 現在我們嘗試, 在其他位置點擊, 使其關掉, 當然需要先設置一個很長的時間, 讓 tips 不會自動消失... 其實設置 0, 為常亮 ![1545239882717](https://box.kancloud.cn/d74215b71db22bb0508e37b9a3711486_589x236.png) 然后, 需要把 index 聲明成全局變量, 并且監聽 body 的點擊事件... ```javascript // layer的tips彈框索引值 var layerTipIndex = 0; ``` ![1545240008715](https://box.kancloud.cn/25079e4fba3a50237b09bbb9a940c3a7_755x314.png) 接下來, 監聽 body... ```javascript // 監聽body的點擊事件 $("body").on("click", function() { if (layerTipIndex) { layui.layer.close(layerTipIndex); layerTipIndex = 0; } }); ``` 結果又是一閃而過... 可以代碼我們已經注釋了啊... ![1545240076349](https://box.kancloud.cn/07e1dbda079163796184b53d4417c6a1_506x164.png) 騷年, 還記得事件冒泡嗎? ```javascript $(".task-item").on("click", function(ev) { layerTipIndex = layui.layer.tips( aTaskList[$(this).attr("index")]["fullContent"], ".task-item[index=" + $(this).attr("index") + "]", { tips: [3, "#3595CC"], time: 0, area: ["500px", "auto"] } ); ev.stopPropagation(); // 阻止事件冒泡 }); ``` 接下來, 我想按下任意其他按鍵, 也能關閉彈框... 一切都很完美, 除了空格... 因為空格有默認動作, 我們需要清除它... ```javascript $("body").on("keypress", function(ev) { ev.preventDefault(); // 清除按鍵的默認事件 if (layerTipIndex && ev.keyCode) { layui.layer.close(layerTipIndex); layerTipIndex = 0; } }); ``` 不過少年, 告訴你一個小秘密...![img](https://box.kancloud.cn/f89c4b343ccef1adc6aec5909b4d1144_270x270.png) `return false` == `ev.stopPropagation()`+`ev.preventDefault()` ```javascript $("body").on("keypress", function(ev) { if (layerTipIndex && ev.keyCode) { layui.layer.close(layerTipIndex); layerTipIndex = 0; } return false; // 效果一樣 }); ``` ```javascript $(".task-item").on("click", function(ev) { layerTipIndex = layui.layer.tips( aTaskList[$(this).attr("index")]["fullContent"], ".task-item[index=" + $(this).attr("index") + "]", { tips: [3, "#3595CC"], time: 0, area: ["500px", "auto"] } ); return false; }); ``` 好, 再講最后一個 bug.... ![img](https://box.kancloud.cn/b7e1b95b4a0f0791c44c032ead1b327e_280x200.jpg) 你們有沒有發現, 按鍵無效了... 因為阻止了默認事件... 其實我只是想阻止空格的默認事件, 那么空格的默認事件是多少呢? 不猜了, 直接上代碼... ```javascript $("body").on("keypress", function(ev) { console.log(ev.keyCode); if (layerTipIndex && ev.keyCode) { layui.layer.close(layerTipIndex); layerTipIndex = 0; if (ev.keyCode === 32) { return false; } } }); ``` 這次真的圓滿了... 老規矩, 附上所有代碼... ```javascript layui.use(["layer", "form"], function() { // 變量初始化, 判斷, 如果緩存里有數據, 取出到aTaskList, 注意緩存需要解析, 否則直接取是一個字符串 // 不管有沒有數據, aTaskList都是數組, 我們下面操作的就是數組 if (localStorage.getItem("task-list")) { // 解析用的是JSON.parse var aTaskList = JSON.parse(localStorage.getItem("task-list")); } else { // 如果緩存中沒有數據, 則直接空數組 var aTaskList = []; } var layerTipIndex = 0; // 監聽layer的tip的開啟 // 展示html代碼包裹以后的數據, 刷新內容區 // 進入頁面的時候會調一次, 更新數組和緩存后, 也會調用 showTask(); $("body").on("click", function() { // 監聽, 如果有值, 關掉tip if (layerTipIndex) { layui.layer.close(layerTipIndex); layerTipIndex = 0; } }); // $("body").on("keypress", function(ev) { // // 監聽空格, 關掉tip // if (ev.keyCode === 32 && layerTipIndex) { // layui.layer.close(layerTipIndex); // layerTipIndex = 0; // } // }); // 任意鍵都可關閉tip $("body").on("keypress", function(ev) { // 監聽所有按鍵, 關掉tip if (ev.keyCode && layerTipIndex) { if (ev.keyCode === 32) { ev.preventDefault(); } layui.layer.close(layerTipIndex); layerTipIndex = 0; } }); // 監聽輸入框的回車事件, 獲取輸入框的內容, 更新數組, 更新緩存, 刷新內容區 $(".add-task input[name=content]").on("keypress", function(ev) { // 先判斷, 回車, 并且輸入框里有內容, 則進行邏輯操作(往下走) // 回車的keyCode的是13, 使用===來比較 if (ev.keyCode === 13 && $(this).val()) { // 聲明一個對象, 用來存儲輸入框里的內容(content) // 還有其他的屬性 // isDel, 用來標記是否邏輯刪除, 1 for yes, 0 for no // isDone, 用來標記是否已完成, 1 for yes, 0 for no var oTaskItem = { content: compressContent($(this).val()), // 存儲input框里的內容, compressContent函數, 壓縮內容, 超過長度加··· fullContent: $(this).val(), // 存儲原始值(全文) isDel: 0, // 標記已刪除 isDone: 0 // 標記已完成 }; updateData(oTaskItem); // 更新數組, 更新緩存, 刷新內容區 // 清空input輸入區的內容 $(this).val(""); } }); $(".add-task button").on("click", function() { if ($(".add-task input[name=content]").val()) { // 聲明一個對象, 用來存儲輸入框里的內容(content) // 還有其他的屬性 // isDel, 用來標記是否邏輯刪除, 1 for yes, 0 for no // isDone, 用來標記是否已完成, 1 for yes, 0 for no var oTaskItem = { content: compressContent( $(".add-task input[name=content]").val() ), // 存儲input框里的內容, compressContent函數, 壓縮內容, 超過長度加··· fullContent: $(".add-task input[name=content]").val(), // 存儲原始值(全文) isDel: 0, // 標記已刪除 isDone: 0 // 標記已完成 }; updateData(oTaskItem); // 更新數組, 更新緩存, 刷新內容區 // 清空input輸入區的內容 $(".add-task input[name=content]").val(""); } }); // 更新內容區 // 數組和緩存變化后, 會調用, 刷新頁面也會調用 function showTask() { // 為什么置空(初始值為空字符串), 因為后面是追加, 所以追加之前, 內容最好為空, 其他特殊需求另說 // 保持數據類型一致, 是個好習慣, 通過給初始值, 來確定變量的數據類型 // 這里如果不給初始值, 會出現undefined字符串 var doneHTML = ""; // 已完成內容區的html代碼 var taskHTML = ""; // 未完成內容區的html代碼 var delHTML = ""; // 已刪除內容區的html代碼 console.log(aTaskList); // forEach遍歷數組, 參數是一個函數, 函數有兩個參數, 一個是value, 一個是key, 注意一下順序問題, value在前, key在后 aTaskList.forEach(function(value, key) { // 動態拼接html, 然后寫入 if (!value.isDone && !value.isDel) { // 未完成時, 進入 taskHTML += '<div index="' + key + '" class="task-item">'; taskHTML += '<span><input index="' + key + '" type="checkbox" /></span>' + "\n"; // 為什么有個\n, 為了保證和原來的html一致, 這個并不是必須的 taskHTML += '<span class="task-content">' + value.content + "</span>"; taskHTML += '<span class="task-content hidden">' + value.fullContent + "</span>"; taskHTML += '<span><i index="' + key + '" class="iconfont icon-del"></i></span>'; taskHTML += '<span><i index="' + key + '" class="iconfont icon-edit"></i></span>'; taskHTML += "</div>"; } if (value.isDone && !value.isDel) { // 已完成, 進入 doneHTML += '<div index="' + key + '" class="task-item">'; // key的目的: key是對象在數組中的下標, 用來標記對象在數組中的位置 doneHTML += '<span><input checked index="' + key + '" type="checkbox" /></span>' + "\n"; doneHTML += '<span class="task-content">' + value.content + "</span>"; doneHTML += '<span><i index="' + key + '" class="iconfont icon-del"></i></span>'; doneHTML += '<span><i index="' + key + '" class="iconfont icon-edit"></i></span>'; doneHTML += "</div>"; } if (value.isDel) { // 已刪除, 進入 delHTML += '<div index="' + key + '" class="task-item">'; delHTML += '<span><input index="' + key + '" type="checkbox" /></span>'; // 加刪除線, 方式二, 直接判斷, 修改html if (value.isDone) { delHTML += '<span class="task-content is-deleted">' + value.content + "</span>"; } else { delHTML += '<span class="task-content">' + value.content + "</span>"; } delHTML += '<span><i index="' + key + '" class="iconfont icon-remove"></i></span>'; delHTML += '<span><i index="' + key + '" class="iconfont icon-undo"></i></span>'; delHTML += "</div>"; } }); $(".task-done").html(doneHTML); // 寫入"已完成區"的html代碼, 原來的都覆蓋了 $(".task-list").html(taskHTML); // 寫入"未完成區"的html代碼, 原來的都覆蓋了 $(".task-deleted").html(delHTML); // 寫入"已刪除區"的html代碼, 原來的都覆蓋了 // 監聽復選框 $("input[type=checkbox]").click(function() { if (!$(this).attr("checked")) { // 未選中狀態 ==> 已選中, 修改對象屬性, isDone ==> 1 aTaskList[$(this).attr("index")]["isDone"] = 1; // 實際上更新了的數組 } else { // 已選中狀態 ==> 未選中, 修改對象屬性, isDone ==> 0 aTaskList[$(this).attr("index")]["isDone"] = 0; // 實際上更新了的數組 } updateData(); // 牽涉到方法重載, 參數個數不同, 干不同的事 }); // 監聽未完成區的刪除按鈕(小垃圾桶) $(".task-item .icon-del").on("click", function() { // 修改當前對象的isDel屬性為1 aTaskList[$(this).attr("index")]["isDel"] = 1; // 改為1之后, html代碼也要相應的改變 updateData(); }); // 監聽已刪除區的還原按鈕 $(".task-deleted .icon-undo").on("click", function() { // 修改當前對象的isDel屬性為1 aTaskList[$(this).attr("index")]["isDel"] = 0; // 改為1之后, html代碼也要相應的改變 updateData(); }); // 監聽已完成區的刪除按鈕 $(".task-done .icon-del").on("click", function() { // 修改當前對象的isDel屬性為1 aTaskList[$(this).attr("index")]["isDel"] = 1; // 改為1之后, html代碼也要相應的改變 updateData(); }); // 監聽task-item的點擊事件, 監聽div $(".task-item").on("click", function(ev) { //小tips // 獲取內容第一種方式, 直接取對象屬性 // layui.layer.tips(aTaskList[$(this).attr('index')]['fullContent'], ".task-item[index="+$(this).attr('index')+"]", { // tips: [2, "#3595CC"], // time: 4000 // }); // 第二種: 先存到span里, 然后隱藏, 但是內容在需要的時候, 可以取出來 layerTipIndex = layui.layer.tips( $( ".task-item[index=" + $(this).attr("index") + "] .hidden" ).html(), ".task-item[index=" + $(this).attr("index") + "]", { tips: [3, "#3595CC"], time: 0, area: ["500px", "auto"] } ); // ev.stopPropagation(); }); // 監聽移出事件 $(".task-item").on("mouseleave", function() { layui.layer.close(layerTipIndex); }); } // 內容壓縮, 如果超過30個, 就截取30, 加上省略號, 如果不超過30, 原路返回 function compressContent(str) { if (str.length >= 30) { return str.slice(0, 30) + "···"; } else { return str; } } // 組合操作, 更新數組, 更新緩存, 更新html內容 function updateData(obj) { if (arguments.length) { // 把對象添加到數組, unshift, 保證最后添加的, 在第一個 aTaskList.unshift(obj); } // 更新完數組, 更新緩存, 保持數組中的數據和緩存中一致 localStorage.setItem("task-list", JSON.stringify(aTaskList)); // 刷新內容區 showTask(); // // 動態添加刪除線(方式一) // aTaskList.forEach(function(value, key) { // if (value.isDone) { // $(".task-item[index=" + key + "] .task-content").addClass("is-deleted"); // } // }); } }); ``` ```css * { margin: 0; padding: 0; outline: none; -webkit-transition: background 200ms; -moz-transition: background 200ms; -ms-transition: background 200ms; -o-transition: background 200ms; transition: background 200ms; } body { background: #00334b; } h1.myTitle { text-align: center; margin: 20px; color: #fff; } .container { margin: 0 auto; /* background: red; */ max-width: 600px; } .task-item { background: #fff; color: #333; margin-bottom: 3px; cursor: pointer; padding: 10px; border-radius: 3px; } .task-item:hover { background: #ddd; } .iconfont { float: right; margin-right: 10px; line-height: 21px; } input[type="text"] { background: #ddd; float: left; width: 84%; margin-right: 1%; padding: 10px; -moz-box-sizing: border-box; /*Firefox3.5+*/ -webkit-box-sizing: border-box; /*Safari3.2+*/ -o-box-sizing: border-box; /*Opera9.6*/ -ms-box-sizing: border-box; /*IE8*/ box-sizing: border-box; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } input[type="text"]:focus, input[type="text"]:hover { background: #eee; } .add-task button { width: 15%; background: rgb(3, 174, 255); } .add-task button:hover { background: rgb(77, 195, 251); } input[type="text"], .add-task button { border: 0; height: 100%; } .add-task { height: 37px; } .task-done .task-item { background: #ccc; } .task-deleted .task-item:hover { background: #ddd; } .task-done .task-item:hover { background: #fff; } .task-deleted .task-item { background: #a9a7a7; } .task-done, .task-deleted, .task-list { margin: 10px 0; } .task-done .task-content, .is-deleted { text-decoration: line-through; } .task-deleted input[type="checkbox"] { visibility: hidden; } input, button { border-radius: 3px; } .task-content { margin-left: 5px; } .iconfont:hover { filter: drop-shadow(0 0 0 black); } .hidden { display: none; } .layui-layer-tips .layui-layer-content { font-size: 18px !important; display: inline-block; word-break: break-all; line-height: 26px !important; border-radius: 10px !important; } ``` ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <link rel="stylesheet" type="text/css" href="css/iconfont.css" /> <link rel="stylesheet" type="text/css" href="css/iconfont_2.css" /> <link rel="stylesheet" href="layui/css/layui.css" /> <link rel="stylesheet" href="css/style.css" /> <script src="js/jquery.js"></script> <script src="layui/layui.js"></script> <script src="js/index.js"></script> <title>備忘清單</title> </head> <body> <!-- 總容器開始 --> <div class="container"> <h1 class="myTitle">我的備忘清單</h1> <!-- 輸入框和按鈕開始 --> <div class="add-task"> <input type="text" placeholder="寫下你的備忘吧..." name="content" /> <button>添加備忘</button> </div> <!-- 輸入框和按鈕結束 --> <!-- 清單列表開始 --> <div class="task-list"> <div class="task-item"> <span><input type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> <span><i class="iconfont icon-edit"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> <span><i class="iconfont icon-edit"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> <span><i class="iconfont icon-edit"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> <span><i class="iconfont icon-edit"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> <span><i class="iconfont icon-edit"></i></span> </div> </div> <div class="task-done"> <div class="task-item"> <span><input checked type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> </div> <div class="task-item"> <span><input checked type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> </div> <div class="task-item"> <span><input checked type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> </div> <div class="task-item"> <span><input checked type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> </div> <div class="task-item"> <span><input checked type="checkbox" /></span> <span class="task-content">item content 1</span> <span><i class="iconfont icon-del"></i></span> </div> </div> <div class="task-deleted"> <div class="task-item"> <span><input type="checkbox" /></span> <span class="is-deleted task-content">item content 1</span> <span><i class="iconfont icon-remove"></i></span> <span><i class="iconfont icon-undo"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="is-deleted task-content">item content 1</span> <span><i class="iconfont icon-remove"></i></span> <span><i class="iconfont icon-undo"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="is-deleted task-content">item content 1</span> <span><i class="iconfont icon-remove"></i></span> <span><i class="iconfont icon-undo"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="is-deleted task-content">item content 1</span> <span><i class="iconfont icon-remove"></i></span> <span><i class="iconfont icon-undo"></i></span> </div> <div class="task-item"> <span><input type="checkbox" /></span> <span class="is-deleted task-content">item content 1</span> <span><i class="iconfont icon-remove"></i></span> <span><i class="iconfont icon-undo"></i></span> </div> </div> <!-- 清單列表結束 --> </div> <!-- 總容器結束 --> </body> </html> ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看