<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Vue on 中二青年</title>
    <link>https://zhong-er.com/categories/vue/</link>
    <description>Recent content in Vue on 中二青年</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 10 Oct 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://zhong-er.com/categories/vue/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>【vue】项目配置</title>
      <link>https://zhong-er.com/posts/vue%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/vue%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;img alt=&#34;vue.jpg&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910086430_9431_1.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vue项目环境搭建&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;node ~~ python: node是用c++编写用来运行js代码的&lt;/p&gt;
&lt;p&gt;npm(cnpm) ~~ pip: npm是一个终端应用商城，可以换国内源cnpm&lt;/p&gt;
&lt;p&gt;vue ~~ django: vue是用来搭建vue前端项目的&lt;/p&gt;
&lt;p&gt;1）安装node&lt;/p&gt;
&lt;p&gt;官网下载安装包，傻瓜式安装：https://nodejs.org/zh-cn/&lt;/p&gt;
&lt;p&gt;2）换源安装cnpm&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;: npm install -g cnpm &amp;ndash; registry=https://registry.npm.taobao.org&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3）安装vue项目脚手架&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;: cnpm install -g @vue/cli&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注：2或3终端安装失败时，可以清空 npm缓存 再重复执行失败的步骤&lt;/p&gt;
&lt;p&gt;npm cache clean &amp;ndash;force&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vue项目创建&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入存放项目的目录&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;: cd ***&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;创建项目&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;: vue create 项目名&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;项目初始化&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;vue项目创建.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910104859_8974_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pycharm配置并启动vue项目&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;用pycharm打开vue项目&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加配置npm启动&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;配置vue启动.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910101130_940_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vue项目目录结构分析&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;├── v-proj
|	├── node_modules  	// 当前项目所有依赖，一般不可以移植给其他电脑环境
|	├── public			
|	|	├── favicon.ico	// 标签图标
|	|	└── index.html	// 当前项目唯一的页面
|	├── src
|	|	├── assets		// 静态资源img、css、js
|	|	├── components	// 小组件
|	|	├── views		// 页面组件
|	|	├── App.vue		// 根组件
|	|	├── main.js		// 全局脚本文件（项目的入口）
|	|	├── router.js	// 路由脚本文件（配置路由 url链接 与 页面组件的映射关系）
|	|	└── store.js	// 仓库脚本文件（vuex插件的配置文件，数据仓库）
|	├── README.md
└	└── **配置文件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;vue组件(.vue文件)&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【vue】条件循环/计算属性/属性监听</title>
      <link>https://zhong-er.com/posts/vue%E6%9D%A1%E4%BB%B6%E5%BE%AA%E7%8E%AF%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%E5%B1%9E%E6%80%A7%E7%9B%91%E5%90%AC/</link>
      <pubDate>Wed, 09 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/vue%E6%9D%A1%E4%BB%B6%E5%BE%AA%E7%8E%AF%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%E5%B1%9E%E6%80%A7%E7%9B%91%E5%90%AC/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;img alt=&#34;vue.jpg&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910086430_9431_1.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;条件指令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）两种都可以控制标签的显隐，绑定的值是布尔类型值，当都隐藏标签时&lt;/p&gt;
&lt;p&gt;v-if是不渲染标签&lt;/p&gt;
&lt;p&gt;v-show以 display:none 方式渲染&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;
    &amp;lt;p v-if=&amp;quot;isShow&amp;quot;&amp;gt;if条件指令&amp;lt;/p&amp;gt;
    &amp;lt;p v-show=&amp;quot;isShow&amp;quot;&amp;gt;show条件指令&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src=&amp;quot;js/vue.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    new Vue({
        el: &#39;#app&#39;,
        data: {
            isShow: false,
        }
    })
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2）v-if/v-else-if/v-else&lt;/p&gt;
&lt;p&gt;一组分支上成立，分支会屏蔽下方所有分支，else分支没有条件，在所有分支不成立后才显示&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .box {
        width: 400px;
        height: 300px;
    }
    .r { background-color: red; }
    .y { background-color: yellow }
    .b { background-color: blue; }
    .active {
        background-color: pink;
    }
