首頁

JavaScript自己整理的基礎(chǔ)-01

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1.JavaScript 簡介:

JavaScript是互聯(lián)網(wǎng)上最流行的腳本語言,所有現(xiàn)代的HTML都使用JavaScript。既然是腳本語言,那么它的特點就有一下三種:

    (1)弱類型;

    (2)解釋型語言(不需要編譯);

    (3)逐行執(zhí)行,一行代碼錯誤,其后的代碼塊都不會繼續(xù)執(zhí)行;

    (4)<script>標(biāo)簽可直接嵌入到HTML文件中,位置是任意的,通常放在被修飾內(nèi)容下面或者h(yuǎn)ead標(biāo)簽中,但寫成單獨的js文件有利于結(jié)構(gòu)和行為的分離

2.JavaScript 內(nèi)容(附圖):

    

       其中ECMAScript是JavaScript的核心;

       DOM是文檔對象模型(使用js操作網(wǎng)頁);

       BOM是瀏覽器對象模型(使用js操作瀏覽器)

3.JavaScript 信息的輸出:

    (1)alert( )方法:以提示框的形式在頁面輸出 ,例;

[javascript] view plain copy
  1. <script>  
  2.     alert("hello,javascript")  
  3. </script>  

    (2)console.log( )方法:在控制臺輸出信息,例:

[javascript] view plain copy
  1. console.log("hello,javascript")  

    (3)document.write( ):將內(nèi)容直接寫在HTML頁面中,例:

[javascript] view plain copy
  1. document.write("hello,javascript")  

4.JavaScript 變量:

    與 Java不同,ECMAScript 中的變量無特定的類型,定義變量時只用 var 運(yùn)算符,可以將它初始化為任意值,變量的初始化格式:var 變量名 = 變量值;例:

[javascript] view plain copy
  1. var a = "hello";  
  2. var b = 123;  

    如果要定義多個變量,那么可以用將多個變量寫在一行,用逗號進(jìn)行分隔;例:

[javascript] view plain copy
  1. var a = "你好",  
  2.     b = 123,  
  3.     c = "hello";  

    變量名字的變量規(guī)則:    

    (1)由字母、數(shù)字、下劃線、$符號構(gòu)成

    (2)不可以以數(shù)字開頭,不建議以下劃線開頭;

    (3) 嚴(yán)格區(qū)分大小寫;

    (4)不可以是關(guān)鍵字和保留字

5.JavaScript 數(shù)據(jù)類型:

    JavaScript可以分為原始數(shù)據(jù)類型,引用數(shù)據(jù)類型兩種:

    (1)原始數(shù)據(jù)類型:Number,String,Boolean,undefined,null

    Number:數(shù)值型,就是數(shù)字,包含正數(shù)、負(fù)數(shù)、整數(shù)、小數(shù)、0、NaN、Infinity(正無窮)、-Infinity(負(fù)無窮);

    注意:NaN:not  a  number的縮寫,表示該值不是一個數(shù)值(也屬于Number)

    String字符串:用雙引號""或單引號''包起來的0個或多個字符,如果引號中什么也沒有,那么這個字符串被稱為空字符串

    Boolean布爾型:包含true:表示真(成立)和false:表示假(不成立)兩個值

    undefined表示變量未定義,或變量被定義出來,但是沒有被賦值

    null表示一個變量沒有指向任何一片存儲空間,即變量存在,但是里面是空的,類似于Undefined

    (小提示:在Chrome瀏覽器控制臺輸出時,會發(fā)現(xiàn)Number類型為深藍(lán)色,String為黑色,Boolean為淺藍(lán)色,undefined和null都為淺灰色)

    (2)引用數(shù)據(jù)類型:

    Object(對象),Array(數(shù)組),Date(日期),RegExp(正則)。。等等

    (3)如何查看一個變量的數(shù)據(jù)類型(typeof 運(yùn)算符):        

             數(shù)值型數(shù)據(jù):返回值為number   

[javascript] view plain copy
  1. console.log(typeof 123)   //輸出number  

             字符串型數(shù)據(jù):返回值為string

[javascript] view plain copy
  1. console.log(typeof "你好")  //輸出string  

             布爾型數(shù)據(jù):返回值為boolean

[javascript] view plain copy
  1. console.log(typeof true/false)    //輸出boolean  

             Undefined:返回值為undefined

[javascript] view plain copy
  1. console.log(typeof undefined)   //輸出undefined  

             Null:返回值為Object(歷史遺留問題,說明null也是一個對象)

[javascript] view plain copy
  1. console.log(typeof null)     //輸出object  

             NaN:返回值為number

[javascript] view plain copy
  1. console.log(typeof NaN)    //輸出number  

6.JavaScript 數(shù)據(jù)類型的轉(zhuǎn)換:

    (1)在使用加法(+)運(yùn)算符時,任何數(shù)據(jù)與字符串類型數(shù)據(jù)相加都為字符串類型數(shù)據(jù);

[javascript] view plain copy
  1. console.log("你好" + 123)    //輸出"你好123"  

        注(簡單理解): 在JavaScript 中空字符串""轉(zhuǎn)換為false,非空字符串轉(zhuǎn)換為true(除“0”,“1”外);

                false轉(zhuǎn)換為 0 或“0”,true轉(zhuǎn)換為 1 或“1”;

                做邏輯判斷的時候,null,undefined,""(空字符串),0,NaN都默認(rèn)為false;

                ==在比較的時候可以轉(zhuǎn)換數(shù)據(jù)類型,===是嚴(yán)格比較,只要類型不匹配就返回false;

                    其實 == 的比較確實是轉(zhuǎn)換成字符串來比較但,但是在布爾型轉(zhuǎn)換為字符串之前,要先轉(zhuǎn)換成 Number

[javascript] view plain copy
  1. console.log("123" == true)    //輸出false  
  2. console.log("1" == true)     //輸出true  
  3. console.log("" == true)     //輸出false  
  4. console.log(1 == true)     //輸出true  
  5.   
  6. console.log("" == false)    //輸出true  
  7. console.log('123' == false)   //輸出fasle  
  8. console.log('0' == false)    //輸出true  
  9. console.log(0 == false)    //輸出true  
  10.   
  11. console.log('1' == 1)     //輸出true  
  12. console.log('0' == 0)     //輸出true  
  13. console.log(-true)     //輸出-1  