&amp;lt;/style&amp;gt;
&amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;em&amp;quot;&amp;gt;
        &amp;lt;p&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;rBox&#39;)&amp;quot; :class=&amp;quot;{active: showName == &#39;rBox&#39;}&amp;quot;&amp;gt;红&amp;lt;/button&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;yBox&#39;)&amp;quot; :class=&amp;quot;{active: showName == &#39;yBox&#39;}&amp;quot;&amp;gt;黄&amp;lt;/button&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;bBox&#39;)&amp;quot; :class=&amp;quot;{active: showName == &#39;bBox&#39;}&amp;quot;&amp;gt;蓝&amp;lt;/button&amp;gt;
        &amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;rBox&#39;)&amp;quot; :class=&amp;quot;showName == &#39;rBox&#39; ? &#39;active&#39; : &#39;&#39;&amp;quot;&amp;gt;红&amp;lt;/button&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;yBox&#39;)&amp;quot; :class=&amp;quot;showName == &#39;yBox&#39; ? &#39;active&#39; : &#39;&#39;&amp;quot;&amp;gt;黄&amp;lt;/button&amp;gt;
            &amp;lt;button @click=&amp;quot;changeBox(&#39;bBox&#39;)&amp;quot; :class=&amp;quot;showName == &#39;bBox&#39; ? &#39;active&#39; : &#39;&#39;&amp;quot;&amp;gt;蓝&amp;lt;/button&amp;gt;
        &amp;lt;/p&amp;gt;
        &amp;lt;div class=&amp;quot;box r&amp;quot; v-if=&amp;quot;showName == &#39;rBox&#39;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&amp;quot;box y&amp;quot; v-else-if=&amp;quot;showName == &#39;yBox&#39;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&amp;quot;box b&amp;quot; v-else&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src=&amp;quot;js/vue.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    new Vue({
        el: &#39;#app&#39;,
        data: {
            showName: &#39;rBox&#39;
        },
        methods: {
            changeBox(name) {
                this.showName = name;
            }
        }
    })
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&#34;001.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910098559_2432.png-zhonger.com&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【vue】组件</title>
      <link>https://zhong-er.com/posts/vue%E7%BB%84%E4%BB%B6/</link>
      <pubDate>Wed, 09 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/vue%E7%BB%84%E4%BB%B6/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;img alt=&#34;vue.jpg&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910086430_9431_1.jpg&#34;&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;********&lt;strong&gt;组件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）组件：一个包含html、css、js独立的集合体，这样的集合体可以完成页面结构的代码复用&lt;/p&gt;
&lt;p&gt;2）组件分为根组件、全局组件与局部组件&lt;/p&gt;
&lt;p&gt;根组件：所有被new Vue()产生的组件，在项目开发阶段，一个项目只会出现一个根组件&lt;/p&gt;
&lt;p&gt;全局组件：不用注册，就可以成为任何一个组件的字组件&lt;/p&gt;
&lt;p&gt;局部组件：必须注册，才可以成为注册该局部组件的子组件&lt;/p&gt;
&lt;p&gt;3）每一个组件都有自身的html结构，css样式，js逻辑&lt;/p&gt;
&lt;p&gt;每一个组件其实都有自己的template，就是用来标识自己html结构的&lt;/p&gt;
&lt;p&gt;template模板中有且只有一个根标签&lt;/p&gt;
&lt;p&gt;根组件一般不提供template，就由挂载点的真实DOM提供html结构&lt;/p&gt;
&lt;p&gt;4）除根组件的其他组件，数据要有局部作用域，保证组件复用是，各组件间数据的独立性&lt;/p&gt;
&lt;p&gt;5）在多组件共处时，在哪个组件模板中出现的变量，由当前组件提供&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;局部组件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）创建局部组件&lt;/p&gt;
&lt;p&gt;2）在父组件中注册该局部组件&lt;/p&gt;
&lt;p&gt;3）在父组件的template模板中渲染该局部组件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .box {
        box-shadow: 0 3px 5px 0 #666;
        width: 240px;
        height: 300px;
        text-align: center;
        padding: 20px 0;
        float: left;
        margin: 5px;
    }
    .box img {
        width: 200px;
    }