(2)parseInt:將字符串轉(zhuǎn)換成整數(shù)(只識別字符串中的數(shù)值):

        注:會忽略字符串中的前后空格(當(dāng)數(shù)值后的空格后面還有數(shù)值時,將不會再識別);

               能夠正確識別正負(fù)號,即保留正負(fù)號;

               在轉(zhuǎn)換時,遇到非數(shù)值型的字符就會停止轉(zhuǎn)換;

               如果字符串的第一個字符是非數(shù)值型的,那么轉(zhuǎn)換的結(jié)果為NaN;

[javascript] view plain copy
  1. console.log(parseInt("123"))    //輸出123  
  2. console.log(parseInt(" 1 2"))    //只會輸出1  
  3. console.log(parseInt(-123))     //輸出-123  
  4. console.log(parseInt("hello"))    //輸出NaN  
  5. console.log(parseInt(true))       //輸出NaN  
  6. console.log(parseInt("123hello"))    //輸出123,后面非數(shù)值型不會識別  
  7. console.log(parseInt(" 1 "))     //輸出1,忽略空格  

(3)parseFloat:將字符串轉(zhuǎn)換成小數(shù)(識別小數(shù)點,注意事項同上)

[javascript] view plain copy
  1. console.log(parseFloat("123.55"))    //輸出123.55  
  2. console.log(parseFloat(".1hello"))    //輸出0.1  

(4)Number:將其它類型的數(shù)據(jù)轉(zhuǎn)換成數(shù)值型,注意被轉(zhuǎn)換的數(shù)據(jù)必須是純數(shù)值構(gòu)成,否則無法轉(zhuǎn)換,其它注意事項同上

[javascript] view plain copy
  1. console.log(Number(true))   //1  
  2. console.log(Number(false))    //0  
  3. console.log(Number(null))    //0  
  4. console.log(Number("123hello"))    //NaN  
  5. console.log(Number("12.22"))    //12.22  
  6. console.log(Number(undefined))    //NaN  

(5)頁面中的信息框:

        alert(),彈出個提示框,只有確定;

[javascript] view plain copy
  1. window.alert("今天天氣很好")  

        confirm(),彈出個確認(rèn)框,有確定和取消;

[javascript] view plain copy
  1. window.confirm("今天心情也很好")  

        prompt(),彈出個輸入框,可以輸入內(nèi)容;

[javascript] view plain copy
  1. window.prompt("password","請輸入密碼")  

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

request中跟路徑有關(guān)的api的分析

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

           最近重在研究struts的源碼,其中涉及到了request中的幾個api,看了文檔后還是覺得不清楚,所以在自己原來的工程中

測試了一下各個api的具體效果。在這里跟大家分享一下。

            這是我具體測試的代碼:

           這是我servlet配置的路徑:

            以下是訪問這個ProductServlet后控制臺打印的結(jié)果:

            從以上我們可以發(fā)現(xiàn):

    1.getRealPath(....),這個方法是返回給定資源的磁盤絕對路徑,簡單來說,就是以盤符開頭的路徑

    2.getRequestURI(....)與getRequestURL(....)這個兩個方法,從名字上來說,一個是返回url(統(tǒng)一資源定位器)一個是返回

uri(統(tǒng)一資源標(biāo)識符,用來唯一的標(biāo)識一個資源),那么url跟uri有什么區(qū)別呢?比較結(jié)果后我們就知道,URL中包含URI,URL是

帶協(xié)議,帶端口號的。

    3.getContextPath(....)這個方法,其實就是用來返回工程名,或者說工程路徑,看結(jié)果我們一目了然

    4.getServletPath(.....)這個方法,從結(jié)果中,我們可以分析得出,它其實就是在工程目錄下,訪問我們servlet的路徑,或者說

servlet相對于我們工程的路徑,在或者說,它就是我們在配置文件中配置的路徑,但是不包括后面具體的請求資源名

    5.getPathInfo(.....),這個方法其實就是返回我們具體請求資源的名稱,或者說,相對于我們的servlet而言的請求路徑

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

根據(jù)json文件生成動態(tài)菜單

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

[plain] view plain copy
  1. <span style="font-family:SimSun;font-size:16px;">admin.json</span>  
[plain] view plain copy
  1. <span style="font-family:SimSun;font-size:16px;">[  
  2.     {  
  3.         "image": "glyphicon glyphicon-home",//菜單前的圖標(biāo)  
  4.         "name": "設(shè)備管理",  
  5.         "submenu": [  
  6.             {  
  7.                 "image": "glyphicon glyphicon-cloud",  
  8.                 "name": "設(shè)備分類",  
  9.                 "submenu": [  
  10.                     {  
  11.                         "image": "glyphicon glyphicon-off",  
  12.                         "name": "電源管理",  
  13.                         "url": "html/Node/creditCardPower.html"  
  14.                     },  
  15.                     {  
  16.                             "image": "glyphicon glyphicon-lock",  
  17.                         "name": "門禁管理",  
  18.                         "url": "html/Guard/guardList.html"  
  19.                     },  
  20.                     {  
  21.                         "image": "glyphicon glyphicon-folder-open",  
  22.                         "name": "物品管理",  
  23.                         "url": "html/goods/goodsList.html"  
  24.                     },  
  25.                     {  
  26.                         "image": "glyphicon glyphicon-facetime-video",  
  27.                         "name": "視頻管理",  
  28.                         "url": "html/monitor/monitorList.html"  
  29.                     }  
  30.                 ]  
  31.             }  
  32.         ]  
  33.     },  
  34.     {  
  35.         "image": "glyphicon glyphicon-cog",  
  36.         "name": "系統(tǒng)設(shè)置",  
  37.         "submenu": [  
  38.             {  
  39.                 "image": "glyphicon glyphicon-heart",  
  40.                 "name": "用戶管理",  
  41.                 "submenu": [  
  42.                     {  
  43.                         "image": "glyphicon glyphicon-align-justify",  
  44.                         "name": "用戶列表",  
  45.                         "url": "html/User/userList.html"  
  46.                     },  
  47.                     {  
  48.                         "image": "glyphicon glyphicon-random",  
  49.                         "name": "組織機(jī)構(gòu)",  
  50.                         "url": "html/dept/framework.html"  
  51.                     }  
  52.                 ]  
  53.             },  
  54.             {  
  55.                 "image": "glyphicon glyphicon-wrench",  
  56.                 "name": "設(shè)備管理",  
  57.                 "submenu": [  
  58.                     {  
  59.                         "image": "glyphicon glyphicon-edit",  
  60.                         "name": "設(shè)備參數(shù)",  
  61.                         "url": "html/Device/DeviceList.html"  
  62.                     },  
  63.                     {  
  64.                         "image": "glyphicon glyphicon-edit",  
  65.                         "name": "物品庫",  
  66.                         "url": "html/equgoods/equGoodsList.html"  
  67.                     }  
  68.                 ]  
  69.             }  
  70.         ]  
  71.     },  
  72.     {  
  73.         "image": "glyphicon glyphicon-list",  
  74.         "name": "日志管理",  
  75.         "submenu": [  
  76.             {  
  77.                 "image": "glyphicon glyphicon-list-alt",  
  78.                 "name": "登入日志",  
  79.                 "url": "html/Log/loginlog.html"  
  80.             },  
  81.             {  
  82.                 "image": "glyphicon glyphicon-tag",  
  83.                 "name": "設(shè)備日志",  
  84.                 "url": "html/Log/hardwarelog.html"  
  85.             }  
  86.         ]  
  87.     },  
  88.     {  
  89.         "image":"glyphicon glyphicon-list",  
  90.         "name":"設(shè)備管理",  
  91.         "submenu":[  
  92.             {  
  93.             "image":"glyphicon glyphicon-list-alt",  
  94.             "name":"設(shè)備管理",  
  95.             "url":"html/mechanism/mechanism.html"  
  96.             }  
  97.         ]  
  98.     }  
  99. ]</span>  