&amp;lt;/style&amp;gt;
&amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;
    &amp;lt;!--&amp;lt;mcc&amp;gt;&amp;lt;/mcc&amp;gt;--&amp;gt;
    &amp;lt;local-tag&amp;gt;&amp;lt;/local-tag&amp;gt;
    &amp;lt;local-tag&amp;gt;&amp;lt;/local-tag&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src=&amp;quot;js/vue.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    let localTag = {
        template: `
        &amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;
            &amp;lt;img src=&amp;quot;img/666.jpg&amp;quot; alt=&amp;quot;&amp;quot;&amp;gt;
            &amp;lt;h3&amp;gt;凤哥&amp;lt;/h3&amp;gt;
            &amp;lt;p&amp;gt;马叉虫❤马叉虫&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        `
    };

    new Vue({
        el: &#39;#app&#39;,
        components: {
            // mcc: localTag,
            // localTag,
            &#39;local-tag&#39;: localTag,
        }
    })
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;全局组件&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【vue】模板语法</title>
      <link>https://zhong-er.com/posts/vue%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95/</link>
      <pubDate>Tue, 08 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/vue%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;img alt=&#34;vue.jpg&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201910086430_9431_1.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vue导读&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）vue框架是前台框架，常见的前台框架有：Angular、React、Vue&lt;/p&gt;
&lt;p&gt;2）vue是结合其他框架的优点：轻量级、中文API、数据驱动、双向绑定、MVVM设计模式、支持组件化开发、单页面应用&lt;/p&gt;
&lt;p&gt;MVVM设计模式：MV数据到视图一层数据处理，向后台请求数据渲染页面；VM视图再到数据一层数据处理，前台获取的用户数据到后台。&lt;/p&gt;
&lt;p&gt;3）vue环境，本地导入与cdn导入&lt;/p&gt;
&lt;p&gt;4）vue是js渐进式框架&lt;/p&gt;
&lt;p&gt;根据开发需求，可以决定vue框架控制项目的具体方位：可以为一个标签，也可以为一个页面，甚至可以为整个项目&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实例成员-挂载点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）vue通过挂载点与html页面结构建立关联&lt;/p&gt;
&lt;p&gt;2）html与body不能作为挂载点&lt;/p&gt;
&lt;p&gt;3）一个vue对象挂载点只会索引一个匹配结果，所以挂载点一般用id标识&lt;/p&gt;
&lt;p&gt;el：实例&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&amp;quot;wrap&amp;quot;&amp;gt;
    {{ }}
    &amp;lt;hr&amp;gt;
    &amp;lt;div class=&amp;quot;main&amp;quot;&amp;gt;
        {{ }}
    &amp;lt;/div&amp;gt;
    &amp;lt;hr&amp;gt;
    &amp;lt;div class=&amp;quot;main&amp;quot;&amp;gt;
        {{ }}
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;script src=&amp;quot;js/vue.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    new Vue({
        el: &#39;#wrap&#39;  // el表示挂载点
    })
&amp;lt;/script&amp;gt;
//实例与页面挂载点一一对应
//一个页面中可以出现多个实例对应多个挂载点
//实例只操作挂载点内部内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;js对象(字典)补充&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let b = 20;
let dic = {
    a: 10,  // 字典本身就是对象，key都是字符串形式可以省略引号
    b  // 值为变量时，且与key同名，可以简写
};
console.log(dic)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;实例成员-数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1）用实例成员data为vue环境提供数据，数据采用字典{}形式&lt;/p&gt;
&lt;p&gt;2）在插值表达式{{}}中，直接书写数据的key来访问数据&lt;/p&gt;
&lt;p&gt;{{}}是插值表达式，中间出现的info是vue变量&lt;/p&gt;
&lt;p&gt;插值表达式内可以直接做简单的数学运算&lt;/p&gt;
&lt;p&gt;复杂的运算就需要借助过滤器&lt;/p&gt;</description>
    </item>
    <item>
      <title>【前端】BOM和DOM</title>
      <link>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFbom%E5%92%8Cdom/</link>
      <pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFbom%E5%92%8Cdom/</guid>
      <description>&lt;h1 id=&#34;前戏&#34;&gt;前戏&lt;/h1&gt;