2、讀取json文件的service層實現(xiàn)

[java] view plain copy
  1. <span style="font-size:16px;">package com.dskj.service.impl;  
  2.   
  3. import java.io.File;  
  4. import java.util.Scanner;  
  5. import org.springframework.beans.factory.annotation.Value;  
  6. import org.springframework.core.io.Resource;  
  7. import org.springframework.stereotype.Service;  
  8.   
  9. import com.dskj.common.util.StringUtil;  
  10. import com.dskj.service.ReadJsonService;  
  11.   
  12. @Service  
  13. public class ReadJsonServiceImpl implements ReadJsonService{  
  14.     <span style="color:#ff0000;">@Value(value="classpath:json/admin.json")</span>  
  15.     private Resource dataAdmin;      
  16.     <span style="color:#ff0000;">@Value(value="classpath:json/user.json")</span>  
  17.     private Resource dataUser;    
  18.       
  19.     public String getData(String fileName){       
  20.         if(StringUtil.isEmpty(fileName)){  
  21.             throw new NullPointerException();  
  22.         }  
  23.           
  24.         String jsonData = null;  
  25.           
  26.         try {  
  27.             File file = null;     if(fileName.equals("admin.json")){  
  28.                 file = dataAdmin.getFile();  
  29.             }else{  
  30.                 file = dataUser.getFile();  
  31.             }  
  32.               
  33.             jsonData = this.jsonRead(file);  
  34.               
  35.         } catch (Exception e) {  
  36.            e.printStackTrace();  
  37.         }    
  38.         return jsonData;         
  39.     }  
  40.     /** 
  41.      * 讀取文件類容為字符串 
  42.      * @param file 
  43.      * @return 
  44.      */  
  45.       private String jsonRead(File file){  
  46.             Scanner scanner = null;  
  47.             StringBuilder buffer = new StringBuilder();  
  48.             try {  
  49.                 scanner = new Scanner(file, "utf-8");  
  50.                 while (scanner.hasNextLine()) {  
  51.                     buffer.append(scanner.nextLine());  
  52.                 }  
  53.             } catch (Exception e) {  
  54.                   
  55.             } finally {  
  56.                 if (scanner != null) {  
  57.                     scanner.close();  
  58.                 }  
  59.             }  
  60.             return buffer.toString();  
  61.         }  
  62. }</span>  

3、controller對應(yīng)的代碼片段

[java] view plain copy
  1. <span style="font-size:16px;">@RequestMapping("")  
  2.     public ModelAndView main() {  
  3.         ModelAndView model = null;  
  4.         String jsonFileName = null;  
  5.           
  6.         SysUser currentUser = (SysUser) ContextUtil.getSession().getAttribute("currentUser");  
  7.         if ("admin".equals(currentUser.getUsername())) {  
  8.             model = new ModelAndView("header1");  
  9.             jsonFileName = "<span style="color:#ff0000;">admin.json</span>";//根據(jù)文件名判斷讀取具體json文件  
  10.         } else {  
  11.             model = new ModelAndView("headerUser");  
  12.             jsonFileName = "<span style="color:#ff0000;">user.json</span>";</span>/<span style="font-size:16px;">/根據(jù)文件名判斷讀取具體json文件  
  13.   
  14.         }  
  15.           
  16.         String menue = <span style="color:#3333ff;">readJsonServiceImpl.getData</span>(jsonFileName);  
  17.           
  18.         model.addObject("menue", menue);  
  19.         return model;  
  20.   
  21.     }</span>  

4、html頁面 將jsonarray轉(zhuǎn)換成js對象