&lt;p&gt;到目前为止，我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法，并没有和浏览器有任何交互。&lt;/p&gt;
&lt;p&gt;也就是我们还不能制作一些我们经常看到的网页的一些交互，我们需要继续学习BOM和DOM相关知识。&lt;/p&gt;
&lt;p&gt;JavaScript分为 ECMAScript，DOM，BOM。&lt;/p&gt;
&lt;p&gt;BOM（Browser Object Model）是指浏览器对象模型，它使 JavaScript 有能力与浏览器进行“对话”。&lt;/p&gt;
&lt;p&gt;DOM （Document Object Model）是指文档对象模型，通过它，可以访问HTML文档的所有元素。&lt;/p&gt;
&lt;p&gt;Window对象是客户端JavaScript最高层对象之一，由于window对象是其它大部分对象的共同祖先，在调用window对象的方法和属性时，可以省略window对象的引用。例如：window.document.write()可以简写成：document.write()。&lt;/p&gt;
&lt;h2 id=&#34;window对象&#34;&gt;window对象&lt;/h2&gt;
&lt;p&gt;所有浏览器都支持 window 对象。它表示浏览器窗口。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*如果文档包含框架（frame 或 iframe 标签），浏览器会为 HTML 文档创建一个 window 对象，并为每个框架创建一个额外的 window 对象。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*没有应用于 window 对象的公开标准，不过所有浏览器都支持该对象。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。&lt;/p&gt;
&lt;p&gt;全局变量是 window 对象的属性。全局函数是 window 对象的方法。&lt;/p&gt;
&lt;p&gt;接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。&lt;/p&gt;
&lt;p&gt;一些常用的Window方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;window.innerHeight - 浏览器窗口的内部高度&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;window.innerWidth - 浏览器窗口的内部宽度&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;window.open() - 打开新窗口&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;window.close() - 关闭当前窗口&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;window的子对象&#34;&gt;window的子对象&lt;/h2&gt;
&lt;h3 id=&#34;navigator对象了解即可&#34;&gt;navigator对象（了解即可）&lt;/h3&gt;
&lt;p&gt;浏览器对象，通过这个对象可以判定用户所使用的浏览器，包含了浏览器相关信息。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;navigator.appName　　// Web浏览器全称
navigator.appVersion　　// Web浏览器厂商和版本的详细字符串
navigator.userAgent　　// 客户端绝大部分信息
navigator.platform　　　// 浏览器运行所在的操作系统
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;screen对象了解即可&#34;&gt;screen对象（了解即可）&lt;/h3&gt;
&lt;p&gt;屏幕对象，不常用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【前端】JavaScript</title>
      <link>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFjavascript/</link>
      <pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFjavascript/</guid>
      <description>&lt;h2 id=&#34;javascript引入方式&#34;&gt;JavaScript引入方式&lt;/h2&gt;
&lt;h3 id=&#34;script标签内写代码&#34;&gt;Script标签内写代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  // 在这里写你的JS代码
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;引入额外的js文件&#34;&gt;引入额外的JS文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&amp;quot;myscript.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;javascript语言规范&#34;&gt;JavaScript语言规范&lt;/h2&gt;
&lt;h3 id=&#34;注释注释是代码之母&#34;&gt;注释（注释是代码之母）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// 这是单行注释

/*
这是
多行注释
*/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;结束符&#34;&gt;结束符&lt;/h3&gt;
&lt;p&gt;JavaScript中的语句要以分号（;）为结束符。&lt;/p&gt;
&lt;h2 id=&#34;javascript语言基础&#34;&gt;JavaScript语言基础&lt;/h2&gt;
&lt;h3 id=&#34;变量声明&#34;&gt;变量声明&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;JavaScript的变量名可以使用_，数字，字母，$组成，不能以数字开头。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;声明变量使用 var 变量名; 的格式来进行声明&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;var name = &amp;quot;Alex&amp;quot;;
var age = 18;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;p&gt;变量名是区分大小写的。&lt;/p&gt;
&lt;p&gt;推荐使用驼峰式命名规则。&lt;/p&gt;
&lt;p&gt;保留字不能用做变量名。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;补充：&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ES6新增了let命令，用于声明变量。其用法类似于var，但是所声明的变量只在let命令所在的代码块内有效。例如：for循环的计数器就很适合使用let命令。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for (let i=0;i&amp;lt;arr.length;i++){...}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;ES6新增const用来声明常量。一旦声明，其值就不能改变。&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const PI = 3.1415;
PI // 3.1415

PI = 3
// TypeError: &amp;quot;PI&amp;quot; is read-only
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;javascript数据类型&#34;&gt;JavaScript数据类型&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;JavaScript拥有动态类型&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var x;  // 此时x是undefined
var x = 1;  // 此时x是数字
var x = &amp;quot;Alex&amp;quot;  // 此时x是字符串
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;数值number&#34;&gt;&lt;strong&gt;数值(Number)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;JavaScript不区分整型和浮点型，就只有一种数字类型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【前端】JQuery</title>
      <link>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFjquery/</link>
      <pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFjquery/</guid>
      <description>&lt;h1 id=&#34;jquerypng&#34;&gt;&lt;img alt=&#34;jQuery.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201909106733_5460.png&#34;&gt;&lt;/h1&gt;