[javascript] view plain copy
  1. <span style="font-size:16px;">$(function() {  
  2.     var menue = JSON.parse('<span style="color:#ff0000;"><%=request.getAttribute("menue")%></span>');  
  3.     console.info(menue);  
  4.     createMenu(menue);//調(diào)用下邊的方法生成動態(tài)菜單</span>  

5、對js對象遍歷 $.append動態(tài)添加到對應(yīng)頁面

[javascript] view plain copy
  1. <span style="font-size:16px;">function createMenu(menue){  
  2.             /* 一級菜單 */  
  3.             $.each(menue,function(i,v){  
  4.                 var menu1 = '<li class="active"><a href="javaScript:;">';  
  5.                 /* menu1 += '<span class="glyphicon glyphicon-home"></span>'; */  
  6.                 menu1 += '<span class=' + '\'' + v.image + '\'' + '>' + '</span>';  
  7.                 menu1 += '<span style="margin-left: 10px;">' + v.name + '</span><span class="fa arrow"></span>';  
  8.                 menu1 += '</a>';  
  9.                 menu1 += '<ul class="nav nav-second-level nps collapse in">';  
  10.                   
  11.                  /* 二級菜單  */  
  12.                     $.each(v.submenu,function(j,vJ){                      
  13.                         var menu2 = '<li class="active">';  
  14.                         menu2 +=        '<a href="javaScript:;" class="">';  
  15.                         /* menu2 +=         '<span class="glyphicon glyphicon-cloud" style="margin-right: 10px;"></span>'; */  
  16.                         menu2 +=            '<span class=' + '\'' + vJ.image + '\'' + 'style=' + '\'' + 'margin-right: 10px;' + '\'' + '>' + '</span>';  
  17.                         menu2 +=             vJ.name + '<span class="fa arrow "></span>';  
  18.                         menu2 +=        '</a>';  
  19.                         menu2 +=                '<ul class="nav nav-third-level nps collapse in">';                             
  20.                               
  21.                         /* 三級菜單 */  
  22.                         if(vJ.submenu){  
  23.                             $.each(vJ.submenu,function(k,vk){  
  24.                                 var menu3 = '<li>';  
  25.                                 menu3 +=        '<a href="javascript:openUrl(\'' + vk.url + '\')">';  
  26.                                 /* menu3 +=             '<span style="margin-right: 10px;" class="glyphicon glyphicon-off">'; */  
  27.                                 menu3 +=            '<span stype=' + '\'' + 'margin-right: 10px;' + '\'' + 'class=' + '\'' + vk.image + '\'' + '';  
  28.                                 menu3 +=            '</span>'+vk.name;  
  29.                                 menu3 +=        '</a>';  
  30.                                 menu3 +=    '</li>';  
  31.                                   
  32.                                 menu2 += menu3;  
  33.                                       
  34.                             });  
  35.                         }else{  
  36.                             $.each(v.submenu,function(j,vJ){  
  37.                                 var menu4 = '<li>';  
  38.                                 menu4 +=        '<a href="javascript:openUrl(\'' + vJ.url + '\')">';  
  39.                                 /* menu3 +=             '<span style="margin-right: 10px;" class="glyphicon glyphicon-off">'; */  
  40.                                 menu4 +=            '<span stype=' + '\'' + 'margin-right: 10px;' + '\'' + 'class=' + '\'' + vJ.image + '\'' + '';  
  41.                                 menu4 +=            '</span>'+vJ.name;  
  42.                                 menu4 +=        '</a>';  
  43.                                 menu4 +=    '</li>';  
  44.                                       
  45.                                  menu2 = menu4;   
  46.                             });  
  47.                         }  
  48.                             menu1 += menu2;  
  49.                     });  
  50.                       
  51.                     $("#side-menu").append(menu1);  
  52.                 });  
  53.                   
  54.             }</span>  

6、效果如下圖

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

項目總結(jié)關(guān)于ionic3中的ion-segment的總結(jié)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里


目前做的項目是ionic3和angular4.0的結(jié)合,所以用到了很多關(guān)于ionic3中封裝好的標(biāo)簽,例如具有輪播效果的ion-slides和ion-slide等。那么這次就要總結(jié)一下另外一個標(biāo)簽ion-segment的用法了。 
ion-segment這個標(biāo)簽以前用的很少,幾乎沒有用過。它主要是一組按鈕,有時稱為分段控件,之前都是用button按鈕,現(xiàn)在知道了,開始用ion-segment,因為它有自帶的樣式,這樣就可節(jié)省很多時間,同時呢允許用戶與許多控件的緊湊組進(jìn)行交互。 分段提供與標(biāo)簽相似的功能,選擇一個將取消選擇所有其他選項。 當(dāng)您希望讓用戶在應(yīng)用程序的不同頁面之間來回移動時,應(yīng)使用選項卡欄而不是分段控件。 您可以使用Angular的ngModel或FormBuilder API。 
下面來看一段代碼:

Segment 在頭部使用

<ion-header> <ion-toolbar> <ion-segment [(ngModel)]="icons" color="secondary"> <ion-segment-button value="camera"> <ion-icon name="camera">帶iocn</ion-icon> </ion-segment-button> <ion-segment-button value="bookmark"> 頭部使用Segment <ion-icon name="bookmark"></ion-icon> </ion-segment-button> </ion-segment> </ion-toolbar> </ion-header>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Segment 在內(nèi)容里面使用

<ion-segment [(ngModel)]="relationship" color="primary" (ionChange)="segmentChanged($event)"> <ion-segment-button value="friends"> Segment 在內(nèi)容里面使用 </ion-segment-button> <ion-segment-button value="enemies"> 可以綁定一個事件(ionChange) </ion-segment-button> </ion-segment>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Segment 在表單里面使用

<form [formGroup]="myForm"> <ion-segment formControlName="mapStyle" color="danger"> <ion-segment-button value="standard"> Standard </ion-segment-button> <ion-segment-button value="hybrid"> 表單內(nèi)使用 </ion-segment-button> <ion-segment-button value="sat"> Satellite </ion-segment-button> </ion-segment> </form>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
Segment 配合ngSwitch使用
<ion-segment [(ngModel)]="change"> <ion-segment-button value="apple"> 蘋果 </ion-segment-button> <ion-segment-button value="pie"></ion-segment-button> </ion-segment> <div [ngSwitch]="change"> <div *ngSwitchCase="'apple'">
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
蘋果顯示,如果要默認(rèn)顯示一個就把默認(rèn)的那個設(shè)置一個初始值比如要默認(rèn)顯示蘋果就把蘋果的value值設(shè)置成change也就是說,在定義change變量的時候,需要把哪個設(shè)置為默認(rèn)顯示就把哪個的value值賦值給change作為初始值 public change=”pie”;


藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

關(guān)于Vuex的全家桶狀態(tài)管理(一)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1:安裝

 npm install vuex --save
    
  • 1

2: 在main.js 主入口js里面引用store.js

import Vue from 'vue' import App from './App' import router from './router' import store from './vuex/store' //引用store.js Vue.config.productionTip = false //阻止在啟動時生成生產(chǎn)提示 //vue實例 new Vue({
 el: '#app',
 router,
 store, //把store掛在到vue的實例下面 template: '<App/>',
 components: { App }
})
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3:在store.js里引用Vuex

import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) //注冊Vuex // 定義常量  如果訪問他的話,就叫訪問狀態(tài)對象 const state = {
  count: 1 } // mutations用來改變store狀態(tài), 如果訪問他的話,就叫訪問觸發(fā)狀態(tài) const mutations = { //這里面的方法是用 this.$store.commit('jia') 來觸發(fā) jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
} //暴露到外面,讓其他地方的引用 export default new Vuex.Store({
  state,
  mutations
})
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

4:在vue組件中使用

使用$store.commit(‘jia’)區(qū)觸發(fā)mutations下面的加減方法

<template> <p class="hello"> <h1>Hello Vuex</h1> <h5>{{$store.state.count}}</h5> <p> <button @click="$store.commit('jia')">+</button> <button @click="$store.commit('jian')">-</button> </p> </p> </template> <!-- 加上scoped是css只在這個組件里面生效,為了不影響全局樣式 --> <style scoped> h5{ font-size: 20px; color: red; } </style>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

這里寫圖片描述

5:state訪問狀態(tài)對象

使用computed計算

<template> <p class="hello"> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button @click="$store.commit('jia')">+</button> <button @click="$store.commit('jian')">-</button> </p> </p> </template> <script> import {mapState} from 'vuex' export default{
  name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實用 // 方法一 // computed: { //  count(){ //   return this.$store.state.count + 6 //  } // } // 方法二 需要引入外部 mapState computed:mapState({
   count:state => state.count + 10 }) // ECMA5用法 // computed:mapState({ //  count:function(state){ //   return state.count //  } // }) //方法三 // computed: mapState([ //  'count' // ]) } </script>
藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

關(guān)于Vuex的全家桶狀態(tài)管理(二)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1:mutations觸發(fā)狀態(tài) (同步狀態(tài))

<template> <p class="hello"> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button @click="jia">+</button> <button @click="jian">-</button> </p> </p> </template> <script> import {mapState,mapMutations} from 'vuex' export default{
  name:'hello', //寫上name的作用是,如果你頁面報錯了,他會提示你是那個頁面報的錯,很實用 //方法三 computed: mapState([ 'count' ]),
  methods:{
   ...mapMutations([ 'jia', 'jian' ])
  }
 } </script>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2:getters計算屬性

getter不能使用箭頭函數(shù),會改變this的指向

在store.js添加getters

 // 計算 const getters = {
  count(state){ return state.count + 66 }
} export default new Vuex.Store({
  state,
  mutations,
  getters
})
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

//count的參數(shù)就是上面定義的state對象 
//getters中定義的方法名稱和組件中使用的時候一定是一致的,定義的是count方法,使用的時候也用count,保持一致。 
組件中使用

<script> import {mapState,mapMutations,mapGetters} from 'vuex' export default{
  name:'hello',
  computed: {
   ...mapState([ 'count' ]),
   ...mapGetters([ 'count' ])
  },
  methods:{
   ...mapMutations([ 'jia', 'jian' ])
  }
 } </script>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3:actions (異步狀態(tài))

在store.js添加actions

import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 定義常量 const state = { count: 1 } // mutations用來改變store狀態(tài) 同步狀態(tài) const mutations = {
  jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
} // 計算屬性 const getters = {
  count(state){ return state.count + 66 }
} // 異步狀態(tài) const actions = {
  jiaplus(context){
    context.commit('jia') //調(diào)用mutations下面的方法
    setTimeout(()=>{
      context.commit('jian')
    },2000) alert('我先被執(zhí)行了,然后兩秒后調(diào)用jian的方法') }, jianplus(context){ context.commit('jian') }
} export default new Vuex.Store({
  state,
  mutations,
  getters,
  actions
})
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

在組件中使用

<template> <p class="hello"> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button @click="jia">+</button> <button @click="jian">-</button> </p> <p> <button @click="jiaplus">+plus</button> <button @click="jianplus">-plus</button> </p> </p> </template> <script> import {mapState,mapMutations,mapGetters,mapActions} from 'vuex' export default{
  name:'hello',
  computed: {
   ...mapState([ 'count' ]),
   ...mapGetters([ 'count' ])
  },
  methods:{ // 這里是數(shù)組的方式觸發(fā)方法 ...mapMutations([ 'jia', 'jian' ]), // 換一中方式觸發(fā)方法 用對象的方式 ...mapActions({
    jiaplus: 'jiaplus',
    jianplus: 'jianplus' })
  }
 } </script> <style scoped> h5{ font-size: 20px; color: red; } </style>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

4:modules 模塊

適用于非常大的項目,且狀態(tài)很多的情況下使用,便于管理

修改store.js

import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { count: 1 } const mutations = {
  jia(state){
    state.count ++
  },
  jian(state){
    state.count --
  },
} const getters = {
  count(state){ return state.count + 66 }
} const actions = {
  jiaplus(context){
    context.commit('jia') //調(diào)用mutations下面的方法
    setTimeout(()=>{
      context.commit('jian')
    },2000) alert('我先被執(zhí)行了,然后兩秒后調(diào)用jian的方法') }, jianplus(context){ context.commit('jian') }
}

//module使用模塊組的方式 moduleA const moduleA = { state, mutations, getters, actions }

// 模塊B moduleB const moduleB = { state: { count:108
  }
} export default new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB,
  }
})
藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

JS中作用域的銷毀和不銷毀的情況總結(jié)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

window全局作用域->頁面關(guān)掉才銷毀
函數(shù)執(zhí)行會形成私有的作用域

1)作用域的銷毀
一般情況下,函數(shù)執(zhí)行形成一個私有的作用域,當(dāng)執(zhí)行完成后就銷毀了->節(jié)省內(nèi)存空間

2)作用域的不立即銷毀
function fn(){
var i=10;
return function(n){
console.log(n+i++);
}
}
fn()(15);//->先執(zhí)行fn,有一個私有的變量i=10,返回一個堆內(nèi)存地址 xxxfff111,我們發(fā)現(xiàn)這個地址還用到了一次,那么當(dāng)前的這個fn形成私有作用域(A)就不能立即銷毀了,xxxfff111(15)->輸出25,A中的i變?yōu)?1;當(dāng)xxxfff111執(zhí)行完了,發(fā)現(xiàn)這個地址沒用了,瀏覽器就把A、xxxfff111都釋放了

fn()(20);//->在執(zhí)行fn的時候一切都從新開始了,和上面的步驟是一樣的->輸出30

3)作用域的不銷毀:形成一個私有作用域,里面的內(nèi)容被外面占用了
function fn(){
var i=10;
return function(n){
console.log(n+i++);
}
}
var f=fn();//->fn執(zhí)行形成一個私有的作用域A,A中有一個私有的變量i=10,A中返回一個地址xxxfff11,被外面的f占用了,那么當(dāng)前的A就不能銷毀了
f(15);//->輸出25,讓A中的i=11
f(20);//->輸出31,讓A中的i=12