&lt;h1 id=&#34;jquery&#34;&gt;jQuery&lt;/h1&gt;
&lt;h2 id=&#34;jquery介绍&#34;&gt;jQuery介绍&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;jQuery是一个轻量级的、兼容多浏览器的JavaScript库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互，能够极大地简化JavaScript编程。它的宗旨就是：“Write less, do more.“&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;jquery的优势&#34;&gt;jQuery的优势&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;一款轻量级的JS框架。jQuery核心js文件才几十kb，不会影响页面加载速度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;丰富的DOM选择器,jQuery的选择器用起来很方便，比如要找到某个DOM对象的相邻元素，JS可能要写好几行代码，而jQuery一行代码就搞定了，再比如要将一个表格的隔行变色，jQuery也是一行代码搞定。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;链式表达式。jQuery的链式操作可以把多个操作写在一行代码里，更加简洁。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;事件、样式、动画支持。jQuery还简化了js操作css的代码，并且代码的可读性也比js要强。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ajax操作支持。jQuery简化了AJAX操作，后端只需返回一个JSON格式的字符串就能完成与前端的通信。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;跨浏览器兼容。jQuery基本兼容了现在主流的浏览器，不用再为浏览器的兼容问题而伤透脑筋。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;插件扩展开发。jQuery有着丰富的第三方的插件，例如：树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件，并且用jQuery插件做出来的效果很炫，并且可以根据自己需要去改写和封装插件，简单实用。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;jquery内容&#34;&gt;jQuery内容：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;选择器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;筛选器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;样式操作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文本操作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;属性操作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文档处理&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;事件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;动画效果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;插件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;each、data、Ajax&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下载链接：&lt;a href=&#34;https://jquery.com/&#34;&gt;jQuery官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;中文文档：&lt;a href=&#34;http://jquery.cuishifeng.cn/&#34;&gt;jQuery AP中文文档&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;jquery版本&#34;&gt;jQuery版本&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1.x：兼容IE678,使用最为广泛的，官方只做BUG维护，功能不再新增。因此一般项目来说，使用1.x版本就可以了，最终版本：1.12.4 (2016年5月20日)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2.x：不兼容IE678，很少有人使用，官方只做BUG维护，功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x，最终版本：2.2.4 (2016年5月20日)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3.x：不兼容IE678，只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;维护IE678是一件让人头疼的事情，一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少，PC端用户已经逐步被移动端用户所取代，如果没有特殊要求的话，一般都会选择放弃对678的支持。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;jquery对象&#34;&gt;jQuery对象&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象，那么它就可以使用jQuery里的方法：例如$(“#i1”).html()。
$(&amp;quot;#i1&amp;quot;).html()的意思是：获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。
相当于： document.getElementById(&amp;quot;i1&amp;quot;).innerHTML;
虽然 jQuery对象是包装 DOM对象后产生的，但是 jQuery对象无法使用 DOM对象的任何方法，同理 DOM对象也没不能使用 jQuery里的方法。
一个约定，我们在声明一个jQuery对象变量的时候在变量名前面加上$：


var $variable = jQuery对像
var variable = DOM对象
$variable[0]//jQuery对象转成DOM对象
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拿上面那个例子举例，jQuery对象和DOM对象的使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$(&amp;quot;#i1&amp;quot;).html();//jQuery对象可以使用jQuery的方法
$(&amp;quot;#i1&amp;quot;)[0].innerHTML;// DOM对象使用DOM的方法
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;jquery基础语法&#34;&gt;jQuery基础语法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;$(selector).action()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;查找标签&#34;&gt;查找标签&lt;/h2&gt;
&lt;h3 id=&#34;基本选择器&#34;&gt;基本选择器&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;id选择器：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【前端】CSS</title>
      <link>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFcss/</link>
      <pubDate>Wed, 04 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFcss/</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. CSS介绍&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CSS（Cascading Style Sheet，层叠样式表)定义如何显示HTML元素。&lt;/p&gt;
&lt;p&gt;当浏览器读到一个样式表，它就会按照这个样式表来对文档进行格式化（渲染）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. CSS语法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.1 CSS实例&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;每个CSS样式由两个组成部分：选择器和声明。声明又包括属性和属性值。每个声明之后用分号结束。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;867021-20171215115756808-909989248.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201909042855_2638.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.2 CSS注释&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*这是注释*/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. CSS的几种引入方式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.1 行内样式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;行内式是在标记的style属性中设定CSS样式。不推荐大规模使用。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p style=&amp;quot;color: red&amp;quot;&amp;gt;Hello world.&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3.2内部样式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;嵌入式是将CSS样式集中写在网页的&lt;head&gt;&lt;/head&gt;标签对的&lt;style&gt;&lt;/style&gt;标签对中。格式如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
    &amp;lt;title&amp;gt;Title&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        p{
            background-color: #2b99ff;
        }
    &amp;lt;/style&amp;gt;&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3.3 外部样式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;外部样式就是将css写在一个单独的文件中，然后在页面进行引入即可。推荐使用此方式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link href=&amp;quot;mystyle.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4. CSS选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.1 基本选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;元素选择器&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*元素选择器*/
p {color: &amp;quot;red&amp;quot;;}

/*ID选择器*/
#i1 {
  background-color: red;
}

/*类选择器*/
.c1 {
  font-size: 14px;
}
p.c1 {
  color: red;
}
/*注意：
样式类名不要用数字开头（有的浏览器不认）。
标签中的class属性如果有多个，要用空格分隔。*/

/*通用选择器*/
* {
  color: white;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4.2 组合选择器&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【前端】HTML</title>
      <link>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFhtml/</link>
      <pubDate>Tue, 03 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://zhong-er.com/posts/%E5%89%8D%E7%AB%AFhtml/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;HTML.png&#34; loading=&#34;lazy&#34; src=&#34;https://zhong-er.com/assets/201909033609_3808_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;a href=&#34;https://mubu.com/doc/1xQPI57bf8&#34; title=&#34;思维导图&#34;&gt;&lt;strong&gt;思维导图&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web服务本质&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.浏览器发请求 &amp;ndash;&amp;gt; HTTP协议 &amp;ndash;&amp;gt;&lt;/p&gt;
&lt;p&gt;2.服务端接收请求 &amp;ndash;&amp;gt;&lt;/p&gt;
&lt;p&gt;3.服务端返回响应 &amp;ndash;&amp;gt; 服务端把HTML文件内容发给浏览器 &amp;ndash;&amp;gt;&lt;/p&gt;
&lt;p&gt;4.浏览器渲染页面&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import socket
sk = socket.socket()
sk.bind((&amp;quot;127.0.0.1&amp;quot;, 8080))
sk.listen(5)
while True:
    conn, addr = sk.accept()
    data = conn.recv(8096)
    conn.send(b&amp;quot;HTTP/1.1 200 OK\r\n\r\n&amp;quot;)
    conn.send(b&amp;quot;&amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;&amp;quot;)
    conn.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;HTTP协议&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;超文本传输协议，规定了浏览器与服务端之间消息传输的数据格式&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四大特性：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.基于请求响应&lt;/p&gt;
&lt;p&gt;2.基于TCP/IP之上的作用于应用层的协议&lt;/p&gt;
&lt;p&gt;3.无状态(服务端无法保存用户的状态)&lt;/p&gt;
&lt;p&gt;4.无连接(请求一次响应一次，之后立刻断开连接)&lt;/p&gt;
&lt;p&gt;websocket相当于HTTP协议的一个补丁，它支持长连接&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;请求数据格式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请求首行(表示HTTP协议版本，当前请求方式)&lt;/p&gt;
&lt;p&gt;请求头(一大堆k,v键值对)&lt;/p&gt;
&lt;p&gt;请求体(携带的是一些敏感信息比如密码、身份证号&amp;hellip;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;响应数据格式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;响应首行(标识HTTP协议版本,响应状态码)&lt;/p&gt;
&lt;p&gt;响应头(一大堆k,v键值对)&lt;/p&gt;
&lt;p&gt;响应体(返回给浏览器页面的数据 通常响应体都是html页面)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;响应状态码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用一串简单的数字来表示一些复杂的状态或者提示信息&lt;/p&gt;
&lt;p&gt;1XX:服务端已经成功接收了你的数据正在处理 你可以继续提交额外的数据&lt;/p&gt;
&lt;p&gt;2XX:服务端成功响应 你想要的数据(请求成功200)&lt;/p&gt;
&lt;p&gt;3XX:重定向(当你在访问一个需要登录之后才能访问的页面 你会发现窗口会自动调到登录页面 301 302)&lt;/p&gt;
&lt;p&gt;4XX:请求错误(请求资源不存在404,请求不合法不符合内部规定会权限不够403)&lt;/p&gt;
&lt;p&gt;5XX:服务器内部错误(500)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;请求方式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;get请求(向服务端要资源）&lt;/p&gt;
&lt;p&gt;post请求(向服务端提交数据)&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