當(dāng)我們知道f用完的時候,為了優(yōu)化性能,我們讓f=null,這樣的話A中的xxxfff111沒人占用了,瀏覽器會把A和xxxfff111都釋放了


幾種不銷毀常用到的形式:
1)函數(shù)執(zhí)行,返回一個引用數(shù)據(jù)類型的值,并且在函數(shù)的外面被別人接收了,那么當(dāng)前函數(shù)形成的私有作用域就不在銷毀了–>例如上面的案例

2)在函數(shù)執(zhí)行的時候,里面的一個小函數(shù)的地址賦值給了我們的外面元素的點擊事件,那么當(dāng)前小函數(shù)也相當(dāng)于被外面占用了,大函數(shù)執(zhí)行形成的私有的作用域也不銷毀了
//每一次循環(huán)都執(zhí)行自執(zhí)行函數(shù)形成一個私有的作用域(循環(huán)三次就有三個作用域,每一個作用域中都有一個i,第一個存儲的是0,第二個存數(shù)的是1..),在每一個私有的作用域中都把里面的函數(shù)綁定給了外面元素的點擊事件,這樣的話每一次形成的作用域都不銷毀了(三個不銷毀的作用域)
var oLis=document.getElementsByTagName(“l(fā)i”);
for(var i=0;i<oLis.length;i++){
~function(i){
oLis[i].onclick=function(){
tabChange(i);
}
}(i);
}

3)在使用setTimeout實現(xiàn)輪詢動畫的時候,我們?nèi)绻鹠ove需要傳遞參數(shù)值,那么像下面這樣的寫法會行成很多的不銷毀的作用域,非常的耗性能
function move(tar){
<js code>

//window.setTimeout(move,10); ->第二次執(zhí)行move的時候我們沒有給它傳值(這樣寫不行)
window.setTimeout(function(){
move(tar);
},10);//->這樣寫實現(xiàn)了,但是每一次執(zhí)行定時器都會形成一個私有的所用域(匿名函數(shù)形成的)A,在A中使用了上級作用域中的tar的值,而且執(zhí)行了move又形成了一個小的作用域(而在小的作用域中會使用tar的值),這樣每一次定時器形成的A都不能銷毀了
}
move(100);//->第一次這樣執(zhí)行傳遞100

//解決辦法:
function move(tar){
~function _move(){
<js code>
window.setTimeout(_move,10);
}();
}
move(100);//->第一次這樣執(zhí)行傳遞100


JS中內(nèi)存空間釋放的問題(堆內(nèi)存、棧內(nèi)存)
[谷歌瀏覽器]
我們開辟一個內(nèi)存,可能或有一些其他的變量等占用了這個內(nèi)存,谷歌瀏覽器都會間隔一段時間看這個內(nèi)存還有沒有被占用,如果發(fā)現(xiàn)有沒有被占用的內(nèi)存了,就自己幫我們回收了(內(nèi)存釋放)

[火狐和IE]
我們開個內(nèi)存,當(dāng)我們引用了它,就在內(nèi)存中記錄一個數(shù),增加一個引用瀏覽器就把這個數(shù)+1,減少一個引用,瀏覽器就把這個數(shù)-1…當(dāng)減到零的時候瀏覽器就把這個內(nèi)存釋放了;但是有些情況下(尤其是IE)記著記著就弄亂了,內(nèi)存就不能釋放了–>瀏覽器的內(nèi)存泄露

var obj={};
我們養(yǎng)成一個好的習(xí)慣,當(dāng)我們obj這個對象使用完成了,我們手動的obj=null (null空對象指針),瀏覽器會自己把剛才的堆內(nèi)存釋放掉


藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

前端js中動態(tài)添加的元素不能觸發(fā)綁定事件解決方法

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

問題描述:在頁面選擇關(guān)鍵詞時,需要將關(guān)鍵詞元素綁定點擊事件使同一類型的關(guān)鍵詞只有一個固定class,使其隨點擊更換,目的是為了讓這一類型的關(guān)鍵詞的值可以由class獲取。在原本寫死的關(guān)鍵詞上綁定的事件是可用的,但是換成動態(tài)加載后發(fā)現(xiàn)只能適用于寫死的情況。很無奈,在網(wǎng)上搜索一番后花了點時間終于解決了,下面奉上。  

參考文章:https://blog.csdn.net/qq_35129893/article/details/78363211?locationNum=2&fps=1

原本綁定事件如下:

[javascript] view plain copy
  1. //查詢條件class的加載和移除(不能綁定動態(tài)加載的標(biāo)簽)  
  2. $('.value_list').children.click(function(){     
  3.     $(this).addClass('a-time').siblings().removeClass('a-time');  

針對的HTML元素如下:

[html] view plain copy
  1. <div class="value_list value_list1" style="width: 80%;" id="subject">  
  2.     <span class="mr36" onclick="selectTopic(0)" value="0">全部</span>  
  3.     <a href="javascript:;" onclick="selectTopic("6eac9783353d40bba49e6b253e73f285")" value="dayu" types="subject" class="a-time">dayu</a>  
  4.     <a href="javascript:;" onclick="selectTopic("f9cbaa888cf34a99b6c50bf393e1a859")" value="天下會" types="subject" class="">天下會</a>  
  5.     <a href="javascript:;" onclick="selectTopic("3f4aa8924c88466dafc63d52aa57e7a6")" value="大雨" types="subject">大雨</a>  
  6.     <a href="javascript:;" onclick="selectTopic("87259765e9174a3b9d97f00a461e90bd")" value="士大夫" types="subject" class="">士大夫</a>  
  7. </div>  

但是發(fā)現(xiàn),原先的事件不能用于動態(tài)加載的元素,如上面加載的,加載形式如下:

[javascript] view plain copy
  1. //獲取關(guān)鍵詞列表  
  2. function getlist(){  
  3.     $("#subject").html("");  
  4.     $.ajax({  
  5.         type: "POST",  
  6.         url:path+"/key/queryKeys.php",  
  7.         dataType : "json",  
  8.         success: function(result) {  
  9.             var data = result.data;  
  10.             console.log(data+" 888");  
  11.             if(data!=''){  
  12.                 var html='<span class="a-time mr36" onclick="selectTopic(0)" value="0">全部</span>';  
  13.                 for(var i=0;i<data.length;i++){//如果不加"則只能傳遞數(shù)字變量而不能傳遞帶有字母的變量,加上"則無影響  
  14.                 //  html+='<li class="fl"><i class="iconfont close" onclick="del("'+data[i].kw_id+'")"></i>'+data[i].kw_word+'</li>';  
  15.                     html+='<a href="javascript:;" onclick="selectTopic("'+data[i].kw_id+'")" value="'+data[i].kw_word+'" types="subject">'+data[i].kw_word+'</a>'  
  16.                 }                             
  17.                 $("#subject").html(html);  
  18.             }else{  
  19.                 alert("請先登陸!");   
  20.             }  
  21.         }  
  22.          });   
  23. }  

無奈,只能上網(wǎng)尋求萬能的大神了。

基本上提供的解決方案就兩個,使用

$('element').live('click',function(){})

或者

$('父元素').on('click', '子元素', function(){})

我先是使用.live嘗試了下,發(fā)現(xiàn)gg,心灰意冷ing;本著試一試不要錢的心態(tài)又用.on試了下,結(jié)果令人驚喜??!可以使用了,哎,這鬼玩意坑死人。

下面上針對我加載的界面元素寫的綁定事件:

[javascript] view plain copy
  1. //查詢條件class的加載和移除(適用于動態(tài)加載標(biāo)簽的情況--on事件需要jquery在1.6以上)  
  2. $('.value_list').on('click','a,span',function(){  
  3.     $(this).addClass('a-time').siblings().removeClass('a-time');  
  4. ;  

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1.把wxParse文件全部放入項目。

2.在wxml中import wxParse.wxml,并把template插入到到對應(yīng)的位置上

[html] view plain copy
  1. <!--wxml-->  
  2. <import src="../../../wxParse/wxParse.wxml"/>  
  3. <view class="view-title">{{title}}</view>  
  4. <view class="view-time-box">  
  5.   <text class="view-date">{{date}}</text>  
  6.   <text class="view-time">{{time}}</text>  
  7. </view>  
  8. <template is="wxParse" data="{{wxParseData:article.nodes}}"/>  

3.在wxss中import wxParse.wxss,并設(shè)置樣式;比如‘wxParse-image’是富文本圖片轉(zhuǎn)化成image組件之后的類名,‘wxParse-p’是p標(biāo)簽轉(zhuǎn)化成view組件后設(shè)置的類名

[css] view plain copy
  1. <!--wxss-->  
  2. @import "../../../wxParse/wxParse.wxss";  
  3. page{  
  4.   background#fff;  
  5. }  
  6. .view-title{  
  7.   line-height80rpx;  
  8.   font-size48rpx;  
  9.   color:#0C0C0C;  
  10.   overflowhidden;  
  11.   text-overflow: ellipsis;  
  12.   display: -webkit-box;  
  13.   -webkit-line-clamp: 2;  
  14.   -webkit-box-orient: vertical;  
  15.   max-height190rpx;  
  16.   min-height80rpx;  
  17.   width:690rpx;  
  18.   padding:30rpx 30rpx 0;  
  19. }  
  20. .view-time-box{  
  21.   height66rpx;  
  22.   line-height66rpx;  
  23.   font-size30rpx;  
  24.   color:#999999;  
  25.   margin-bottom40rpx;  
  26.   padding:0 30rpx;  
  27. }  
  28. .view-date{  
  29.   margin-right20rpx;  
  30. }  
  31. .wxParse-img{  
  32.   margin-top:20rpx;  
  33.   displayblock;  
  34.   position:relative;  
  35.   top:0;  
  36.   left:50%;  
  37.   transform: translateX(-50%);  
  38. }  
  39. .wxParse-p{  
  40.   text-indent2em;  
  41.   margin-top:20rpx;  
  42.   color:#0C0C0C;  
  43.   line-height:50rpx;  
  44.   font-size:34rpx;  
  45.   padding:0 30rpx 30rpx;  
  46.   text-alignjustify;  
  47. }  

4.js

[javascript] view plain copy
  1. var WxParse = require('../../../wxParse/wxParse.js');  
  2. Page({  
  3.   
  4.   /** 
  5.    * 頁面的初始數(shù)據(jù) 
  6.    */  
  7.   data: {  
  8.     title: '',  
  9.     date: "",  
  10.     time: "",  
  11.     id: ''  
  12.   },  
  13.   
  14.   /** 
  15.    * 生命周期函數(shù)--監(jiān)聽頁面加載 
  16.    */  
  17.   onLoad: function (options) {  
  18.     this.setData({  
  19.       id:options.id  
  20.     })  
  21.   },  
  22.   onShow: function () {  
  23.     wx.showLoading({  
  24.       title: '加載中...',  
  25.     })  
  26.     var that = this;  
  27.   
  28.     // 模擬獲取數(shù)據(jù)  
  29.     setTimeout(function () {  
  30.       that.setData({  
  31.         title:'僑寶柑普茶新會陳皮僑寶柑',  
  32.         date:"2018-03-01",  
  33.         time:"13:20:53"  
  34.       })  
  35.       var article = `  
  36.         <img src="../../../imgs/index/s.png"></img>  
  37.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  38.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  39.         <img src="../../../imgs/index/s.png"></img>  
  40.     <p>近兩年,小青柑的火爆有目共睹,嬌小玲瓏的產(chǎn)品形態(tài)、便攜式的消費(fèi)場景、柑與茶結(jié)合的時尚方式以及獨特的口感和養(yǎng)生功效,都在順應(yīng)著目前年輕化、多元化、便攜化的茶葉消費(fèi)市場需求,讓它成為了一大爆品。</p>  
  41.       `;  
  42.       /** 
  43.       * WxParse.wxParse(bindName , type, data, target,imagePadding) 
  44.       * 1.bindName綁定的數(shù)據(jù)名(必填) 
  45.       * 2.type可以為html或者md(必填) 
  46.       * 3.data為傳入的具體數(shù)據(jù)(必填) 
  47.       * 4.target為Page對象,一般為this(必填) 
  48.       * 5.imagePadding為當(dāng)圖片自適應(yīng)是左右的單一padding(默認(rèn)為0,可選) 
  49.       */  
  50.       WxParse.wxParse('article''html', article, that, 20);  
  51.         
  52.       // 更改數(shù)據(jù)、獲取新數(shù)據(jù)完成  
  53.       wx.hideLoading();  
  54.     }, 500)  
  55.   }  
  56. })  
具體的API可以去GitHub上查看:https://github.com/icindy/wxParse








藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)


HTML5網(wǎng)頁掃描二維碼

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

[HTML]代碼

<!DOCTYPE html>
<html>
<head>
    <title>二維碼掃描測試</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<style type="text/css">
    html, body {
        height: 100%;
        width: 100%;
        text-align: center;
    }
</style>
<script src="../js/jquery-1.11.1.min.js"></script>
<script>
    //這段代 主要是獲取攝像頭的視頻流并顯示在Video 簽中
    var canvas = null, context = null, video = null;
    window.addEventListener("DOMContentLoaded", function () {
        try {
            canvas = document.getElementById("canvas");
            context = canvas.getContext("2d");
            video = document.getElementById("video");
            var videoObj = { "video": true, audio: false },
                flag = true,
                MediaErr = function (error) {
                    flag = false;
                    if (error.PERMISSION_DENIED) {
                        alert('用戶拒絕了瀏覽器請求媒體的權(quán)限', '提示');
                    } else if (error.NOT_SUPPORTED_ERROR) {
                        alert('對不起,您的瀏覽器不支持拍照功能,請使用其他瀏覽器', '提示');
                    } else if (error.MANDATORY_UNSATISFIED_ERROR) {
                        alert('指定的媒體類型未接收到媒體流', '提示');
                    } else {
                        alert('系統(tǒng)未能獲取到攝像頭,請確保攝像頭已正確安裝。或嘗試刷新頁面,重試', '提示');
                    }
                };
            //獲取媒體的兼容代碼,目前只支持(Firefox,Chrome,Opera)
            if (navigator.getUserMedia) {
                //qq瀏覽器不支持
                if (navigator.userAgent.indexOf('MQQBrowser') > -1) {
                    alert('對不起,您的瀏覽器不支持拍照功能,請使用其他瀏覽器', '提示');
                    return false;
                }
                navigator.getUserMedia(videoObj, function (stream) {
                    video.src = stream;
                    video.play();
                }, MediaErr);
            }
            else if (navigator.webkitGetUserMedia) {
                navigator.webkitGetUserMedia(videoObj, function (stream) {
                    video.src = window.webkitURL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            }
            else if (navigator.mozGetUserMedia) {
                navigator.mozGetUserMedia(videoObj, function (stream) {
                    video.src = window.URL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            }
            else if (navigator.msGetUserMedia) {
                navigator.msGetUserMedia(videoObj, function (stream) {
                    $(document).scrollTop($(window).height());
                    video.src = window.URL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            } else {
                alert('對不起,您的瀏覽器不支持拍照功能,請使用其他瀏覽器');
                return false;
            }
            if (flag) {
                //alert('為了獲得更準(zhǔn)確的測試結(jié)果,請盡量將二維碼置于框中,然后進(jìn)行拍攝、掃描。 請確保瀏覽器有權(quán)限使用攝像功能');
            }
            //這個是拍照按鈕的事件,
            $("#snap").click(function () { startPat(); }).show();
        } catch (e) {
            printHtml("瀏覽器不支持HTML5 CANVAS");
        }
    }, false);
    //打印內(nèi)容到頁面
    function printHtml(content) {
        $(window.document.body).append(content + "<br/>");
    }
    //開始拍照
    function startPat() {
        setTimeout(function () {//防止調(diào)用過快
            if (context) {
                context.drawImage(video, 0, 0, 320, 320);
                CatchCode();
            }
        }, 200);
    }
    //抓屏獲取圖像流,并上傳到服務(wù)器
    function CatchCode() {
        if (canvas != null) {
            //以下開始編 數(shù)據(jù)
            var imgData = canvas.toDataURL("image/jpeg");
            //將圖像轉(zhuǎn)換為base64數(shù)據(jù)
            var base64Data = imgData; //在前端截取22位之后的字符串作為圖像數(shù)據(jù)
            $.ajax({
                type: 'post',
                url: '../ashx/HandlerScan.ashx?method=ParseImage',
                data: 'ImgData=' + base64Data,
                dataType: "json",
                cache: false,
                timeout: 10000,
                success: function (mes) {
                    if (mes.code == '1') {
                        alert('未識別二維碼,請重新掃描!');
                    }
                    else {
                        alert(mes.name);
                    }
                },
                error: function (err) {
                    alert('掃描失敗' + err);
                }
            });
        }
    }
</script>
<body>
    <div id="support"></div>
    <div id="contentHolder">
        <video id="video" width="320" height="320" autoplay></video>
        <canvas id="canvas" style="display:none; background-color:#F00;" width="320" height="320"></canvas><br/>
        <button id="snap" style="display:none; height:50px; width:120px;">開始掃描</button>
    </div>
</body>
</html>  

[C#后臺]

    public class HandlerScan : IHttpHandler
    {
        private JsonResult js = new JsonResult();
        public void ProcessRequest(HttpContext context)
        {
            string result = string.Empty;
            string method = context.Request.QueryString.ToString();//獲取想要做的操作
            switch (method)
            {
                case "method=ParseImage":
                    result = ParseImage(context);
                    break;
                default:
                    break;
            }
            context.Response.ContentType = "text/json";
            context.Response.Write(result);
        }
        private string ParseImage(HttpContext context)
        {
            try
            {
                string imgStr = context.Request.Params["ImgData"].ToString();
                imgStr = imgStr.Replace("data:image/jpeg;base64,", "");
                //整理字符串
                imgStr = imgStr.Replace(" ", "+");
                byte[] arr = Convert.FromBase64String(imgStr);
                MemoryStream ms = new MemoryStream(arr, 0, arr.Length);
                Bitmap bmp = new Bitmap(ms);
                //解析圖片
                Result result = new BarcodeReader().Decode(bmp);
                if(result == null)
                {
                    return "{\"code\":1,\"name\":\"\"}";
                }
                else
                {
                    string[] a = result.Text.Split(','); 
                    string str = "{\"code\":0,\"name\":\"" + a[0] + "\"}";
                    return str; 
                }
            }
            catch (Exception ex)
            {
                return "{\"code\":1,\"msg\":\"" + ex.Message + "\",\"userName\":\"\"}";
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

日歷

鏈接

個人資料

存檔