From 840d64c5378751e5c89803041a539430fabe2252 Mon Sep 17 00:00:00 2001 From: Silence-dream <1428482231@qq.com> Date: Thu, 19 Dec 2024 01:19:46 +0000 Subject: [PATCH] update at 2024-12-19 01:19:46 - by github actions --- .../Vue/02-Vue3/index.html" | 945 + .../index.html" | 908 + .../index.html" | 377 + .../index.html" | 588 + .../Vue/01-Vue2/index.html" | 441 + .../index.html" | 1194 + .../index.html" | 356 + .../index.html" | 355 + .../index.html" | 780 + .../index.html" | 422 + .../index.html" | 362 + .../index.html" | 581 + .../index.html" | 441 + .../index.html" | 351 + .../shell/01-windows-powerline/index.html" | 413 + .../React/03-React-hooks/index.html" | 431 + .../index.html" | 398 + .../Nuxt/01-Nuxt/index.html" | 699 + .../index.html" | 371 + .../index.html" | 361 + .../Vue/04-VueCli/index.html" | 355 + .../index.html" | 417 + .../index.html" | 380 + .../index.html" | 351 + .../WebAssembly/WebAssembly/index.html" | 351 + .../template/index.html" | 350 + .../index.html" | 493 + .../index.html" | 390 + .../index.html" | 369 + 404.html | 341 + CNAME | 1 + about/index.html | 485 + album/index.html | 341 + anzhiyu/random.js | 3 + archives/2020/05/index.html | 342 + archives/2020/index.html | 342 + archives/2021/03/index.html | 342 + archives/2021/05/index.html | 342 + archives/2021/06/index.html | 342 + archives/2021/09/index.html | 342 + archives/2021/10/index.html | 342 + archives/2021/index.html | 342 + archives/2021/page/2/index.html | 342 + archives/2022/02/index.html | 342 + archives/2022/05/index.html | 342 + archives/2022/index.html | 342 + archives/2023/07/index.html | 342 + archives/2023/index.html | 342 + archives/2024/01/index.html | 342 + archives/2024/index.html | 342 + archives/index.html | 342 + archives/page/2/index.html | 342 + archives/page/3/index.html | 342 + assets/algolia/algoliasearch.js | 7190 ++++ assets/algolia/algoliasearch.min.js | 4 + assets/algolia/algoliasearchLite.js | 4453 +++ assets/algolia/algoliasearchLite.min.js | 3 + categories/JavaScript/index.html | 384 + categories/Solidity/index.html | 384 + categories/index.html | 376 + categories/npm/index.html | 384 + .../\345\211\215\347\253\257/index.html" | 384 + .../JavaScript/index.html" | 384 + .../index.html" | 384 + .../index.html" | 384 + css/index.css | 27345 ++++++++++++++++ css/var.css | 0 dailyPhoto/index.html | 342 + equipment/index.html | 341 + essay/index.html | 341 + favicon.ico | Bin 0 -> 4286 bytes img/404.jpg | Bin 0 -> 141552 bytes img/512.png | Bin 0 -> 4172 bytes img/algolia.svg | 9 + img/comment_bg.png | Bin 0 -> 4246 bytes img/default_cover.jpg | Bin 0 -> 14808 bytes img/favicon.ico | Bin 0 -> 4286 bytes img/friend_404.gif | Bin 0 -> 604315 bytes img/loading.gif | Bin 0 -> 738187 bytes img/siteicon/16.png | Bin 0 -> 283 bytes img/siteicon/32.png | Bin 0 -> 431 bytes img/siteicon/apple-icon-180.png | Bin 0 -> 2272 bytes img/siteicon/manifest-icon-192.maskable.png | Bin 0 -> 2329 bytes img/siteicon/manifest-icon-512.maskable.png | Bin 0 -> 6723 bytes index.html | 441 + js/anzhiyu/ai_abstract.js | 438 + js/anzhiyu/comment_barrage.js | 179 + js/anzhiyu/people.js | 271 + js/anzhiyu/random_friends_post.js | 215 + js/anzhiyu/right_click_menu.js | 479 + js/main.js | 1813 + js/search/algolia.js | 192 + js/search/local-search.js | 270 + js/tw_cn.js | 130 + js/utils.js | 1435 + json/music.json | 1 + link/index.html | 342 + music/index.html | 341 + page/2/index.html | 483 + page/3/index.html | 491 + tags/Cypress/index.html | 417 + tags/JavaScript/index.html | 417 + tags/Nuxt/index.html | 417 + tags/React/index.html | 417 + tags/Solidity/index.html | 417 + tags/TypeScript/index.html | 417 + tags/Vue/index.html | 417 + tags/index.html | 417 + tags/npm/index.html | 417 + tags/shell/index.html | 417 + tags/sql/index.html | 417 + .../index.html" | 417 + "tags/\345\216\237\347\245\236/index.html" | 417 + .../index.html" | 417 + "tags/\346\225\231\347\250\213/index.html" | 417 + "tags/\346\265\213\350\257\225/index.html" | 417 + wordScenery/index.html | 342 + 117 files changed, 79526 insertions(+) create mode 100644 "2020/05/08/\345\211\215\347\253\257/Vue/02-Vue3/index.html" create mode 100644 "2020/05/08/\345\211\215\347\253\257/Vue/03-Vue3-\347\273\204\345\220\210\345\274\217 API/index.html" create mode 100644 "2020/05/20/\345\216\237\347\245\236/\345\216\237\347\245\236\346\212\275\345\215\241\350\256\260\345\275\225\346\212\223\345\217\226/index.html" create mode 100644 "2021/03/08/\345\211\215\347\253\257/TypeScript/01.TypeScript\347\254\224\350\256\260/index.html" create mode 100644 "2021/03/08/\345\211\215\347\253\257/Vue/01-Vue2/index.html" create mode 100644 "2021/05/01/\345\220\216\347\253\257/01-Sql\345\237\272\347\241\200/index.html" create mode 100644 "2021/05/01/\345\220\216\347\253\257/03-MySQL\350\270\251\345\235\221/index.html" create mode 100644 "2021/05/02/\345\211\215\347\253\257/JavaScript/03-\345\256\236\347\216\260\351\230\262\346\212\226\345\222\214\350\212\202\346\265\201/index.html" create mode 100644 "2021/05/07/\345\211\215\347\253\257/React/01-React\347\254\224\350\256\260/index.html" create mode 100644 "2021/05/07/\345\211\215\347\253\257/React/02-Redux\347\254\224\350\256\260/index.html" create mode 100644 "2021/05/07/\345\211\215\347\253\257/React/React\346\200\273\347\273\223\347\254\224\350\256\260/index.html" create mode 100644 "2021/05/14/\345\211\215\347\253\257/JavaScript/01-Effective JavaScript \347\274\226\345\206\231\351\253\230\350\264\250\351\207\217JavaScript\344\273\243\347\240\201\347\232\20468\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225/index.html" create mode 100644 "2021/05/20/\345\211\215\347\253\257/JavaScript/02-hash \345\222\214 history \350\267\257\347\224\261\347\232\204\345\214\272\345\210\253/index.html" create mode 100644 "2021/06/08/\344\277\241\345\256\211\345\267\245\345\205\267/01-\345\267\245\345\205\267\344\270\213\350\275\275\351\223\276\346\216\245/index.html" create mode 100644 "2021/06/08/\345\211\215\347\253\257/shell/01-windows-powerline/index.html" create mode 100644 "2021/06/10/\345\211\215\347\253\257/React/03-React-hooks/index.html" create mode 100644 "2021/06/10/\345\211\215\347\253\257/React/04-React\345\270\270\347\224\250\345\272\223/index.html" create mode 100644 "2021/09/29/\345\211\215\347\253\257/Nuxt/01-Nuxt/index.html" create mode 100644 "2021/10/28/\345\211\215\347\253\257/JavaScript/01-JavaScript\345\260\217\346\212\200\345\267\247/index.html" create mode 100644 "2021/10/28/\345\211\215\347\253\257/JavaScript/02-JavsScript\351\253\230\347\272\247/index.html" create mode 100644 "2022/02/08/\345\211\215\347\253\257/Vue/04-VueCli/index.html" create mode 100644 "2022/02/08/\345\211\215\347\253\257/Vue/05-Vu3-Setup\350\257\255\346\263\225\347\263\226/index.html" create mode 100644 "2022/05/10/\345\211\215\347\253\257/JavaScript/JavaScript\350\256\276\350\256\241\346\250\241\345\274\217/08-\345\217\221\345\270\203-\350\256\242\351\230\205\346\250\241\345\274\217/index.html" create mode 100644 "2022/05/20/\345\211\215\347\253\257/01-npm\345\210\253\345\220\215/index.html" create mode 100644 "2023/07/10/\345\211\215\347\253\257/WebAssembly/WebAssembly/index.html" create mode 100644 "2023/07/11/\345\214\272\345\235\227\351\223\276/template/index.html" create mode 100644 "2023/07/17/\345\211\215\347\253\257/Cypress/01-Cypress \344\275\277\347\224\250\346\214\207\345\215\227/index.html" create mode 100644 "2024/01/01/\345\214\272\345\235\227\351\223\276/Solidity/01-Solidity \345\205\245\351\227\250\346\225\231\347\250\213/index.html" create mode 100644 "2024/12/19/\345\211\215\347\253\257/TypeScript/02.\344\270\264\346\227\266\347\254\224\350\256\260/index.html" create mode 100644 404.html create mode 100644 CNAME create mode 100644 about/index.html create mode 100644 album/index.html create mode 100644 anzhiyu/random.js create mode 100644 archives/2020/05/index.html create mode 100644 archives/2020/index.html create mode 100644 archives/2021/03/index.html create mode 100644 archives/2021/05/index.html create mode 100644 archives/2021/06/index.html create mode 100644 archives/2021/09/index.html create mode 100644 archives/2021/10/index.html create mode 100644 archives/2021/index.html create mode 100644 archives/2021/page/2/index.html create mode 100644 archives/2022/02/index.html create mode 100644 archives/2022/05/index.html create mode 100644 archives/2022/index.html create mode 100644 archives/2023/07/index.html create mode 100644 archives/2023/index.html create mode 100644 archives/2024/01/index.html create mode 100644 archives/2024/index.html create mode 100644 archives/index.html create mode 100644 archives/page/2/index.html create mode 100644 archives/page/3/index.html create mode 100644 assets/algolia/algoliasearch.js create mode 100644 assets/algolia/algoliasearch.min.js create mode 100644 assets/algolia/algoliasearchLite.js create mode 100644 assets/algolia/algoliasearchLite.min.js create mode 100644 categories/JavaScript/index.html create mode 100644 categories/Solidity/index.html create mode 100644 categories/index.html create mode 100644 categories/npm/index.html create mode 100644 "categories/\345\211\215\347\253\257/index.html" create mode 100644 "categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/JavaScript/index.html" create mode 100644 "categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/index.html" create mode 100644 "categories/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" create mode 100644 css/index.css create mode 100644 css/var.css create mode 100644 dailyPhoto/index.html create mode 100644 equipment/index.html create mode 100644 essay/index.html create mode 100644 favicon.ico create mode 100644 img/404.jpg create mode 100644 img/512.png create mode 100644 img/algolia.svg create mode 100644 img/comment_bg.png create mode 100644 img/default_cover.jpg create mode 100644 img/favicon.ico create mode 100644 img/friend_404.gif create mode 100644 img/loading.gif create mode 100644 img/siteicon/16.png create mode 100644 img/siteicon/32.png create mode 100644 img/siteicon/apple-icon-180.png create mode 100644 img/siteicon/manifest-icon-192.maskable.png create mode 100644 img/siteicon/manifest-icon-512.maskable.png create mode 100644 index.html create mode 100644 js/anzhiyu/ai_abstract.js create mode 100644 js/anzhiyu/comment_barrage.js create mode 100644 js/anzhiyu/people.js create mode 100644 js/anzhiyu/random_friends_post.js create mode 100644 js/anzhiyu/right_click_menu.js create mode 100644 js/main.js create mode 100644 js/search/algolia.js create mode 100644 js/search/local-search.js create mode 100644 js/tw_cn.js create mode 100644 js/utils.js create mode 100644 json/music.json create mode 100644 link/index.html create mode 100644 music/index.html create mode 100644 page/2/index.html create mode 100644 page/3/index.html create mode 100644 tags/Cypress/index.html create mode 100644 tags/JavaScript/index.html create mode 100644 tags/Nuxt/index.html create mode 100644 tags/React/index.html create mode 100644 tags/Solidity/index.html create mode 100644 tags/TypeScript/index.html create mode 100644 tags/Vue/index.html create mode 100644 tags/index.html create mode 100644 tags/npm/index.html create mode 100644 tags/shell/index.html create mode 100644 tags/sql/index.html create mode 100644 "tags/\345\214\272\345\235\227\351\223\276/index.html" create mode 100644 "tags/\345\216\237\347\245\236/index.html" create mode 100644 "tags/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" create mode 100644 "tags/\346\225\231\347\250\213/index.html" create mode 100644 "tags/\346\265\213\350\257\225/index.html" create mode 100644 wordScenery/index.html diff --git "a/2020/05/08/\345\211\215\347\253\257/Vue/02-Vue3/index.html" "b/2020/05/08/\345\211\215\347\253\257/Vue/02-Vue3/index.html" new file mode 100644 index 0000000000..60c39dd557 --- /dev/null +++ "b/2020/05/08/\345\211\215\347\253\257/Vue/02-Vue3/index.html" @@ -0,0 +1,945 @@ +Vue 3.0 笔记 | WaterBoat的博客
加载头像

Vue 3.0 笔记

Vue 3.0 笔记

Node(后端)中的 MVC 与 前端中的 MVVM 之间的区别(了解内容)

    +
  • MVC 主要是后端的分层开发思想;把 一个完整的后端项目,分成了三个部分:
      +
    • Model:(数据层)主要负责 数据库的操作;
    • +
    • View:(视图层)所有前端页面,统称为 View 层
    • +
    • Controller:(业务逻辑层)主要处理对应的业务逻辑;(对于后台来说,这是开发的重点)
    • +
    +
  • +
  • MVVM 是前端页面的分层开发思想,主要关注于 视图层 分离,也就是说:MVVM 把前端的视图层,分为了 三部分 Model, View, ViewModel
      +
    • Model 是 页面中,需要用到的数据
    • +
    • View 是页面中的 HTML 结构;
    • +
    • ViewModel 是 一个 中间的调度者,提供了双向数据绑定的概念;
    • +
    +
  • +
  • 为什么有了 MVC 还要有 MVVM
      +
    • 因为 MVC 是后端的开发思想,并没有明确定义前端的页面该如何开发;
    • +
    • MVVM 是前端的页面的开发思想,把每个页面,分成了三个部分,同时 VM 作为 MVVM 的核心,提供了双向数据绑定的概念,前端程序员,不需要手动渲染页面了,而且,页面数据发送变化,也不需要程序员手动把 数据的变化同步到 Model 中;这所有的操作,都是 VM 自动完成的!
    • +
    • 有了 MVVM 的思想以后,前端只关心 页面交互逻辑,不关心页面如何渲染;
    • +
    +
  • +
+

MVVMMVC和MVVM

+

Vue.js 基本代码 和 MVVM 之间的对应关系

    +
  1. 注意:Vue 中,不推荐程序员手动操作 DOM 元素;所以,在 Vue 项目中,没有极其变态的需求,一般不要引入 Jquery;
  2. +
  3. Vue 代码解析执行的步骤:
      +
    1. 当 VM 实例对象,被 创建完成之后 把模板和数据进行绑定 存储到内存中;
    2. +
    3. 当 VM 调用 mount()方法的时候 ,看到 mount(元素)把内存中已经渲染好的 html 结构插入到元素中去
    4. +
    +
  4. +
  5. 注意:每当 vm 实例对象,监听到 data 中数据发生了变化,就会立即 重新解析 重新指向 model 内,所有的代码;
  6. +
+

什么是 Vue 中的指令

定义: Vue 中,通过一些特殊的语法,扩展了 HTML 的能力;

+
    +
  • 将来 创建 Vue 实例的时候,Vue 会把 这些指令 都进行解析,从而,根据不同的指令,执行不同的操作、渲染不同的结果;
  • +
+

8.1 Vue 指令之 插值表达式 {\{ }\}

    +
  1. 基本使用演示
    在指定的位置动态插入内容,例如:

    +
    1
    <p>{{msg}}</p>
    +
  2. +
  3. 在插值表达式中 使用简单的语句

    +
  4. +
  5. 注意:插值表达式只能用在元素的内容区域;不能用在元素的属性节点中;

    +
  6. +
+

8.2 Vue 指令之 v-cloak

    +
  1. 解决的问题
      +
    • 插值表达式有闪烁的问题(v-cloak 指令来解决闪烁问题)
    • +
    +
  2. +
  3. 应用场景
      +
    • 当 网络比较卡的时候,我们可以为 最外层的 元素,添加 v-cloak ,防止用户看到 插值表达式
    • +
    +
  4. +
+

8.3 Vue 指令之 v-text

    +
  1. 基本使用
    在 元素的属性节点上,添加v-text指令,例如:

    +
    1
    <p v-text="msg"></p>
    +
  2. +
  3. v-text中 使用简单的语句

    +
  4. +
  5. v-text{{}} 的区别

    +
      +
    • 是否覆盖内容
    • +
    • 指令闪烁问题
    • +
    +
  6. +
  7. 应用场景

    +
      +
    • 向指定元素的内容区域中,渲染指定的文本;
    • +
    +
  8. +
+

8.4 Vue 指令之 v-html

    +
  1. 基本使用
    在 元素的属性节点上,添加v-html指令,例如:

    +
    1
    <div v-html="msg"></div>
    +
  2. +
  3. 应用场景
    当 服务器返回的数据中,包含的 HTML 的标签,此时,这些标签只能使用 v-html 来渲染;

    +
  4. +
+

8.5 Vue 指令之 v-bind: 属性绑定

    +
  1. 基本使用

    +
      +
    • v-bind: 是为 html 属性节点动态绑定数据的,例如:

      +
      1
      <button v-bind:title="titleStr">按钮</button>
    • +
    +
  2. +
  3. 应用场景

    +
      +
    • 如果元素的属性值,需要动态地进行绑定,则需要使用v-bind: 指令
    • +
    +
  4. +
  5. 简写形式

    +
      +
    • v-bind: 指令可以简写成 :,例如,可以简写成如下格式:

      +
      1
      <button :title="titleStr">按钮</button>
    • +
    +
  6. +
+

8.6 Vue 指令之 v-on: 事件绑定

    +
  1. 基本使用:
    v-on: 的作用,是为 HTML 元素,绑定 事件处理函数,例如:

    +
    1
    <input type="button" value="按钮" v-on:click="事件处理函数名" />
    +
  2. +
  3. 绑定事件处理函数并传参:

    +
    1
    <input type="button" value="按钮" v-on:click="show(123)" />
    +
  4. +
  5. 简写形式:
    v-on: 指令可以简写成 @,例如,可以简写成如下格式:

    +
    1
    <input type="button" value="按钮" @click="事件处理函数名" />
  6. +
+

8.7 【案例】跑马灯效果

8.8 Vue 指令之 v-model 实现 双向数据绑定

    +
  1. 基本使用:
  2. +
+
    +
  • 可以把页面上数据的变化,自动同步更新到 VM 实例的 data 中。例如:

    +
    1
    <input type="text" v-model="msg" />
  • +
+
    +
  1. v-bind:的区别:
      +
    • v-bind: 只能实现单向的数据同步 data ---> 页面
    • +
    • v-model 可以实现双向的数据同步 data <--> 页面
    • +
    +
  2. +
  3. 注意:
      +
    • v-model 只能 和 表单元素 配合使用,例如 input、select、textarea 等;
    • +
    • v-model 是 Vue 中 唯一支持 双向数据绑定的指令;
    • +
    +
  4. +
  5. 应用场景:
      +
    • 【案例】自动计算文本框中,字符串的长度
    • +
    • 【案例】简易加法计算器
    • +
    +
  6. +
+

8.9 在 Vue 中使用 class 样式

    +
  1. 类名数组:

    +
      +
    • 通过 v-bind: 为元素的 class 绑定具体的类名:
    • +
    +
    1
    <p :class="['thin', 'red', 'big']">彬哥最帅</p>
    +
  2. +
  3. 类名数组中使用三元表达式,按需为元素添加某些类名

    +
    1
    <p :class="['thin', flag ? 'red' : '']">彬哥最帅a a a</p>
    +
  4. +
  5. 应用场景

    +
      +
    • 【案例】网页开关灯
    • +
    +
  6. +
+

Vue 常用特性

表单基本操作

    +
  • 获取单选框中的值

    +
      +
    • 通过 v-model
    • +
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!-- 
    1、 两个单选框需要同时通过v-model 双向绑定 一个值
    2、 每一个单选框必须要有value属性 且value 值不能一样
    3、 当某一个单选框选中的时候 v-model 会将当前的 value值 改变 data 中的 数据

    gender 的值就是选中的值,我们只需要实时监控他的值就可以了
    -->
    <input type="radio" id="male" value="1" v-model="gender" />
    <label for="male"></label>

    <input type="radio" id="female" value="2" v-model="gender" />
    <label for="female"></label>

    <script>
    new Vue({
    data: {
    // 默认会让当前的 value 值为 2 的单选框选中
    gender: 2,
    },
    });
    </script>
    +
  • +
  • 获取复选框中的值

    +
      +
    • 通过 v-model
    • +
    • 和获取单选框中的值一样
    • +
    • 复选框 checkbox 这种的组合时 data 中的 hobby 我们要定义成数组 否则无法实现多选
    • +
    +
    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
    <!-- 
    1、 复选框需要同时通过v-model 双向绑定 一个值
    2、 每一个复选框必须要有value属性 且value 值不能一样
    3、 当某一个单选框选中的时候 v-model 会将当前的 value值 改变 data 中的 数据

    hobby 的值就是选中的值,我们只需要实时监控他的值就可以了
    -->

    <div>
    <span>爱好:</span>
    <input type="checkbox" id="ball" value="1" v-model="hobby" />
    <label for="ball">篮球</label>
    <input type="checkbox" id="sing" value="2" v-model="hobby" />
    <label for="sing">唱歌</label>
    <input type="checkbox" id="code" value="3" v-model="hobby" />
    <label for="code">写代码</label>
    </div>
    <script>
    new Vue({
    data: {
    // 默认会让当前的 value 值为 2 和 3 的复选框选中
    hobby: ["2", "3"],
    },
    });
    </script>
    +
  • +
  • 获取下拉框和文本框中的值

    +
      +
    • 通过 v-model
    • +
    +
    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
    <div>
    <span>职业:</span>
    <!--
    1、 需要给select 通过v-model 双向绑定 一个值
    2、 每一个option 必须要有value属性 且value 值不能一样
    3、 当某一个option选中的时候 v-model 会将当前的 value值 改变 data 中的 数据
    occupation 的值就是选中的值,我们只需要实时监控他的值就可以了
    -->
    <!-- multiple 多选 -->
    <select v-model="occupation" multiple>
    <option value="0">请选择职业...</option>
    <option value="1">教师</option>
    <option value="2">软件工程师</option>
    <option value="3">律师</option>
    </select>
    <!-- textarea 是 一个双标签 不需要绑定value 属性的 -->
    <textarea v-model="desc"></textarea>
    </div>
    <script>
    new Vue({
    data: {
    // 默认会让当前的 value 值为 2 和 3 的下拉框选中
    occupation: ["2", "3"],
    desc: "nihao",
    },
    });
    </script>
  • +
+

表单修饰符

    +
  • .number 转换为数值

    +
      +
    • 注意点:
    • +
    • 当开始输入非数字的字符串时,因为 Vue 无法将字符串转换成数值
    • +
    • 所以属性值将实时更新成相同的字符串。即使后面输入数字,也将被视作字符串。
    • +
    +
  • +
  • .trim 自动过滤用户输入的首尾空白字符

    +
      +
    • 只能去掉首尾的 不能去除中间的空格
    • +
    +
  • +
  • .lazy 将 input 事件切换成 change 事件

    +
      +
    • .lazy 修饰符延迟了同步更新属性值的时机。即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上
    • +
    +
  • +
  • 在失去焦点 或者 按下回车键时才更新

    +
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- 自动将用户的输入值转为数值类型 -->
    <input v-model.number="age" type="number" />

    <!--自动过滤用户输入的首尾空白字符 -->
    <input v-model.trim="msg" />

    <!-- 在“change”时而非“input”时更新 -->
    <input v-model.lazy="msg" />
  • +
+

自定义指令

    +
  • 内置指令不能满足我们特殊的需求
  • +
  • Vue 允许我们自定义指令
  • +
+

Vue.directive 注册全局指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 
使用自定义的指令,只需在对用的元素中,加上'v-'的前缀形成类似于内部指令'v-if','v-text'的形式。
-->
<input type="text" v-focus />
<script>
// 注意点:
// 1、 在自定义指令中 如果以驼峰命名的方式定义 如 Vue.directive('focusA',function(){})
// 2、 在HTML中使用的时候 只能通过 v-focus-a 来使用

// 注册一个全局自定义指令 v-focus
Vue.directive("focus", {
// 当绑定元素插入到 DOM 中。 其中 el为dom元素
inserted: function (el) {
// 聚焦元素
el.focus();
},
});
new Vue({
el: "#app",
});
</script>
+ +

Vue.directive 注册全局指令 带参数

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
<input type="text" v-color="msg" />
<script type="text/javascript">
/*
自定义指令-带参数
bind - 只调用一次,在指令第一次绑定到元素上时候调用

*/
Vue.directive("color", {
// bind声明周期, 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
// el 为当前自定义指令的DOM元素
// binding 为自定义的函数形参 通过自定义属性传递过来的值 存在 binding.value 里面
bind: function (el, binding) {
// 根据指令的参数设置背景色
// console.log(binding.value.color)
el.style.backgroundColor = binding.value.color;
},
});
var vm = new Vue({
el: "#app",
data: {
msg: {
color: "blue",
},
},
});
</script>
+ +

自定义指令局部指令

    +
  • 局部指令,需要定义在 directives 的选项 用法和全局用法一样
  • +
  • 局部指令只能在当前组件里面使用
  • +
  • 当全局指令和局部指令同名时以局部指令为准
  • +
+
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
<input type="text" v-color="msg" />
<input type="text" v-focus />
<script type="text/javascript">
/*
自定义指令-局部指令
*/
var vm = new Vue({
el: "#app",
data: {
msg: {
color: "red",
},
},
//局部指令,需要定义在 directives 的选项
directives: {
color: {
bind: function (el, binding) {
el.style.backgroundColor = binding.value.color;
},
},
focus: {
inserted: function (el) {
el.focus();
},
},
},
});
</script>
+ +

计算属性 computed

    +
  • 模板中放入太多的逻辑会让模板过重且难以维护 使用计算属性可以让模板更加的简洁
  • +
  • 计算属性是基于它们的响应式依赖进行缓存的
  • +
  • computed 比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化
  • +
+
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
<div id="computed-basics">
<p>Has published books:</p>
<span>{{ publishedBooksMessage }}</span>
</div>

<script>
Vue.createApp({
data() {
return {
author: {
name: "John Doe",
books: [
"Vue 2 - Advanced Guide",
"Vue 3 - Basic Guide",
"Vue 4 - The Mystery",
],
},
};
},
computed: {
// 计算属性的 getter
publishedBooksMessage() {
// `this` points to the vm instance
return this.author.books.length > 0 ? "Yes" : "No";
},
},
}).mount("#computed-basics");
</script>
+ +

侦听器 watch

    +
  • 使用 watch 来响应数据的变化
  • +
  • 一般用于异步或者开销较大的操作
  • +
  • watch 中的属性 一定是 data 中 已经存在的数据
  • +
  • 当需要监听一个对象的改变时,普通的 watch 方法无法监听到对象内部属性的改变,只有 data 中的数据才能够监听到变化,此时就需要 deep 属性对对象进行深度监听
  • +
+
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
49
50
51
52
53
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="lib/vue3.0.global.js"></script>
</head>

<body>
<div id="app">
<div>
<span>名:</span>
<span>
<input type="text" v-model="firstName" />
</span>
</div>
<div>
<span>姓:</span>
<span>
<input type="text" v-model="lastName" />
</span>
</div>
<div>{{fullName}}</div>
</div>

<script type="text/javascript">
let vm = Vue.createApp({
data() {
return {
firstName: "Jim",
lastName: "Green",
// fullName: 'Jim Green'
};
},
//watch 属性 定义 和 data 已经 methods 平级
watch: {
// 注意: 这里firstName 对应着data 中的 firstName
// 当 firstName 值 改变的时候 会自动触发 watch
firstName: function (val) {
this.fullName = val + " " + this.lastName;
// console.log(1);
},
// 注意: 这里 lastName 对应着data 中的 lastName
lastName: function (val) {
this.fullName = this.firstName + " " + val;
},
},
});
vm.mount("#app");
</script>
</body>
</html>
+ +

过滤器

    +
  • Vue.js 允许自定义过滤器,可被用于一些常见的文本格式化。
  • +
  • 过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。
  • +
  • 过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示
  • +
  • 支持级联操作
  • +
  • 过滤器不改变真正的data,而只是改变渲染的结果,并返回过滤后的版本
  • +
  • 全局注册时是 filter,没有 s 的。而局部过滤器是 filters,是有 s 的
  • +
+
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
<div id="app">
<input type="text" v-model="msg" />
<!-- upper 被定义为接收单个参数的过滤器函数,表达式 msg 的值将作为参数传入到函数中 -->
<div>{{msg | upper}}</div>
<!--
支持级联操作
upper 被定义为接收单个参数的过滤器函数,表达式msg 的值将作为参数传入到函数中。
然后继续调用同样被定义为接收单个参数的过滤器 lower ,将upper 的结果传递到lower中
-->
<div>{{msg | upper | lower}}</div>
<div :abc="msg | upper">测试数据</div>
</div>

<script type="text/javascript">
// lower 为全局过滤器
Vue.filter("lower", function (val) {
return val.charAt(0).toLowerCase() + val.slice(1);
});
var vm = new Vue({
el: "#app",
data: {
msg: "",
},
//filters 属性 定义 和 data 已经 methods 平级
// 定义filters 中的过滤器为局部过滤器
filters: {
// upper 自定义的过滤器名字
// upper 被定义为接收单个参数的过滤器函数,表达式 msg 的值将作为参数传入到函数中
upper: function (val) {
// 过滤器中一定要有返回值 这样外界使用过滤器的时候才能拿到结果
return val.charAt(0).toUpperCase() + val.slice(1);
},
},
});
</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
27
<div id="box">
<!--
filterA 被定义为接收三个参数的过滤器函数。
其中 message 的值作为第一个参数,
普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。
-->
{{ message | filterA('arg1', 'arg2') }}
</div>
<script>
// 在过滤器中 第一个参数 对应的是 管道符前面的数据 n 此时对应 message
// 第2个参数 a 对应 实参 arg1 字符串
// 第3个参数 b 对应 实参 arg2 字符串
Vue.filter("filterA", function (n, a, b) {
if (n < 10) {
return n + a;
} else {
return n + b;
}
});

new Vue({
el: "#box",
data: {
message: "哈哈哈",
},
});
</script>
+ +

生命周期

    +
  • 事物从出生到死亡的过程
  • +
  • Vue 实例从创建 到销毁的过程 ,这些过程中会伴随着一些函数的自调用。我们称这些函数为钩子函数
  • +
+

####常用的 钩子函数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
beforeCreate在实例初始化之后,数据观测和事件配置之前被调用 此时 data 和 methods 以及页面的 DOM 结构都没有初始化 什么都做不了
created在实例创建完成后被立即调用此时 data 和 methods 已经可以使用 但是页面还没有渲染出来
beforeMount在挂载开始之前被调用 此时页面上还看不到真实数据 只是一个模板页面而已
mountedel 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。 数据已经真实渲染到页面上 在这个钩子函数里面我们可以使用一些第三方的插件
beforeUpdate数据更新时调用,发生在虚拟 DOM 打补丁之前。 页面上数据还是旧的
updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。 页面上数据已经替换成最新的
beforeDestroy实例销毁之前调用
destroyed实例销毁后调用
+

数组变异方法

    +
  • 在 Vue 中,直接修改对象属性的值无法触发响应式。当你直接修改了对象属性的值,你会发现,只有数据改了,但是页面内容并没有改变
  • +
  • 变异数组方法即保持数组方法原有功能不变的前提下对其进行功能拓展
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
push()往数组最后面添加一个元素,成功返回当前数组的长度
pop()删除数组的最后一个元素,成功返回删除元素的值
shift()删除数组的第一个元素,成功返回删除元素的值
unshift()往数组最前面添加一个元素,成功返回当前数组的长度
splice()有三个参数,第一个是想要删除的元素的下标(必选),第二个是想要删除的个数(必选),第三个是删除 后想要在原位置替换的值
sort()sort() 使数组按照字符编码默认从小到大排序,成功返回排序后的数组
reverse()reverse() 将数组倒序,成功返回倒序后的数组
+

替换数组

    +
  • 不会改变原始数组,但总是返回一个新数组
  • +
+ + + + + + + + + + + + + + + +
filterfilter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
concatconcat() 方法用于连接两个或多个数组。该方法不会改变现有的数组
sliceslice() 方法可从已有的数组中返回选定的元素。该方法并不会修改数组,而是返回一个子数组
+

动态数组响应式数据

    +
  • Vue.set(a,b,c) 让 触发视图重新更新一遍,数据动态起来
  • +
  • a 是要更改的数据 、 b 是数据的第几项、 c 是更改后的数据
  • +
+

图书列表案例

    +
  • 静态列表效果
  • +
  • 基于数据实现模板效果
  • +
  • 处理每行的操作按钮
  • +
+

1、 提供的静态数据

    +
  • 数据存放在 vue 中 data 属性中
  • +
+
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
49
50
51
52
53
54
var vm = new Vue({
el: "#app",
data: {
books: [
{
id: 1,
name: "三国演义",
date: "",
},
{
id: 2,
name: "水浒传",
date: "",
},
{
id: 3,
name: "红楼梦",
date: "",
},
{
id: 4,
name: "西游记",
date: "",
},
],
},
});
var vm = new Vue({
el: "#app",
data: {
books: [
{
id: 1,
name: "三国演义",
date: "",
},
{
id: 2,
name: "水浒传",
date: "",
},
{
id: 3,
name: "红楼梦",
date: "",
},
{
id: 4,
name: "西游记",
date: "",
},
],
},
});
+ +

2、 把提供好的数据渲染到页面上

    +
  • 利用 v-for 循环 遍历 books 将每一项数据渲染到对应的数据中
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<tbody>
<tr :key="item.id" v-for="item in books">
<!-- 对应的id 渲染到页面上 -->
<td>{{item.id}}</td>
<!-- 对应的name 渲染到页面上 -->
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<td>
<!-- 阻止 a 标签的默认跳转 -->
<a href="" @click.prevent>修改</a>
<span>|</span>
<a href="" @click.prevent>删除</a>
</td>
</tr>
</tbody>
+ +

3、 添加图书

    +
  • 通过双向绑定获取到输入框中的输入内容
  • +
  • 给按钮添加点击事件
  • +
  • 把输入框中的数据存储到 data 中的 books 里面
  • +
+
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<div>
<h1>图书管理</h1>
<div class="book">
<div>
<label for="id"> 编号: </label>
<!-- 3.1、通过双向绑定获取到输入框中的输入的 id -->
<input type="text" id="id" v-model="id" />
<label for="name"> 名称: </label>
<!-- 3.2、通过双向绑定获取到输入框中的输入的 name -->
<input type="text" id="name" v-model="name" />
<!-- 3.3、给按钮添加点击事件 -->
<button @click="handle">提交</button>
</div>
</div>
</div>
<script type="text/javascript">
/*
图书管理-添加图书
*/
var vm = new Vue({
el: "#app",
data: {
id: "",
name: "",
books: [
{
id: 1,
name: "三国演义",
date: "",
},
{
id: 2,
name: "水浒传",
date: "",
},
{
id: 3,
name: "红楼梦",
date: "",
},
{
id: 4,
name: "西游记",
date: "",
},
],
},
methods: {
handle: function () {
// 3.4 定义一个新的对象book 存储 获取到输入框中 书 的id和名字
var book = {};
book.id = this.id;
book.name = this.name;
book.date = "";
// 3.5 把book 通过数组的变异方法 push 放到 books 里面
this.books.push(book);
//3.6 清空输入框
this.id = "";
this.name = "";
},
},
});
</script>
+ +

4 修改图书-上

    +
  • 点击修改按钮的时候 获取到要修改的书籍名单
      +
    • 4.1 给修改按钮添加点击事件, 需要把当前的图书的 id 传递过去 这样才知道需要修改的是哪一本书籍
    • +
    +
  • +
  • 把需要修改的书籍名单填充到表单里面
      +
    • 4.2 根据传递过来的 id 查出 books 中 对应书籍的详细信息
    • +
    • 4.3 把获取到的信息填充到表单
    • +
    +
  • +
+
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<div id="app">
<div class="grid">
<div>
<h1>图书管理</h1>
<div class="book">
<div>
<label for="id"> 编号: </label>
<input type="text" id="id" v-model="id" :disabled="flag" />
<label for="name"> 名称: </label>
<input type="text" id="name" v-model="name" />
<button @click="handle">提交</button>
</div>
</div>
</div>
<table>
<thead>
<tr>
<th>编号</th>
<th>名称</th>
<th>时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr :key="item.id" v-for="item in books">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<td>
<!---
4.1 给修改按钮添加点击事件, 需要把当前的图书的id 传递过去
这样才知道需要修改的是哪一本书籍
--->
<a href="" @click.prevent="toEdit(item.id)">修改</a>
<span>|</span>
<a href="" @click.prevent>删除</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<script type="text/javascript">
/*
图书管理-添加图书
*/
var vm = new Vue({
el: "#app",
data: {
flag: false,
id: "",
name: "",
books: [
{
id: 1,
name: "三国演义",
date: "",
},
{
id: 2,
name: "水浒传",
date: "",
},
{
id: 3,
name: "红楼梦",
date: "",
},
{
id: 4,
name: "西游记",
date: "",
},
],
},
methods: {
handle: function () {
// 3.4 定义一个新的对象book 存储 获取到输入框中 书 的id和名字
var book = {};
book.id = this.id;
book.name = this.name;
book.date = "";
// 3.5 把book 通过数组的变异方法 push 放到 books 里面
this.books.push(book);
//3.6 清空输入框
this.id = "";
this.name = "";
},
toEdit: function (id) {
console.log(id);
//4.2 根据传递过来的id 查出books 中 对应书籍的详细信息
var book = this.books.filter(function (item) {
return item.id == id;
});
console.log(book);
//4.3 把获取到的信息填充到表单
// this.id 和 this.name 通过双向绑定 绑定到了表单中 一旦数据改变视图自动更新
this.id = book[0].id;
this.name = book[0].name;
},
},
});
</script>
+ +

5 修改图书-下

    +
  • 5.1 定义一个标识符, 主要是控制 编辑状态下当前编辑书籍的 id 不能被修改 即 处于编辑状态下 当前控制书籍编号的输入框禁用
  • +
  • 5.2 通过属性绑定给书籍编号的 绑定 disabled 的属性 flag 为 true 即为禁用
  • +
  • 5.3 flag 默认值为 false 处于编辑状态 要把 flag 改为 true 即当前表单为禁用
  • +
  • 5.4 复用添加方法 用户点击提交的时候依然执行 handle 中的逻辑如果 flag 为 true 即 表单处于不可输入状态 此时执行的用户编辑数据数据
  • +
+
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<div id="app">
<div class="grid">
<div>
<h1>图书管理</h1>
<div class="book">
<div>
<label for="id"> 编号: </label>
<!-- 5.2 通过属性绑定 绑定 disabled 的属性 flag 为 true 即为禁用 -->
<input type="text" id="id" v-model="id" :disabled="flag" />
<label for="name"> 名称: </label>
<input type="text" id="name" v-model="name" />
<button @click="handle">提交</button>
</div>
</div>
</div>
<table>
<thead>
<tr>
<th>编号</th>
<th>名称</th>
<th>时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr :key="item.id" v-for="item in books">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<td>
<a href="" @click.prevent="toEdit(item.id)">修改</a>
<span>|</span>
<a href="" @click.prevent>删除</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<script type="text/javascript">
/*图书管理-添加图书*/
var vm = new Vue({
el: "#app",
data: {
// 5.1 定义一个标识符, 主要是控制 编辑状态下当前编辑书籍的id 不能被修改
// 即 处于编辑状态下 当前控制书籍编号的输入框禁用
flag: false,
id: "",
name: "",
},
methods: {
handle: function () {
/*
5.4 复用添加方法 用户点击提交的时候依然执行 handle 中的逻辑
如果 flag为true 即 表单处于不可输入状态 此时执行的用户编辑数据数据
*/

if (this.flag) {
// 编辑图书
// 5.5 根据当前的ID去更新数组中对应的数据
this.books.some((item) => {
if (item.id == this.id) {
// 箭头函数中 this 指向父级作用域的this
item.name = this.name;
// 完成更新操作之后,需要终止循环
return true;
}
});
// 5.6 编辑完数据后表单要处以可以输入的状态
this.flag = false;
// 5.7 如果 flag为false 表单处于输入状态 此时执行的用户添加数据
} else {
var book = {};
book.id = this.id;
book.name = this.name;
book.date = "";
this.books.push(book);
// 清空表单
this.id = "";
this.name = "";
}
// 清空表单
this.id = "";
this.name = "";
},
toEdit: function (id) {
/*
5.3 flag 默认值为false 处于编辑状态 要把 flag 改为true 即当前表单为禁 用
*/

this.flag = true;
console.log(id);
var book = this.books.filter(function (item) {
return item.id == id;
});
console.log(book);
this.id = book[0].id;
this.name = book[0].name;
},
},
});
</script>
+ +

6 删除图书

    +
  • 6.1 给删除按钮添加事件 把当前需要删除的书籍 id 传递过来
  • +
  • 6.2 根据 id 从数组中查找元素的索引
  • +
  • 6.3 根据索引删除数组元素
  • +
+
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
<tbody>
<tr :key="item.id" v-for="item in books">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<td>
<a href="" @click.prevent="toEdit(item.id)">修改</a>
<span>|</span>
<!-- 6.1 给删除按钮添加事件 把当前需要删除的书籍id 传递过来 -->
<a href="" @click.prevent="deleteBook(item.id)">删除</a>
</td>
</tr>
</tbody>
<script type="text/javascript">
/*
图书管理-添加图书
*/
var vm = new Vue({
methods: {
deleteBook: function(id){
// 删除图书
#// 6.2 根据id从数组中查找元素的索引
// var index = this.books.findIndex(function(item){
// return item.id == id;
// });
#// 6.3 根据索引删除数组元素
// this.books.splice(index, 1);
// -------------------------
#// 方法二:通过filter方法进行删除

# 6.4 根据filter 方法 过滤出来id 不是要删除书籍的id
# 因为 filter 是替换数组不会修改原始数据 所以需要 把 不是要删除书籍的id 赋值给 books
this.books = this.books.filter(function(item){
return item.id != id;
});
}
}
});
</script>
+ +

常用特性应用场景

1 过滤器

    +
  • Vue.filter 定义一个全局过滤器
  • +
+
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<tr :key="item.id" v-for="item in books">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<!-- 1.3 调用过滤器 -->
<td>{{item.date | format('yyyy-MM-dd hh:mm:ss')}}</td>
<td>
<a href="" @click.prevent="toEdit(item.id)">修改</a>
<span>|</span>
<a href="" @click.prevent="deleteBook(item.id)">删除</a>
</td>
</tr>

<script>
#1.1 Vue.filter 定义一个全局过滤器
Vue.filter('format', function(value, arg) {
function dateFormat(date, format) {
if (typeof date === "string") {
var mts = date.match(/(\/Date\((\d+)\)\/)/);
if (mts && mts.length >= 3) {
date = parseInt(mts[2]);
}
}
date = new Date(date);
if (!date || date.toUTCString() == "Invalid Date") {
return "";
}
var map = {
"M": date.getMonth() + 1, //月份
"d": date.getDate(), //日
"h": date.getHours(), //小时
"m": date.getMinutes(), //分
"s": date.getSeconds(), //秒
"q": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
var v = map[t];
if (v !== undefined) {
if (all.length > 1) {
v = '0' + v;
v = v.substr(v.length - 2);
}
return v;
} else if (t === 'y') {
return (date.getFullYear() + '').substr(4 - all.length);
}
return all;
});
return format;
}
return dateFormat(value, arg);
})
#1.2 提供的数据 包含一个时间戳 为毫秒数
[{
id: 1,
name: '三国演义',
date: 2525609975000
},{
id: 2,
name: '水浒传',
date: 2525609975000
},{
id: 3,
name: '红楼梦',
date: 2525609975000
},{
id: 4,
name: '西游记',
date: 2525609975000
}];
</script>
+ +

2 自定义指令

    +
  • 让表单自动获取焦点
  • +
  • 通过 Vue.directive 自定义指定
  • +
+
1
2
3
4
5
6
7
8
9
10
11
<!-- 2.2  通过v-自定义属性名 调用自定义指令 -->
<input type="text" id="id" v-model="id" :disabled="flag" v-focus />

<script>
# 2.1 通过Vue.directive 自定义指定
Vue.directive('focus', {
inserted: function (el) {
el.focus();
}
});
</script>
+ +

3 计算属性

    +
  • 通过计算属性计算图书的总数
      +
    • 图书的总数就是计算数组的长度
    • +
    +
  • +
+
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
<div class="total">
<span>图书总数:</span>
<!-- 3.2 在页面上 展示出来 -->
<span>{{total}}</span>
</div>

<script type="text/javascript">
/*
计算属性与方法的区别:计算属性是基于依赖进行缓存的,而方法不缓存
*/
var vm = new Vue({
data: {
flag: false,
submitFlag: false,
id: "",
name: "",
books: [],
},
computed: {
total: function () {
// 3.1 计算图书的总数
return this.books.length;
},
},
});
</script>
+ +

生命周期

    +
  • 2.0
  • +
+

lifecycle

+
    +
  • 3.0
  • +
+

vue3.0说明图

+

组件

组件

    +
  • 组件 (Component) 是 Vue.js 最强大的功能之一
  • +
  • 组件可以扩展 HTML 元素,封装可重用的代码
  • +
+

组件注册

全局注册

    +
  • vm.component(‘组件名称’, { }) 第 1 个参数是标签名称,第 2 个参数是一个选项对象
  • +
  • 全局组件注册后,任何vue 实例都可以用
  • +
+
组件基础用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="example">
<!-- 2、 组件使用 组件名称 是以HTML标签的形式使用 -->
<my-component></my-component>
</div>
<script>
// 注册组件
// 1、 my-component 就是组件中自定义的标签名
Vue.component("my-component", {
template: "<div>A custom component!</div>",
});

// 创建根实例
new Vue({
el: "#example",
});
</script>
+ +
组件注意事项
    +
  • 组件参数的 data 值必须是函数同时这个函数要求返回一个对象
  • +
  • 组件模板必须是单个根元素
  • +
  • 组件模板的内容可以是模板字符串
  • +
+
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
49
50
51
52
53
54
<div id="app">
<!--
4、 组件可以重复使用多次
因为data中返回的是一个对象所以每个组件中的数据是私有的
即每个实例可以维护一份被返回对象的独立的拷贝
-->
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
<!-- 8、必须使用短横线的方式使用组件 -->
<hello-world></hello-world>
</div>

<script type="text/javascript">
//5 如果使用驼峰式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰的方式使用组件,
// 7、但是在普通的标签模板中,必须使用短横线的方式使用组件
Vue.component("HelloWorld", {
data: function () {
return {
msg: "HelloWorld",
};
},
template: "<div>{{msg}}</div>",
});

Vue.component("button-counter", {
// 1、组件参数的data值必须是函数
// 同时这个函数要求返回一个对象
data: function () {
return {
count: 0,
};
},
// 2、组件模板必须是单个根元素
// 3、组件模板的内容可以是模板字符串
template: `
<div>
<button @click="handle">点击了{{count}}次</button>
<button>测试123</button>
# 6 在字符串模板中可以使用驼峰的方式使用组件
<HelloWorld></HelloWorld>
</div>
`,
methods: {
handle: function () {
this.count += 2;
},
},
});
var vm = new Vue({
el: "#app",
data: {},
});
</script>
+ +

局部注册

    +
  • 只能在当前注册它的 vue 实例中使用
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="app">
<my-component></my-component>
</div>

<script>
// 定义组件的模板
var Child = {
template: "<div>A custom component!</div>",
};
new Vue({
//局部注册组件
components: {
// <my-component> 将只在父模板可用 一定要在实例上注册了才能在html文件中使用
"my-component": Child,
},
});
</script>
+ +

Vue 调试工具

Vue 组件之间传值

父组件向子组件传值

    +
  • 父组件发送的形式是以属性的形式绑定值到子组件身上。
  • +
  • 然后子组件用属性 props 接收
  • +
  • 在 props 中使用驼峰形式,模板中需要使用短横线的形式字符串形式的模板中没有这个限制
  • +
+
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
<div id="app">
<div>{{pmsg}}</div>
<!--1、menu-item 在 APP中嵌套着 故 menu-item 为 子组件 -->
<!-- 给子组件传入一个静态的值 -->
<menu-item title="来自父组件的值"></menu-item>
<!-- 2、 需要动态的数据的时候 需要属性绑定的形式设置 此时 ptitle 来自父组件data 中的数据 .
传的值可以是数字、对象、数组等等
-->
<menu-item :title="ptitle" content="hello"></menu-item>
</div>

<script type="text/javascript">
Vue.component("menu-item", {
// 3、 子组件用属性props接收父组件传递过来的数据
props: ["title", "content"],
data: function () {
return {
msg: "子组件本身的数据",
};
},
template: '<div>{{msg + "----" + title + "-----" + content}}</div>',
});
var vm = new Vue({
el: "#app",
data: {
pmsg: "父组件中内容",
ptitle: "动态绑定属性",
},
});
</script>
+ +

子组件向父组件传值

    +
  • 子组件用$emit()触发事件
  • +
  • $emit() 第一个参数为 自定义的事件名称 第二个参数为需要传递的数据
  • +
  • 父组件用 v-on 监听子组件的事件
  • +
+
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
<div id="app">
<div :style='{fontSize: fontSize + "px"}'>{{pmsg}}</div>
<!-- 2 父组件用v-on 监听子组件的事件
这里 enlarge-text 是从 $emit 中的第一个参数对应 handle 为对应的事件处理函数
-->
<menu-item :parr="parr" @enlarge-text="handle($event)"></menu-item>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
/*
子组件向父组件传值-携带参数
*/

Vue.component("menu-item", {
props: ["parr"],
template: `
<div>
<ul>
<li :key='index' v-for='(item,index) in parr'>{{item}}</li>
</ul>
### 1、子组件用$emit()触发事件
### 第一个参数为 自定义的事件名称 第二个参数为需要传递的数据
<button @click='$emit("enlarge-text", 5)'>扩大父组件中字体大小</button>
<button @click='$emit("enlarge-text", 10)'>扩大父组件中字体大小</button>
</div>
`,
});
var vm = new Vue({
el: "#app",
data: {
pmsg: "父组件中内容",
parr: ["apple", "orange", "banana"],
fontSize: 10,
},
methods: {
handle: function (val) {
// 扩大字体大小
this.fontSize += val;
},
},
});
</script>
+ +

兄弟之间的传递

    +
  • 兄弟之间传递数据需要借助于事件中心,通过事件中心传递数据
      +
    • 提供事件中心 var hub = new Vue()
    • +
    +
  • +
  • 传递数据方,通过一个事件触发 hub.$emit(方法名,传递的数据)
  • +
  • 接收数据方,通过 mounted(){} 钩子中 触发 hub.$on()方法名
  • +
  • 销毁事件 通过 hub.$off()方法名销毁之后无法进行传递数据
  • +
+
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<div id="app">
<div>父组件</div>
<div>
<button @click="handle">销毁事件</button>
</div>
<test-tom></test-tom>
<test-jerry></test-jerry>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
/*
兄弟组件之间数据传递
*/
//1、 提供事件中心
var hub = new Vue();

Vue.component("test-tom", {
data: function () {
return {
num: 0,
};
},
template: `
<div>
<div>TOM:{{num}}</div>
<div>
<button @click='handle'>点击</button>
</div>
</div>
`,
methods: {
handle: function () {
//2、传递数据方,通过一个事件触发hub.$emit(方法名,传递的数据) 触发兄弟组件的事件
hub.$emit("jerry-event", 2);
},
},
mounted: function () {
// 3、接收数据方,通过mounted(){} 钩子中 触发hub.$on(方法名
hub.$on("tom-event", (val) => {
this.num += val;
});
},
});
Vue.component("test-jerry", {
data: function () {
return {
num: 0,
};
},
template: `
<div>
<div>JERRY:{{num}}</div>
<div>
<button @click='handle'>点击</button>
</div>
</div>
`,
methods: {
handle: function () {
//2、传递数据方,通过一个事件触发hub.$emit(方法名,传递的数据) 触发兄弟组件的事件
hub.$emit("tom-event", 1);
},
},
mounted: function () {
// 3、接收数据方,通过mounted(){} 钩子中 触发hub.$on()方法名
hub.$on("jerry-event", (val) => {
this.num += val;
});
},
});
var vm = new Vue({
el: "#app",
data: {},
methods: {
handle: function () {
//4、销毁事件 通过hub.$off()方法名销毁之后无法进行传递数据
hub.$off("tom-event");
hub.$off("jerry-event");
},
},
});
</script>
+ +

vue-cli

安装与启动

1
2
3
4
5
6
7
8
9
10
11
12
# 1
npm install -g @vue/cli
# OR
yarn global add @vue/cli

# 2
npm install -g @vue/cli @vue/cli-service-global
# or
yarn global add @vue/cli @vue/cli-service-global

# 3 创建项目
vue create 项目名称
+ +

使用 sass 全局方法 @mixnin

    +
  • 先运行 vue add style-resources-loader
  • +
+

配置 vue.config.js

+
1
2
3
4
5
6
7
8
9
10
const path = require("path");
module.exports = {
pluginOptions: {
"style-resources-loader": {
preProcessor: "scss",
patterns: [path.resolve(__dirname, "./src/mixnin.scss")]
}
}
};

+ +

样式穿透

https://github.com/vuejs/rfcs/blob/master/active-rfcs/0023-scoped-styles-changes.md

+

vue-router

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#下载 vue-router包
npm install vue-router@next

# 在src文件夹里面新建routes文件夹
├─.browserslistrc
├─.eslintrc.js
├─.gitignore
├─babel.config.js
├─package.json
├─README.md
├─yarn.lock
├─src #在这里新建
| ├─App.vue
| ├─main.js
| ├─routes # 新建我!!!
| | └index.js #在这里面写vue-router的配置文件
| ├─components
| | └HelloWorld.vue
| ├─assets
| | └logo.png
├─public
| ├─favicon.ico
| └index.html

+ +

配置文件书写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
| ├─routes # 新建我!!!
| | └index.js 我是配置文件哦!!
*/

import { createRouter, createWebHashHistory } from "vue-router";

// 导入组件
import HelloWorld from "../components/HelloWorld";
const routes = [
{
name: "home",
path: "/home",
component: HelloWorld,
},
];
// 3.创建路由
const router = createRouter({
history: createWebHashHistory(),
// 定义好的路由
routes,
});
// 导出 router
export default router;
+ +

main.js 文件的书写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
├─src #在这里新建
| ├─App.vue
| ├─main.js
*/

import { createApp } from "vue";
import App from "./App.vue";
// 引入路由配置
import routes from "./routes";
createApp(App)
//使用路由
.use(routes)
.mount("#app");
+ +

路由重定向 router-redirect

1
2
3
4
5
6
7
8
let routes = [
// 重定向
{
path: "原路由",
redirect: "要跳转到哪个路由",
},
{ 其他路由规则 },
];
+ +

嵌套路由 router-nest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let routes = [
// 重定向
{
path: "父组件路由规则",
component: "组件名",
children: [
// 子路由规则
{
path: "父组件路由规则",
component: "组件名",
// children: [{}]
},
],
},
];
+ +

路由传参 router-dynamic

直接接收

在路由规则中

+
1
2
3
4
5
6
7
let routes = [
// 重定向
{
path: "父组件路由规则/:占位符名称",
component: "组件名",
},
];
+ +

在对应组件中

+
1
2
3
4
5
6
7
8
9
10
11
<template>
<div>
<p>{{ $router.params.占位符名称 }}</p>
</div>
</template>

<script>
export default {};
</script>

<style></style>
+ +

通过 props 属性

在路由规则中

+
1
2
3
4
5
6
7
8
let routes = [
// 重定向
{
path: "父组件路由规则/:占位符名称",
component: "组件名",
props: true,
},
];
+ +

在对应组件中

+
1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<div>
<p>{{ 占位符名称 }}</p>
</div>
</template>

<script>
export default {
props: ["占位符名称"],
};
</script>

<style></style>
+ +

通过回调函数

在路由规则中

+
1
2
3
4
5
6
7
8
9
 let routes = [
// 重定向
{
path: "父组件路由规则/:占位符名称",
component: "组件名",
// 通过回调函数的方式传值给组件,对应组件通过props获取传入的参数
props: router=>({属性名: router.params.占位符名称,属性名:属性值,...})
}
]
+ +

在对应组件中

+
1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<div>
<p>{{ 属性名 }}</p>
</div>
</template>

<script>
export default {
props: ["属性名","属性名",...]
};
</script>

<style></style>
+ +

编程式导航 router-program

1
2
//  如果在methods中 在created 在watch这样的方法中 使用this.$router.push() 跳转到另外的路由
// 如果想前进一步(go(1)、forwar()) 后退一步(go(-1)、back())
+ +

命名路由

在路由规则中

+
1
2
3
4
5
6
7
 let routes = [
{
name: "路由的名字"
path: "父组件路由规则/:占位符名称",
component: "组件名",
}
]
+ +

在对应组件中

+
1
2
3
4
5
6
7
8
9
10
11
12
<template>
<!-- 如果传入了参数记得去router/index.js里面开启props -->
<router-link :to="{ name: '路由的名字', params: { 属性名: 属性值 } }"
>超链接</router-link
>
</template>

<script>
export default {};
</script>

<style></style>
+ +

Vuex 统一状态管理

VueX 概述

为什么要学习 VueX

父向子传值:父元素 v-bind 属性绑定数据,子元素使用 props 接受父元素传递的数据
子向父传值:父元素 v-on 事件绑定,子元素使用$emit 触发,并通过回调函数把值传递给父元素
兄弟组件之间共享数据:EventBus(mitt)
emitter.on() 接收数据的那个组件
emitter.emit() 发送数据的那个组件

+

VueX 简介

image-20201027154214547.

+

Vuex 是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享

+

使用 Vuex 管理数据的好处:
A.能够在 vuex 中集中管理共享的数据,便于开发和后期进行维护
B.能够高效的实现组件之间的数据共享,提高开发效率
C.存储在 vuex 中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新

+

注意,不是任何数据都适合放在vuex中的,一般情况下,只有组件之间共享的数据,才有必要存储到vuex 中;对于组件中的私有数据,依旧存储在组件自身的data 中即可

+

VueX 的基本使用

1.安装

+
1
2
# If using Vue 3.0 + Vuex 4.0:
npm install vuex@next --save
+ +

2.配置(store/index.js)

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 引入VueX
import { createStore } from "vuex";

export default createStore({
// state提供唯一的公共数据源,所有共享的数据都要统一放到Store的state中进行存储
state() {
return {};
},
// mutations用于修改Store中的数据 相当于methods
mutations: {},
// actions用于处理异步任务
actions: {},
// getters 用于对Store中的数据进行加工处理形成新的数据。 相当于computed计算属性
getters: {},
});
+ +

3.挂载(src/main.js)

+
1
2
3
4
import { createApp } from "vue";
import App from "./App.vue";
import store from "./store";
createApp(App).use(store).mount("#app");
+ +

VueX 的核心概念

State(类似于 Vue 中的 data 选项)

State 提供唯一的公共数据源,所有共享的数据都要统一放到 Store 的 State 中进行存储

+

定义语法:

+
1
2
3
4
5
6
7
const store = createStore({
state() {
return {
属性名: 属性值,
};
},
});
+ +

访问:

+
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
// 组件的script中访问(方法1)
this.$store.state.全局数据属性名

// 组件的script中访问(方法2)
// 1.首先在store中定义数据(store/index.js)
import { createStore } from "vuex";

export default createStore({
state() {
return {
count: 0,
msg: "Welcome to Your Vue2"
};
},
mutations: {},
actions: {},
modules: {}
});

// 2.在需要用到这个数据的组件中
<script>
import { mapState } from "vuex";
export default {
name: "HelloWorld",
computed: {
// count() {
// return this.$store.state.count;
// },
// msg() {
// return this.$store.state.msga;
// },
...mapState(["count", "msg"])
}
};
</script>
+ +

mutation 相当于 Vue 中 methods

Mutation 用于修改 Store 中的数据。 1.只能通过 mutation 变更 Store 数据,不可以直接操作 Store 中的数据。 2.通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有数据的变化。

+
方法 1(未传参数)

1.store/index.js

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 定义Mutation
import { createStore } from "vuex";

export default createStore({
state() {
return {
aname: "张三",
};
},
mutations: {
// 1.获取state中的数据
// 2.传参问题
changeName(state) {
state.aname = "李四";
},
},
});
+ +

2.在某一个组件文件中

+
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
49
50
51
// 触发mutation
<template>
<div class="hello">
<h1 @click="changeName">{{ msg }}</h1>
</div>
</template>

<script>
import { mapState, mapMutations } from "vuex";
export default {
name: "HelloWorld",
props: {
msg: String,
},
data() {
return {
name: "我最喜欢福原爱",
};
},
// created(){
// this.handleChange();
// },
methods: {
// 这个方法是用来触发store中的mutations中的changeName方法的
handleChange() {
this.$store.commit("changeName");
},
},
computed: {
...mapState(["aname"]),
},
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
+ +
方法 2(传参数)

1.store/index.js

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { createStore } from "vuex";

export default createStore({
state() {
return {
aname: "张三",
};
},
mutations: {
// 1.获取state中的数据
// 2.传参问题
changeOtherName(state, name1) {
state.aname = name1;
},
},
});
+ +

2.在某一个组件文件中

+
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
49
50
51
52
53
54
<template>
<div class="hello">
<h1 @click="changeName">{{ msg }}</h1>
<h2 @click="changeOtherName(name)">{{aname}}</h2>
</div>
</template>

<script>
import {mapState,mapMutations} from "vuex"
export default {
name: "HelloWorld",
props: {
msg: String
},
data(){
return {
name: "我最喜欢福原爱"
}
},
// created(){
// this.handleChange();
// },
methods: {
// 这个方法是用来触发store中的mutations中的changeName方法的
handelOtherChange(){
let name = this.name;
this.$store.commit("changeOtherName",name);
}
...mapMutations(['changeName','changeOtherName'])
},
computed: {
...mapState(['aname'])
}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>

+ +
方法 3

1.store/index.js

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { createStore } from "vuex";

export default createStore({
state() {
return {
aname: "张三",
};
},
mutations: {
// 1.获取state中的数据
// 2.传参问题
changeName(state) {
state.aname = "李四";
},
changeOtherName(state, name1) {
state.aname = name1;
},
},
});
+ +

2.在某一个组件文件中

+
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
49
50
<template>
<div class="hello">
<h1 @click="changeName">{{ msg }}</h1>
<h2 @click="changeOtherName(name)">{{aname}}</h2>
</div>
</template>

<script>
import {mapState,mapMutations} from "vuex"
export default {
name: "HelloWorld",
props: {
msg: String
},
data(){
return {
name: "我最喜欢福原爱"
}
},
// created(){
// this.handleChange();
// },
methods: {
...mapMutations(['changeName','changeOtherName'])
},
computed: {
...mapState(['aname'])
}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>


+ +

action 用于异步处理数据

Action 用于处理异步任务。
如果通过异步操作变更数据,必须通过 Action,而不能使用 Mutation,
但是在 Action 中还是要通过触发 Mutation 的方式间接变更数据。

+
方法 1

1.store/index.js

+
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
import { createStore } from "vuex";

export default createStore({
// 让计数器 每秒加2
state() {
return {
count: 0,
};
},
mutations: {
add(state, val) {
state.count += val;
},
},
actions: {
// context就是上下文
asyncAdd(context, val) {
console.log(context);
setInterval(function () {
// 用commit触发同步方法
context.commit("add", val);
}, 1000);
},
},
getters: {},
});
+ +

2.在某一个组件中

+
1
2
3
4
5
6
7
methods: {
handle() {
// 在调用dispatch 函数,
// 触发actions 时携带参数
this.$store.dispatch('addNAsync', 5)
}
}
+ +
方法 2

2.在某一个组件中使用

+
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
<template>
<div class="hello">
<h1 @click="asyncAdd(2)">{{ msg }}</h1>
<p>{{ count }}</p>
</div>
</template>

<script>
import { mapState, mapActions } from "vuex";
export default {
name: "HelloWorld",
props: {
msg: String
},
computed: {
...mapState(["count"])
},
methods: {
...mapActions(["asyncAdd"])
}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>

+ +

getter 相当于 Vue 中 computed

Getter 用于对 Store 中的数据进行加工处理形成新的数据。
1.Getter 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性。
2.Store 中数据发生变化,Getter 的数据也会跟着变化

+
方法 1

1.store/index.js

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { createStore } from "vuex";

export default createStore({
// 第一步: 声明数据
// 第二步: 写按钮 让数据变化
// 第三步: 当数据变化的时候 把数据同步更新到页面上
state() {
return {
count: 0,
};
},
mutations: {
add(state) {
state.count++;
},
},
actions: {},
getters: {
num(state) {
return state.count;
},
},
});
+ +

2.在某一个组件中使用

+
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
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<button @click="add">点我让数字自增{{num}}</button>
</div>
</template>

<script>
import {mapMutations,mapGetters} from "vuex"
export default {
name: "HelloWorld",
props: {
msg: String
},
methods: {
...mapMutations(['add'])
},
computed: {
// this.$srote.getters.num
...mapGetters(['num'])
}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>


+ +
+

https://www.v2ex.com/t/347227 > https://bigdata.bihell.com/language/javascript/vue/vuex.html#揭开-vuex-的神秘面纱 > https://cn.vuejs.org/v2/guide/state-management.html#简单状态管理起步使用

+
+

总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 一个完整的 vuex 例子
import { createStore } from "vuex";

export default createStore({
state() {
return {
str: "123",
};
},
// 同步方法
mutations: {
editStr(state, payload) {
state.str = payload;
},
},
actions: {
asyncEditStr(context, payload) {
context.commit("editStr", payload);
},
},
modules: {},
});
+ +

vue-compositionAPI 的使用

+

定义变量 ref、reactive

    +
  • ref 定义简单数据类型
  • +
  • reactive 定义复杂数据类型
  • +
+
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
<template>
<div class="box">
<h1>这里相当于 optionsAPI里面的data</h1>
<div>{{ hello }}</div>
<div>{{ obj }}</div>
</div>
</template>

<script>
// 注意要引入vue里面的方法才可以使用
import { reactive, ref } from "vue";
export default {
name: "App",
// components: {}
setup() {
let hello = ref("hello");
let obj = reactive({
name: "罗老师",
age: 18,
});
// 导出变量
return {
hello,
obj,
};
},
};
</script>

<style scoped>
.box {
text-align: center;
background-color: skyblue;
}
</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
<template>
<div class="box">
<h1>这里相当于 optionsAPI里面的 methods</h1>
<h2>
您将学习到修改 ref 和 reactive 里面的值和使用
在compositions里面使用optionsAPI里面的methods
</h2>
<div>{{ hello }}</div>
<div>{{ obj }}</div>
<button @click="changeName">点击我修改值</button>
</div>
</template>

<script>
import { reactive, ref } from "vue";
export default {
name: "App",
// components: {}
setup() {
let hello = ref("hello");
let obj = reactive({
name: "罗老师别这样",
age: 18,
});

function changeName() {
hello.value = "不hello";
obj.name = "罗老师";
}
// 导出
return {
hello,
obj,
changeName,
};
},
};
</script>

<style scoped>
.box {
text-align: center;
background-color: pink;
}
</style>
+ +

watch 监听值的变化

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
49
50
51
52
53
54
55
56
57
58
<template>
<div class="box">
<h1>这里相当于 optionsAPI里面的 watch</h1>
<h2>
您将学习到在compositions里面使用optionsAPI里面的watch 注意看控制台
</h2>
<div>{{ num }}--{{ num2 }}</div>
<button @click="changeNum">点击我数字变化</button>
</div>
</template>

<script>
import { ref, watch } from "vue";
export default {
name: "App",
// components: {}
setup() {
let num = ref(100);
let num2 = ref(200);

function changeNum() {
setInterval(() => {
num.value++;
num2.value++;
}, 500);
}
// 监听单一的值;
watch(
() => num.value, //监听num
(count, prevCount) => {
console.log("num 变化后的值", count, "num 变化前的值", prevCount);
}
);
//监听多个值
watch(
[num, num2], //监听num
([num, num2], [prevNum, prevNum2]) => {
console.log("num 变化后的值", num, "num 变化前的值", prevNum);
console.log("num2 变化后的值", num2, "num2 变化前的值", prevNum2);
}
);
// 导出
return {
num,
num2,
changeNum
};
}
};
</script>

<style scoped>
.box {
text-align: center;
background-color: skyblue;
}
</style>

+ +

watchEffect

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
<template>
<div class="box">
<h1>这里相当于 optionsAPI里面的 watch</h1>
<h2>您将学习到在compositions里面使用optionsAPI里面的watch 注意看控制台</h2>
<div>{{ num }}--{{ num2 }}</div>
<button @click="changeNum">点击我数字变化</button>
</div>
</template>

<script>
import { ref, watchEffect } from "vue";
export default {
name: "App",
// components: {}
setup() {
let num = ref(100);
let num2 = ref(200);

function changeNum() {
setInterval(() => {
num.value++;
num2.value++;
}, 500);
}

//监听多个值
watchEffect(() => {
console.log(num.value);
console.log(num2.value);
});

// 导出
return {
num,
num2,
changeNum,
};
},
};
</script>

<style scoped>
.box {
text-align: center;
background-color: pink;
}
</style>
+ +

computed

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
<template>
<div class="box">
<h1>这里相当于 optionsAPI 里面的 computed</h1>
<h2>注意看控制台</h2>
<div>helloComputed={{ helloComputed }}</div>
<div>numComputed={{ numComputed }}</div>
</div>
</template>

<script>
// 注意要引入vue里面的方法才可以使用
import { computed, ref } from "vue";
export default {
name: "App",
// components: {}
setup() {
let hello = ref("hello");
let helloComputed = computed(() => {
return hello.value + "World"; //计算完毕之后变成helloWorld
});
let num = ref(21);
let numComputed = computed({
get: () => num.value + 11, //直接调用执行这里
set: (val) => {
// 2.执行这里
console.log("numComputed.value=", val);
},
});
// 1.给 numComputed 赋值
numComputed.value = 20;
// 导出变量
return {
helloComputed,
numComputed,
};
},
};
</script>

<style scoped>
.box {
text-align: center;
background-color: skyblue;
}
</style>
+ +

调用 vuex

    +
  • App.vue
  • +
+
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
<template>
<div class="box">
<h2>您将学习到修改 如何调用 vuex里面的值和方法</h2>
<div>vuex里面的msg的值是---{{ msg }}</div>
<div>vuex里面的msg被计算属性之后的值----{{ msgComputed }}</div>
<button @click="changeMsg">点击修改vuex-msg</button>
</div>
</template>

<script>
import { computed } from "vue";
import { useStore } from "vuex";
export default {
name: "vuex",
// components: {}
setup() {
let store = useStore();
//获取 state() 里面的属性
let msg = computed(() => store.state.msg);
//获取 getters()里面的属性
let msgComputed = computed(() => store.getters.msg);
function changeMsg() {
// 调用mutations的方法
store.commit("changeMsg");
// 调用actios里面的方法
store.dispatch("fn");
}
return {
msg,
changeMsg,
msgComputed,
};
},
};
</script>

<style scoped>
.box {
text-align: center;
background-color: pink;
}
</style>
+ +
    +
  • store/index.js
  • +
+
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
import { createStore } from "vuex";

export default createStore({
state() {
return {
msg: "here is vuex",
};
},
mutations: {
changeMsg(state) {
state.msg = "msg被修改了";
},
},
actions: {
async fn() {
let a;
setTimeout(() => {
a = 90;
}, 0);
a = 90;

console.log(a);
},
},
modules: {},
getters: {
msg(state) {
return state.msg + "计算属性";
},
},
});
+ +

vue 获取元素

https://blog.csdn.net/weixin_43233914/article/details/108776124

+

https://v3.cn.vuejs.org/guide/composition-api-template-refs.html#%E4%BE%A6%E5%90%AC%E6%A8%A1%E6%9D%BF%E5%BC%95%E7%94%A8

+

vue3 语法糖

rfcs/0000-script-setup.md at script-setup-2 · vuejs/rfcs (github.com)

+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
avatar
正因你我生于繁华,弥足之花方显珍贵
文章目录
  1. 1. Node(后端)中的 MVC 与 前端中的 MVVM 之间的区别(了解内容)
  2. 2. Vue.js 基本代码 和 MVVM 之间的对应关系
  3. 3. 什么是 Vue 中的指令
    1. 3.1. 8.1 Vue 指令之 插值表达式 {\{ }\}
    2. 3.2. 8.2 Vue 指令之 v-cloak
    3. 3.3. 8.3 Vue 指令之 v-text
    4. 3.4. 8.4 Vue 指令之 v-html
    5. 3.5. 8.5 Vue 指令之 v-bind: 属性绑定
    6. 3.6. 8.6 Vue 指令之 v-on: 事件绑定
    7. 3.7. 8.7 【案例】跑马灯效果
    8. 3.8. 8.8 Vue 指令之 v-model 实现 双向数据绑定
    9. 3.9. 8.9 在 Vue 中使用 class 样式
  4. 4. Vue 常用特性
    1. 4.1. 表单基本操作
    2. 4.2. 表单修饰符
    3. 4.3. 自定义指令
      1. 4.3.1. Vue.directive 注册全局指令
      2. 4.3.2. Vue.directive 注册全局指令 带参数
      3. 4.3.3. 自定义指令局部指令
    4. 4.4. 计算属性 computed
    5. 4.5. 侦听器 watch
    6. 4.6. 过滤器
      1. 4.6.1. 过滤器中传递参数
    7. 4.7. 生命周期
    8. 4.8. 数组变异方法
    9. 4.9. 替换数组
    10. 4.10. 动态数组响应式数据
    11. 4.11. 图书列表案例
      1. 4.11.1. 1、 提供的静态数据
      2. 4.11.2. 2、 把提供好的数据渲染到页面上
      3. 4.11.3. 3、 添加图书
      4. 4.11.4. 4 修改图书-上
      5. 4.11.5. 5 修改图书-下
      6. 4.11.6. 6 删除图书
    12. 4.12. 常用特性应用场景
      1. 4.12.1. 1 过滤器
      2. 4.12.2. 2 自定义指令
      3. 4.12.3. 3 计算属性
      4. 4.12.4. 生命周期
  5. 5. 组件
    1. 5.1. 组件
    2. 5.2. 组件注册
      1. 5.2.1. 全局注册
        1. 5.2.1.1. 组件基础用
        2. 5.2.1.2. 组件注意事项
      2. 5.2.2. 局部注册
    3. 5.3. Vue 调试工具
    4. 5.4. Vue 组件之间传值
      1. 5.4.1. 父组件向子组件传值
      2. 5.4.2. 子组件向父组件传值
      3. 5.4.3. 兄弟之间的传递
  6. 6. vue-cli
    1. 6.1. 安装与启动
    2. 6.2. 使用 sass 全局方法 @mixnin
    3. 6.3. 样式穿透
  7. 7. vue-router
    1. 7.1. 安装
      1. 7.1.1. 配置文件书写
      2. 7.1.2. main.js 文件的书写
    2. 7.2. 路由重定向 router-redirect
    3. 7.3. 嵌套路由 router-nest
    4. 7.4. 路由传参 router-dynamic
      1. 7.4.1. 直接接收
      2. 7.4.2. 通过 props 属性
      3. 7.4.3. 通过回调函数
    5. 7.5. 编程式导航 router-program
    6. 7.6. 命名路由
  8. 8. Vuex 统一状态管理
    1. 8.1. VueX 概述
      1. 8.1.1. 为什么要学习 VueX
      2. 8.1.2. VueX 简介
    2. 8.2. VueX 的基本使用
    3. 8.3. VueX 的核心概念
      1. 8.3.1. State(类似于 Vue 中的 data 选项)
      2. 8.3.2. mutation 相当于 Vue 中 methods
        1. 8.3.2.1. 方法 1(未传参数)
        2. 8.3.2.2. 方法 2(传参数)
        3. 8.3.2.3. 方法 3
      3. 8.3.3. action 用于异步处理数据
        1. 8.3.3.1. 方法 1
        2. 8.3.3.2. 方法 2
      4. 8.3.4. getter 相当于 Vue 中 computed
        1. 8.3.4.1. 方法 1
    4. 8.4. 总结
  9. 9. vue-compositionAPI 的使用
    1. 9.1. 定义变量 ref、reactive
    2. 9.2. 方法的使用
    3. 9.3. watch 监听值的变化
    4. 9.4. watchEffect
    5. 9.5. computed
    6. 9.6. 调用 vuex
  10. 10. vue 获取元素
  11. 11. vue3 语法糖
最近发布
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2020/05/08/\345\211\215\347\253\257/Vue/03-Vue3-\347\273\204\345\220\210\345\274\217 API/index.html" "b/2020/05/08/\345\211\215\347\253\257/Vue/03-Vue3-\347\273\204\345\220\210\345\274\217 API/index.html" new file mode 100644 index 0000000000..d3e70ba137 --- /dev/null +++ "b/2020/05/08/\345\211\215\347\253\257/Vue/03-Vue3-\347\273\204\345\220\210\345\274\217 API/index.html" @@ -0,0 +1,908 @@ +Vue 3.0 组合式 API | WaterBoat的博客
加载头像

Vue 3.0 组合式 API

Vue 3.0 组合式 API

1. 为什么学习 Vue3

+

目标: 了解学习 Vue3 的必要性。

+
+
    +
  • Vue3 运行性能大幅提升,速度是 Vue2 的 1.5 倍左右

    +
  • +
  • Vue3 支持 tree shaking,可以进行按需编译,编译后的文件体积比 Vue2 更小

    +
  • +
  • Vue3 组合式 API 使应用中的功能代码更聚合,使组件间公共逻辑的抽取更容易

    +
  • +
  • Vue3 对 TypeScript 的支持更加友好,对大型前端应用的支持更加游刃有余

    +
  • +
  • Vue3 中提供了更加先进的功能,比如 teleport,suspense 等

    +
  • +
  • Vue 是目前国内前端使用者最多的框架,Vue3 是将来的必然趋势

    +
  • +
+ + +

Vue3 官方中文文档

+

2. 使用 Vite 创建项目

+

目标: 能够使用 vite 构建工具创建 Vue 应用。Vite 官方

+
+

Vite 是一款新型的前端构建工具,核心卖点就是快,启用速度快,编译速度快。

+
    +
  1. 创建应用:npm init vite-app vue-tutorial 或者 npx create-vite-app vue-tutorial
  2. +
  3. 切换至应用根目录:cd vue-tutorial
  4. +
  5. 下载应用依赖:npm install
  6. +
  7. 启动应用:npm run dev
  8. +
  9. 访问应用:localhost:3000
  10. +
+ + +

Vite 虽然构建速度非常快,但目前它默认安装的插件非常少,随着开发过程依赖增多,需要自己额外配置,所以做项目时仍然使用 vue-cli

+

3. 安装编辑器插件

+

目标:安装 VSCode 编辑器插件

+
+
    +
  1. Volar: Vue3 语法支持
  2. +
  3. Vue.js AutoImport: 引用组件
  4. +
  5. Vue3 Snippets: Vue3 代码片段
  6. +
  7. Prettier-Code formatter: 代码格式化
  8. +
  9. ESLint: 代码质量检查
  10. +
  11. EditorConfig for VS Code: 覆盖编辑器编码风格配置
  12. +
  13. Material Icon Theme: 编辑器主题
  14. +
  15. Chinese (Simplified) Language Pack for Visual Studio Code: 中文语言支持
  16. +
+

4. 组合式 API 的优势

+

目标:掌握组合式 API 相比较选项式 API,它的优势是什么。

+
+

在选项式 API 中,它将数据和逻辑进行了分离,所有不相关的数据被放置在了一起,所以不相关的逻辑被放置在了一起,随着应用规模的增加,项目将会变得越来越难以维护。

+ + +

在组合式 API 中,它将同一个功能的逻辑和数据放置在了一起,使同一个的功能代码更加聚合。

+ + +

同一个功能的代码可以被抽取到单独的文件中,使应用代码更加维护。

+ + +

5. 组合式 API 入口

+

目标:掌握 setup 函数的基本使用。

+
+
+
    +
  • 讲解 setup 函数的执行时机以及 this 指向
  • +
  • 讲解 setup 函数的返回值
  • +
  • 讲解 setup 函数如何使用
  • +
+
+

setup 函数是一个新的组件选项,作为在组件中使用组合式 API 的入口

+

setup 函数在任何生命周期函数之前执行,且函数内部 thisundefined,它不绑定组件实例对象

+
1
2
3
4
5
6
7
8
export default {
setup() {
console.log(this); // 1. undefined
},
beforeCreate() {
console.log("before create"); // 2. before create
},
};
+ +

setup 函数的返回值为对象类型,对象中的属性可以在其他选项和模板中使用, 因为对象中的属性会被添加到组件实例对象中

+
1
2
3
4
5
6
7
8
9
10
export default {
setup() {
let name = "张三";
let age = 20;
return { name, age };
},
beforeCreate() {
console.log(this.name);
},
};
+ +
1
<template>{{ name }} | {{ age }}</template>
+ +

注意:在 setup 方法中声明的变量虽然可以在模板中显示,但它不是响应式数据,就是说当数据更改后界面不会发生变化。

+
1
2
3
4
5
6
7
8
9
10
11
export default {
setup() {
let name = "张三";
let age = 20;
const onClickHandler = () => {
name = "李四";
age = 30;
};
return { name, age, onClickHandler };
},
};
+ +
1
2
3
4
<template>
{{ name }} | {{ age }}
<button @click="onClickHandler">button</button>
</template>
+ +

6. 响应式组件状态 ref

+

目标:掌握使用 ref 方法创建、修改响应式数据的方式。

+
+
+
    +
  • 讲解 ref 函数的作用是什么
  • +
  • 讲解如何使用 ref 方法创建、修改基本数据类型的响应式数据
  • +
  • 讲解如何使用 ref 方法创建、修改引用数据类型的响应式数据
  • +
+
+

ref 函数用于创建响应式数据,即数据变化视图更新。

+
+

使用 ref 函数创建基本数据类型的响应式数据。

+
1
2
3
4
5
6
7
8
import { ref } from "vue";
export default {
setup() {
const name = ref("张三");
const age = ref(20);
return { name, age };
},
};
+ +

使用 ref 创建的数据在模板中可以直接使用。

+
1
<template>{{ name }} | {{ age }}</template>
+ +

在 JavaScript 中通过 value 属性修改数据。

+
1
2
3
4
5
6
7
8
9
10
11
export default {
setup() {
const name = ref("张三");
const age = ref(20);
const onClickHandler = () => {
name.value = "李四";
age.value = 30;
};
return { name, age, onClickHandler };
},
};
+ +
1
2
3
4
<template>
{{ name }} | {{ age }}
<button @click="onClickHandler">button</button>
</template>
+ +
+

使用 ref 函数创建引用数据类型的响应式数据。

+
1
2
3
4
5
6
7
8
9
10
11
12
export default {
setup() {
const person = ref({ name: "张三", age: 30 });
const onClickHandler = () => {
person.value.name = "王五";
person.value.age = 50;
// 重新为 person 赋值也是可以的
// person.value = {name: '李四', age: 40}
};
return { person, onClickHandler };
},
};
+ +
1
2
3
4
<template>
{{ person.name }} | {{ person.age }}
<button @click="onClickHandler">button</button>
</template>
+ +

7. 响应式组件状态 reactive

+

目标: 掌握使用 reactive 函数创建响应式数据的方式, 掌握 reactive 函数和 ref 函数的区别

+
+
+
    +
  • 讲解 reactive 函数的作用
  • +
  • 讲解如何使用 reactive 函数创建基于引用数据类型的响应式数据
  • +
  • 讲解 reactive 函数在使用时的注意事项
  • +
  • 对比 ref 方法和 reactive 方法在使用上的不同
  • +
+
+

reactive 函数也可以用来创建响应式数据。

+
+

使用 reactive 函数创建基于引用数据类型的响应式数据。

+
1
2
3
4
5
6
7
8
9
10
11
import { reactive } from "vue";
export default {
setup() {
const person = reactive({ name: "张三", age: 20 });
const onClickHandler = () => {
person.name = "李四";
person.age = 50;
};
return { person, onClickHandler };
},
};
+ +
1
2
3
4
<template>
{{ person.name }} | {{ person.age }}
<button @click="onClickHandler">button</button>
</template>
+ +
+

reactive 函数只能基于引用数据类型创建响应式数据,对于基本数据类型它是不起作用的。

+
1
2
3
4
5
6
7
8
9
10
11
export default {
setup() {
let name = reactive("张三");
const onClickHandler = () => {
// name = "李四"
// name.value = "李四"
name = reactive("李四");
};
return { name, onClickHandler };
},
};
+ +

需求: 在点击按钮后将 newPerson 中的值赋值给 person

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
export default {
name: "App",
setup() {
let person = reactive({ name: "张三", age: 30 });
const newPerson = { name: "李四", age: 50 };
const onClickHandler = () => {
for (const attr in newPerson) {
person[attr] = newPerson[attr];
}
// Object.assign(person, newPerson);
};
return { person, onClickHandler };
},
};
+ +
+

ref 既可以创建基于基本数据类型的响应式数据也可以创建基于引用数据类型的响应式数据,reactive 只用于创建基于引用数据类型的响应式数据

+

ref 在 JS 中使用时需要点上 value, 而 reactive 在 JS 中使用时不需要点上 value,在模板中使用时都不需要加 value

+

ref 创建的响应式数据可以被直接整体赋值,而 reactive 创建的响应式数据不可以,若要整体赋值需要使用遍历的方式

+
+

为什么使用 ref 方法创建的响应式数据在修改时需要使用 value 属性,而使用 reactive 方法创建的响应式数据不需要?

+

ref 既可以创建基于基本数据类型的响应式数据, 也可以创建基于引用数据类型的响应式数据, 基本数据类型的响应式是通过类的属性访问器实现的, 引用数据类型的响应式是通过代理对象实现的, 虽然内部实现不同, 但是为了更好的 API 使用体验, 内部封装了统一的调用入口, 即 value 属性, 具体通过哪种方式创建响应式数据由内部统一处理.

+

reactive 只用于创建基于引用数据类型的响应式数据, 不需要供统一的调用入口, 所以没有必要使用 value 属性.

+

8. 计算属性 computed

+

目标:掌握使用 computed 函数创建计算属性的方式

+
+
+
    +
  • 说明 computed 方法的作用及使用方式
  • +
  • 通过名字搜索案例学习 computed 方法的使用
  • +
+
+

接收回调函数作为参数,基于回调函数中使用的响应式数据进行计算属性的创建. 回调函数的返回值就是计算结果.

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { ref, computed } from "vue";
export default {
setup() {
const names = ref([
"林俊杰",
"孙燕姿",
"周杰伦",
"张惠妹",
"刘若英",
"林宥嘉",
"刘德华",
"张韶涵",
"周笔畅",
"孙楠",
]);
const search = ref("");
const filterNames = computed(() =>
names.value.filter((name) => name.includes(search.value)),
);
return { search, filterNames };
},
};
+ +
1
2
3
4
5
6
<template>
<input type="text" v-model="search" />
<ul>
<li v-for="name in filterNames">{{ name }}</li>
</ul>
</template>
+ +

9. 监听状态 watch

+

目标:掌握 watch 函数监听数据的方式

+
+
+
    +
  • 说明 watch 函数的作用是什么
  • +
  • 如何使用 watch 函数监听基于 ref 创建的响应式数据 (基本数据类型、引用数据类型)
  • +
  • 如何使用 watch 监听响应式数据内部的具体属性 (基本数据类型、引用数据类型)
  • +
  • 如何使用 watch 监听多个值的变化
  • +
  • 说明 watch 方法中的 immediate 配置选项的作用
  • +
+
+

watch 函数用于监听响应式数据的变化。

+
+

使用 watch 函数监听基于 ref 创建的响应式数据 (基本数据类型)。

+
1
2
3
4
5
6
7
8
9
10
11
import { ref, watch } from "vue";
export default {
setup() {
const text = ref("");
watch(text, (current, previous) => {
console.log("current", current);
console.log("previous", previous);
});
return { text };
},
};
+ +
1
2
3
<template>
<input type="text" v-model="text" />
</template>
+ +

使用 watch 监听基于 ref 创建的响应式数据 (引用数据类型)。

+
1
2
3
4
5
6
7
8
9
10
11
import { ref, watch } from "vue";

export default {
name: "App",
setup() {
const person = ref({ name: "张三" });
watch(person.value, (current) => {
console.log(current);
});
},
};
+ +
1
2
3
<template>
<button @click="onClickHandler">{{ person.name }}</button>
</template>
+ +

使用 watch 监听响应式数据内部的具体属性 (基本数据类型)

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { ref, watch } from "vue";

export default {
name: "App",
setup() {
const person = ref({ name: "张三" });
watch(
() => person.value.name,
(current) => {
console.log(current);
},
);
return { person };
},
};
+ +
+

使用 watch 监听响应式数据内部的具体属性 (引用数据类型)

+
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
<template>
<p>{{ person.brand.title }} {{ person.name }}</p>
<button @click="changeBrandTitle">title</button>
<button @click="changeName">name</button>
</template>

<script>
import { ref, watch } from "vue";
export default {
name: "App",
setup() {
const person = ref({ brand: { title: "宝马" }, name: "张三" });
const changeBrandTitle = () => {
person.value.brand.title = "奔驰";
};
const changeName = () => {
person.value.name = "李四";
};
watch(person.value.brand, (current) => {
console.log(current);
});
return { person, changeBrandTitle, changeName };
},
};
</script>
+ +

使用 watch 监听基于 reactive 创建的响应式数据。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
import { reactive, watch } from "vue";
export default {
setup() {
const person = reactive({ name: "张三" });
const onClickHandler = () => {
person.name = "李四";
};
watch(person, (current, previous) => {
console.log(current);
});
return { person, onClickHandler };
},
};
+ +
1
2
3
4
<template>
{{ person.name }}
<button @click="onClickHandler">button</button>
</template>
+ +
+

使用 watch 监听多个值的变化

+
1
2
3
4
5
6
7
8
9
10
11
import { ref, watch } from "vue";
export default {
setup() {
const firstName = ref("");
const lastName = ref("");
watch([firstName, lastName], (current) => {
console.log(current);
});
return { firstName, lastName };
},
};
+ +
1
2
3
4
<template>
<input type="text" v-model="firstName" />
<input type="text" v-model="lastName" />
</template>
+ +

使 watch 监听数据在初始时执行一次

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { ref, watch } from "vue";
export default {
setup() {
const firstName = ref("hello");
const lastName = ref("world");
watch(
[firstName, lastName],
(current) => {
console.log(current);
},
{
immediate: true,
},
);
return { firstName, lastName };
},
};
+ +

10. 监听状态 watchEffect

+

目标:掌握使用 watchEffect 监听数据的方式

+
+
+
    +
  • 说明 watchEffect 方法的作用
  • +
  • 说明 watchEffect 方法的使用方式
  • +
+
+

watchEffect 和 watch 一样,都是用于监听响应式数据的变化。

+
+

watchEffect 只关心数据的最新值,不关心旧值是什么,而且 watchEffect 默认会在初始时执行一次。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { ref, watchEffect } from "vue";

export default {
name: "App",
setup() {
const firstName = ref("");
const lastName = ref("");
watchEffect(() => {
console.log(firstName.value);
console.log(lastName.value);
});
return { firstName, lastName };
},
};
+ +
1
2
3
4
<template>
<input type="text" v-model="firstName" />
<input type="text" v-model="lastName" />
</template>
+ +

11. toRef 函数

+

目标:掌握 toRef 函数的使用方式及应用场景

+
+
+
    +
  • 通过一段基础的 JavaScript 代码回顾基本数据类型的在赋值时的值传递特性, 为讲解 toRef 方法做铺垫
  • +
  • 通过一段基础的 Vue 代码了解在不使用 toRef 方法时存在的问题
  • +
  • 说明 toRef 方法的作用并使用 toRef 方法解决问题
  • +
  • 说明 toRef 方法的应用场景
  • +
+
+

说出以下代码的输出结果是什么?

+
1
2
3
4
5
let person = { name: "张三" };
let name = person.name;
person.name = "李四";
console.log(person.name); // "李四"
console.log(name); // ?
+ +
+

当按钮被点击时模板中的数据会发生更新吗?

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<template>
<p>{{ name }}</p>
<p>{{ person }}</p>
<button @click="onClickHandler">button</button>
</template>
<script>
import { ref } from "vue";
export default {
name: "App",
setup() {
const person = ref({ name: "张三" });
const onClickHandler = () => {
person.value.name = "李四";
};
return {
name: person.value.name,
person,
onClickHandler,
};
},
};
</script>
+ +
+

toRef 方法用于将响应式数据内部的普通数据转换为响应式数据,并且转换后的数据和原始数据存在引用关系,存在引用关系意味着当原始数据发生变化后,toRef 转换后的数据也会跟着变化。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<p>{{ name }}</p>
<p>{{ person }}</p>
<button @click="onClickHandler">button</button>
</template>

<script>
import { ref, toRef } from "vue";
export default {
name: "App",
setup() {
const person = ref({ name: "张三" });
const onClickHandler = () => {
person.value.name = "李四";
};
return {
name: toRef(person.value, "name"),
person,
onClickHandler,
};
},
};
</script>
+ +
+

需求: 当响应式数据的结构层级比较深时,在模板中使用起来也比较繁琐,能不能在模板中使用时简化结构层级呢?

+
1
2
3
4
5
6
export default {
setup() {
const person = ref({ brand: { name: "宝马" } });
return { person };
},
};
+ +
1
<template>{{ person.brand.name }}</template>
+ +

如果能够将模板中的 person.brand.name 简化成 brandName 的话,模板代码会更加简洁,所以按照想法代码很自然的就写成了下面这样。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<p>{{ person }}</p>
<p>{{ brandName }}</p>
<button @click="onClickHandler">button</button>
</template>

<script>
import { ref } from "vue";
export default {
name: "App",
setup() {
const person = ref({ brand: { name: "宝马" } });
const onClickHandler = () => {
person.value.brand.name = "奔驰";
};
return {
person,
brandName: person.value.brand.name,
onClickHandler,
};
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<p>{{ person }}</p>
<p>{{ brandName }}</p>
<button @click="onClickHandler">button</button>
</template>

<script>
import { ref, toRef } from "vue";
export default {
name: "App",
setup() {
const person = ref({ brand: { name: "宝马" } });
const onClickHandler = () => {
person.value.brand.name = "奔驰";
};
return {
person,
brandName: toRef(person.value.brand, "name"),
onClickHandler,
};
},
};
</script>
+ +

12. toRefs 函数

+

目标:掌握 toRefs 方法批量转换响应式数据的方式。

+
+
+
    +
  • 说明 toRefs 方法的作用是什么以及基本用法
  • +
  • 通过例子验证 toRefs 方法的使用方式
  • +
+
+

通过 toRef 方法一次只能转换一个数据,通过 toRefs 方法可以实现批量数据转换。

+

toRefs 方法接收引用数据类型的响应式数据,它可以将数据中的第一层属性全部转换为响应式数据, 返回值是一个对象, 对象中存储了所有转换之后的响应式数据。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
import { reactive, toRefs } from "vue";

export default {
name: "App",
setup() {
const person = reactive({
name: "张三",
age: 20,
brand: { title: "宝马", year: 1 },
});
return { ...toRefs(person) };
},
};
+ +
1
<template>{{ name }} {{ age }} {{ brand.title }} {{ brand.year }}</template>
+ +

对引用数据类型内部的数据进行转换

+
1
2
3
4
5
6
7
8
9
10
11
12
13
import { reactive, toRefs } from "vue";

export default {
name: "App",
setup() {
const person = reactive({
name: "张三",
age: 20,
brand: { title: "宝马", year: 1 },
});
return { ...toRefs(person), ...toRefs(person.brand) };
},
};
+ +
1
<template>{{ name }} {{ age }} {{ title }} {{ year }}</template>
+ +

13. 组件通讯

+

目标:掌握组合式 API 中父子组件通信的方式

+
+
+
    +
  • 讲解父组件如何向子组件传递数据
  • +
  • 讲解子组件如何更改父组件传递过来的数据
  • +
+
+

父组件通过 props 向子组件传递数据

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<template>
<div>I am parent component</div>
<hr />
<ChildComp :msg="msg"></ChildComp>
</template>

<script>
import ChildComp from "./components/ChildComp.vue";
import { ref } from "vue";
export default {
components: { ChildComp },
setup() {
const msg = ref("a message from parent");
return { msg };
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<div>
{{ childMsg }}
<hr />
{{ msg }}
</div>
</template>
<script>
import { computed } from "vue";
export default {
name: "ChildComponent",
props: ["msg"],
setup(props) {
// 当父组件更新 props 时 setup 函数是不会重新执行的
// 所以在 setup 函数中使用 props 时需要用到 computed 或者 watch 来响应 props 的变化
// 注意: 直接在模板中使用 props 数据是没有这个问题的
const childMsg = computed(() => props.msg + "😀😀");
return { childMsg };
},
};
</script>
+ +

子组件通过自定义事件向父组件传递数据

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<div>
{{ childMsg }}
<hr />
{{ msg }}
<hr />
<button @click="onMsgChanged">change msg</button>
</div>
</template>
<script>
import { computed } from "vue";

export default {
name: "ChildComponent",
props: ["msg"],
setup(props, { emit }) {
const onMsgChanged = () => {
emit("onMsgChanged", "changed msg from children");
};
return { onMsgChanged };
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<template>
<ChildComponent :msg="msg" @onMsgChanged="onMsgChanged" />
</template>

<script>
import { ref } from "vue";
import ChildComponent from "./components/child-component.vue";
export default {
components: { ChildComponent },
name: "App",
setup() {
const msg = ref("i am a message");
const onMsgChanged = (data) => {
msg.value = data;
};
return { msg, onMsgChanged };
},
};
</script>
+ +

注意事项:在 Vue2 中,模板需要被一个根元素包裹,但是在 Vue3 中是不需要的,Vue3 支持在模板中编写代码片段。

+
1
2
3
4
<template>
<div>{{ childMsg }}</div>
<button @click="onClickHandler">change msg</button>
</template>
+ +

如果在模板中使用代码片段, 自定义事件需要被显式的声明在 emits 选项中.

+
1
emits: ["onMsgChanged"],
+ +

14. 组件生命周期

+

目标:掌握组件生命周期函数的使用方式 VUE3 生命周期函数

+
+
+
    +
  • 说明 setup 函数的执行时机
  • +
  • 说明 onMounted、onUpdated、onUnmounted 组件生命周期函数的执行时机
  • +
+
+

setup: Vue3 中组合式 API 的入口, 它会在创建组件实例对象前执行, 会在每次组件重新挂载时执行。

+

创建组件实例对象前执行

+
1
2
3
4
5
6
7
8
export default {
setup() {
console.log("setup");
},
beforeCreate() {
console.log("before create");
},
};
+ +

每次组件重新挂载时执行

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- App组件 父组件  -->
<template>
<button @click="show = !show">toggle</button>
<ChildComponent v-if="show"></ChildComponent>
</template>

<script>
import { ref } from "vue";
import ChildComponent from "./components/child-component.vue";
export default {
components: { ChildComponent },
name: "App",
setup() {
const show = ref(true);
return { show };
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
<!-- ChildComponent 组件 子组件 -->
<template>child component</template>
<script>
export default {
name: "ChildComponent",
setup() {
// setup 函数会在组件每次重新渲染时执行
console.log("setup");
},
};
</script>
+ +

onMounted 组件挂载完成后执行

+

onUpdated 组件数据更新后执行

+

onUnmounted 组件卸载后执行

+
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
<!-- child-component  -->
<template>{{ count }} <button @click="onClickHandler">button</button></template>
<script>
import { onMounted, onUnmounted, onUpdated, ref } from "vue";

export default {
name: "ChildComponent",
setup() {
let timer = null;
// 组件挂载完成之后开启定时器
onMounted(() => {
timer = setInterval(() => {
console.log("timer...");
}, 1000);
});
// 组件卸载完成之后清除定时器
onUnmounted(() => {
clearInterval(timer);
});
const count = ref(0);
const onClickHandler = () => {
count.value = count.value + 1;
};
// 组件更新之后在控制台中输出 onUpdated
onUpdated(() => {
console.log("onUpdated");
});
return { count, onClickHandler };
},
};
</script>
+ +

15. 与服务端通信

+

目标:掌握在组合式 API 中实现与服务器端通讯的方式

+
+
+
    +
  • 通过例子说明如何在组合式 API 中实现与服务器端通讯的方式
  • +
  • 讲解抽取可重用逻辑的方式, 充分发挥组合式 API 的优势
  • +
+
+

向服务器端发送请求获取列表数据渲染列表数据, 没有数据要显示暂无数据, 如果请求报错展示错误信息, 加载过程显示 loading.

+
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
<script>
import { ref } from "vue";
import axios from "axios";

export default {
name: "App",
setup() {
// 用于存储列表数据
const data = ref(null);
// 用于标识加载状态
const loading = ref(false);
// 用于存储错误信息
const error = ref(null);
// 用于发送请求的方法
async function getPosts() {
// 更新加载状态
loading.value = true;
try {
// 发送请求
let response = await axios.get(
"https://jsonplaceholder.typicode.com/posts",
);
// 存储列表数据
data.value = response.data;
} catch (err) {
// 存储错误信息
error.value = err.message;
}
// 更新加载状态
loading.value = false;
}
// 调用方法 发送请求
getPosts();
// 返回模板所需数据
return { data, loading, error };
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
<template>
<div v-if="loading">loading...</div>
<div v-else-if="error">{{ error }}</div>
<div v-else-if="data && data.length > 0">
<ul>
<li v-for="item in data">{{ item.title }}</li>
</ul>
</div>
<div v-else>暂无数据</div>
</template>
+ +

注意: 如果在导入 axios 时报错,重新启动应用程序即可。

+

将获取 Posts 数据的逻辑抽取单独文件中,使其可以在多个组件中被重复使用。

+
1
2
3
4
5
6
7
8
export default {
name: "App",
setup() {
const { data, loading, error, getPosts } = usePosts();
getPosts();
return { data, loading, error };
},
};
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { ref } from "vue";
import axios from "axios";

function usePosts() {
const data = ref(null);
const loading = ref(false);
const error = ref(null);
async function getPosts() {
loading.value = true;
try {
let response = await axios.get(
"https://jsonplaceholder.typicode.com/posts",
);
data.value = response.data;
} catch (err) {
error.value = err.message;
}
loading.value = false;
}
return { data, loading, error, getPosts };
}
+ +

16. 获取 DOM 对象

+

目标:掌握在组合式 API 中获取 DOM 对象的方式

+
+
+
    +
  • 说明如何使用 ref 获取单个 DOM 对象
  • +
  • 说明如何使用 ref 获取一组 DOM 对象
  • +
+
+

获取单个 DOM 对象

+
1
2
3
4
5
6
7
8
9
10
import { ref, onMounted } from "vue";
export default {
setup() {
const divRef = ref(null);
onMounted(() => {
console.log(divRef.value);
});
return { divRef };
},
};
+ +
1
2
3
<template>
<div ref="divRef">Hello Ref</div>
</template>
+ +

获取一组 DOM 对象

+
1
2
3
4
5
6
7
8
9
10
11
import { ref, onMounted, onUpdated } from "vue";
export default {
setup() {
const list = ref(["a", "b", "c"]);
const elms = ref([]);
const onClickHandler = () => list.value.push("d");
onMounted(() => console.log(elms.value));
onUpdated(() => console.log(elms.value));
return { list, elms, onClickHandler };
},
};
+ +
1
2
3
4
5
6
7
8
9
10
11
12
<template>
<ul>
<li
v-for="(item, index) in list"
:key="index"
:ref="(el) => (elms[index] = el)"
>
{{ item }}
</li>
</ul>
<button @click="onClickHandler">button</button>
</template>
+ +

17. provide、inject 函数-跨组件层级传递数据的方式

+

目标:掌握跨组件层级传递数据的方式

+
+

通过 provide、inject 函数的配合使用,可以实现跨组件传递数据(组件与组件存在嵌套关系)

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- 父组件 App -->
<template>
<ChildComponent />
</template>

<script>
import { ref, provide } from "vue";
import ChildComponent from "./components/ChildComponent.vue";

export default {
components: { ChildComponent },
name: "App",
setup() {
const person = ref({ name: "张三" });
const changePerson = () => {
person.value.name = "李四";
};
provide("person", person);
provide("changePerson", changePerson);
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
<!-- 子组件 -->
<template>
<LastComponent />
</template>
<script>
import LastComponent from "./LastComponent.vue";
export default {
components: { LastComponent },
name: "ChildComponent",
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 孙组件 -->
<template>
{{ person.name }}
<button @click="changePerson">button</button>
</template>
<script>
import { inject } from "vue";
export default {
name: "LastComponent",
setup() {
const person = inject("person");
const changePerson = inject("changePerson");
return { person, changePerson };
},
};
</script>
+ +

18. teleport 传送门组件

+

目标:掌握 teleport 组件的使用方式

+
+
+
    +
  • 说明 teleport 组件的作用
  • +
  • 通过案例验证 teleport 组件的用法
  • +
+
+

teleport 组件可以将指定组件渲染到应用外部的其他位置。

+

比如弹框组件,它可能在任意组件中使用,但它不属于任意组件,所以不能在使用它的组件中渲染它,我们需要将它渲染到指定位置。

+
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
<!-- Modal.vue -->
<template>
<div class="wrapper">
<div class="content">
<a class="close" href="javascript:">关闭</a>
</div>
</div>
</template>
<script>
export default {
name: "Modal",
};
</script>
<style scoped>
.wrapper {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.4);
}
.content {
width: 660px;
height: 400px;
background: white;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.close {
position: absolute;
right: 10px;
top: 10px;
color: #999;
text-decoration: none;
}
</style>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- App.vue -->
<template>
<teleport to="#modal">
<Modal />
</teleport>
</template>
<script>
import Modal from "./components/Modal.vue";
export default {
components: { Modal },
name: "App",
};
</script>
+ +
1
2
<!-- index.html -->
<div id="modal"></div>
+ +

19. Suspense 组件-确保组件中的 setup 函数调用和模板渲染之间的执行顺序

+

目标:掌握 Suspense 组件的使用方式

+
+
+
    +
  • 说明 suspense 组件的作用及使用场景
  • +
  • 通过代码验证 suspense 组件的使用方式
  • +
+
+

Suspense 用于确保组件中的 setup 函数调用和模板渲染之间的执行顺序。先执行 setup 后渲染模板。

+

当组件中的 setup 被写成异步函数的形式, 代码执行的顺序就变成了先渲染模板后执行 setup 函数了。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- Posts.vue -->
<template>
<pre>{{ data }}</pre>
</template>
<script>
import axios from "axios";

export default {
name: "Posts",
async setup() {
let response = await axios.get(
"https://jsonplaceholder.typicode.com/posts",
);
return { data: response.data };
},
};
</script>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- App.vue -->
<template>
<Suspense>
<Posts />
</Suspense>
</template>
<script>
import Posts from "./components/Posts.vue";
export default {
components: { Posts },
name: "App",
};
</script>
+ +

通过 suspense 组件还可以为异步操作添加等待提示效果。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- App.vue -->
<template>
<Suspense>
<template v-slot:default>
<Posts />
</template>
<template v-slot:fallback> loading... </template>
</Suspense>
</template>
<script>
import Posts from "./components/Posts.vue";
export default {
components: { Posts },
name: "App",
};
</script>
+ +

20. 过渡动画

+

目标:掌握 transition 组件的使用方式

+
+

20.1 概述

Vue 提供了 transition 组件供我们执行过渡动画, 我们只需要使用 transition 组件包裹你要执行动画的元素即可。

+

执行过渡动画的前提条件是元素具有创建与销毁的操作。

+
1
2
3
<transition>
<h1>hello world</h1>
</transition>
+ +

当创建元素时, transiton 组件会为执行动画的元素添加三个类名, 我们可以通过这三个类名为元素添加入场动画。

+
1
2
3
4
5
6
.enter-from {
} // 元素执行动画的初始样式 (动画起点样式)
.enter-to {
} // 元素执行动画的目标样式 (动画终点样式)
.enter-active {
} // 可以用于指定元素指定动画的类型
+ +
1
2
3
4
5
6
7
8
9
.enter-from {
opacity: 0;
}
.enter-to {
opacity: 1;
}
.enter-active {
transition: opacity 2s ease-in;
} // ease-in 先慢后快
+ +

当销毁元素时, transition 组件会为执行动画的元素添加三个类名, 我们可以通过这个三个类名为元素添加离场动画样式。

+
1
2
3
4
5
6
.leave-from {
} // 元素执行动画的初始样式 (动画起点样式)
.leave-to {
} // 元素执行动画的目标样式 (动画终点样式)
.leave-active {
} // 可以用于指定元素指定动画的类型
+ +
1
2
3
4
5
6
7
8
9
.leave-from {
opacity: 1;
}
.leave-to {
opacity: 0;
}
.leave-active {
transition: opacity 2s ease-out;
} // ease-out 先快后慢
+ +

如果在页面中有多个元素要执行动画, 而多个元素要执行的动画不同时, 为了对多个元素的动画样式进行区分, 在调用 transiton 组件时需要为它添加 name 属性以区分样式类名。

+
1
2
3
<transition name="fade">
<h1>hello world</h1>
</transition>
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
.fade-enter-from {
}
.fade-enter-to {
}
.fade-enter-active {
}

.fade-leave-from {
}
.fade-leave-to {
}
.fade-leave-active {
}
+ +

20.2 示例

需求: 点击按钮让元素显示隐藏 (执行动画)

+
1
2
3
4
<transition name="fade">
<h2 v-if="show">hello world</h2>
</transition>
<button @click="show = !show">button</button>
+ +
1
const show = ref(false);
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.fade-enter-from {
opacity: 0;
}
.fade-enter-to {
opacity: 1;
}
.fade-enter-active {
transition: opacity 2s ease-in;
}

.fade-leave-from {
opacity: 1;
}
.fade-leave-to {
opacity: 0;
}
.fade-leave-active {
transition: opacity 2s ease-out;
}
+ +

21. 状态管理 Vuex

+

掌握 Vuex 实现全局状态管理的方式

+
+

21.1 问题

在不使用全局状态管理库时, 应用状态由组件管理, 当多个组件需要共享使用同一个应用状态时, 应用状态需要通过 props 或自定义事件在组件之间进行传递, 在组件与组件之间的关系比较疏远时, 手递手的这种传递方式显得特别混乱, 使得应用的维护变得困难.

+ + +

在使用了全局状态管理库后, 需要共享的应用状态被单独存储在一个独立于组件的 Store 对象中, 所有组件可以直接从这个对象中获取状态, 省去了繁琐的组件状态传递过程. 而且当 Store 中的状态发生变化后,组件也会自动更新。

+ + +

21.2 Vuex 工作流程

State: 用于存储应用状态 (store.state)

+

Action: 用于执行异步操作 (dispatch)

+

Mutation: 用于修改 state 中的应用状态 (commit)

+

Getter: vuex 中的计算属性 (store.getters)

+

Module: 模块, 用于对状态进行拆分

+

在组件中开发者可以调用 dispatch 方法触发 Action 执行异步操作, 当异步操作执行完成后, 在 Action 中可以继续调用 commit 方法触发 mutation 修改状态, 当状态被修改以后, 视图更新.

+ + +

21.3 下载

Vuex 目前有两个版本, 一个是 3.6.2, 另一个是 4.0.2, 3.x 的版本是供 Vue2 使用的, 4.x 版本是供 Vue3 使用的.

+

在下载 Vuex 的时候如果不加版本号,默认下载的是 3.x 版本, 而我们要使用的是 4.x 的版本, 所以在下载时千万记得加版本号.

+

npm install vuex@4.0.2

+

21.4 创建 Store

1
2
3
// src/store/index.js
import { createStore } from "vuex";
export default createStore({});
+ +
1
2
3
4
// src/main.js
import store from "./store";
const app = createApp(App);
app.use(store);
+ +

21.5 state

在应用状态对象中存储 username 状态.

+
1
2
3
4
5
export default createStore({
state: {
username: "张三",
},
});
+ +

在组件中获取 username 状态

+
1
<template> {{$store.state.username}} </template>
+ +
1
2
3
4
5
6
7
8
9
<script>
import { useStore } from "vuex";
export default {
setup() {
const store = useStore();
console.log(store.state.username);
},
};
</script>
+ +

21.6 getters

getters 是 vuex 中的计算属性, 基于现有状态计算出新的状态。

+
1
2
3
4
5
6
7
export default createStore({
getters: {
newUsername(state) {
return state.username + "😀😀😀😀";
},
},
});
+ +
1
2
3
<template>
{{ $store.getters.newUsername }}
</template>
+ +
1
2
3
4
5
6
7
<script>
export default {
setup() {
console.log(store.getters.newUsername);
},
};
</script>
+ +

21.7 mutations

mutations 是 vuex 中用于修改状态的方法。

+
1
2
3
4
5
6
7
export default createStore({
mutations: {
updateUsername(state, username) {
state.username = username;
},
},
});
+ +
1
2
3
4
5
<template>
<button @click="$store.commit('updateUsername', '李四')">
change username
</button>
</template>
+ +

21.8 actions

actions 在 Vuex 中用于执行异步操作, 当异步操作执行完成以后可以调用 commit 方法触发 mutation 来修改应用状态

+
1
2
3
4
5
6
7
8
9
export default createStore({
actions: {
updateName(ctx) {
setTimeout(() => {
ctx.commit("updateName", "李四");
}, 1000);
},
},
});
+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<button @click="onClickHandler">button</button>
</template>
<script>
export default {
setup() {
const onClickHandler = () => {
store.dispatch("updateName");
};
return { onClickHandler };
},
};
</script>
+ +

21.9 module

21.9.1 概述

Vuex 允许开发者通过模块对状态进行拆分,允许开发者将不同功能的状态代码拆分到不同的模块中。

+

模块分为两种,一种是不具备命名空间的模块,另一种是具备命名空间的模块,推荐使用命名空间,命名空间使模块更加独立。

+

21.9.2 非命名空间模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { createStore } from "vuex";

const moduleA = {
state() {
return {
name: "模块A",
};
},
};
const moduleB = {
state() {
return {
name: "模块B",
};
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
2
3
4
5
6
7
8
9
10
11
12
<template> {{$store.state['a'].name}} {{$store.state['b'].name}} </template>
<script>
import { useStore } from "vuex";
export default {
name: "App",
setup() {
const store = useStore();
console.log(store.state.a.name);
console.log(store.state.b.name);
},
};
</script>
+ +

非命名空间模块中的 mutation 方法, 当 updateName 方法被触发后,所有定义了此方法的模块都会调用该方法。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { createStore } from "vuex";

const moduleA = {
mutations: {
updateName(state) {
state.name = "😀模块A😀";
},
},
};
const moduleB = {
mutations: {
updateName(state) {
state.name = "😝模块B😝";
},
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
2
3
4
<template>
{{$store.state['a'].name}} {{$store.state['b'].name}}
<button @click="$store.commit('updateName')">updateName</button>
</template>
+ +

非命名空间模块中的 getter,不能在两个模块中定义相同的 getter 以避免程序报错。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { createStore } from "vuex";

const moduleA = {
getters: {
newName(state) {
return state.name + "😀";
},
},
};
const moduleB = {
getters: {
newName(state) {
return state.name + "😝";
},
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
<template> {{$store.getters.newName}} </template>
+ + + +

21.9.3 命名空间模块

命名空间模块需要在模块对象中添加 namespaced: true 选项。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { createStore } from "vuex";

const moduleA = {
namespaced: true,
state() {
return { name: "模块A" };
},
};
const moduleB = {
namespaced: true,
state() {
return { name: "模块B" };
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
<template> {{$store.state['a'].name}} {{$store.state['b'].name}} </template>
+ +

具有命名空间的模块状态更加独立,比如可以在不同的命令空间中定义相同的 getter

+
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
import { createStore } from "vuex";

const moduleA = {
namespaced: true,
getters: {
newName(state) {
return state.name + "😀";
},
},
};
const moduleB = {
namespaced: true,
getters: {
newName(state) {
return state.name + "😀";
},
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
2
3
<template>
{{$store.getters['a/newName']}} {{$store.getters['b/newName']}}
</template>
+ +

在不同的命名空间模块中定义相同的变异方法

+
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
import { createStore } from "vuex";

const moduleA = {
namespaced: true,
mutations: {
updateName(state) {
state.name = "我是模块A";
},
},
};
const moduleB = {
namespaced: true,
mutations: {
updateName(state) {
state.name = "我是模块B";
},
},
};

export default createStore({
modules: {
a: moduleA,
b: moduleB,
},
});
+ +
1
2
3
4
5
6
<template>
{{ $store.getters["a/newName"] }}
{{ $store.getters["b/newName"] }}
<button @click="$store.commit('a/updateName')">update moduleA</button>
<button @click="$store.commit('b/updateName')">update moduleb</button>
</template>
+ +

22. 代理对象

+

目标: 了解代理对象的使用方式

+
+

什么是数据响应式?

+

数据驱动视图, 即数据和视图进行绑定, 当数据发生变化后, 视图自动更新.

+

如何实现数据响应式?

+

实现数据响应式的核心在于监听数据的变化, 当数据发生变化后, 执行视图更新操作.

+

Vue3 使用代理对象监听数据变化.

+

创建对象的代理对象, 从而实现对对象操作的拦截和自定义.

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// person 对象, 源数据对象
const person = { name: "张三", age: 20 };
// p 对象, person 对象的代理对象
// 对 p 对象进行的所有操作都会映射到 person 对象
const p = new Proxy(person, {});
// 查询代码对象
console.log(p); // Proxy { name: "张三", age: 20 }
// 修改代理对象中的 name 属性
p.name = "李四";
// 输出源数据对象中的 name 属性
console.log(person.name); // 李四
// 删除代理对象中的 age 属性
delete p.age;
// 输出源数据对象中的 age 属性
console.log(person.age); // undefined
// 在代理对象中增加 sex 属性
p.sex = "男";
// 输出源数据对象中的 sex 属性
console.log(person.sex);
+ +
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
// person 对象, 源数据对象
const person = {
name: "张三",
age: 20,
brand: { group: { title: "宝马" } },
};
// p 对象, person 对象的代理对象
// 对 p 对象进行的所有操作都会映射到 person 对象
const p = new Proxy(person, {
get(target, property) {
console.log("拦击到了获取操作");
return target[property];
},
set(target, property, value) {
console.log("拦截到了设置或者新增操作");
target[property] = value;
},
deleteProperty(target, property) {
console.log("拦截到了删除操作");
return delete target[property];
},
});

// console.log(p.name);
// p.name = "李四";
// delete p.name;
// p.sex = "男";
// proxy 代理的是整个对象, 不论对象层级有多深, 都可以进行拦截.
console.log(p.brand.group.title);

console.log(person);
+ +

23. 双向数据绑定

23.1 实现表单双向数据绑定

1. 什么是双向数据绑定?

+

双向指的是视图(template)和逻辑(script), 双向数据绑定是指视图更新数据后自动同步到逻辑, 逻辑更新数据后自动同步到视图。

+

2. 如何实现双向数据绑定?

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<template>
<input type="text" v-model="firstName" />
<button @click="onClickHandler">button</button>
</template>
<script>
import { ref } from "vue";
export default {
setup() {
const firstName = ref("张三");
const onClickHandler = () => {
firstName.value = "李四";
};
return { firstName, onClickHandler };
},
};
</script>
+ +

3. 如何监听双向数据绑定中数据的变化

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<template>
<input
type="text"
v-model="firstName"
@update:modelValue="onFirstNameChanged($event)"
/>
</template>
<script>
import { ref } from "vue";
export default {
setup() {
const firstName = ref("张三");
const onFirstNameChanged = (event) => {
console.log(event);
};
return { firstName, onFirstNameChanged };
},
};
</script>
+ +

23.2 实现组件双向数据绑定

1. 普通版

App.vue

+
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
<template>
<Test
:firstName="firstName"
@onFirstNameChanged="onFirstNameChanged($event)"
/>
<button @click="onClickHandler">我是App组件中的 button</button>
</template>
<script>
import Test from "./components/Test.vue";
import { ref } from "vue";
export default {
components: { Test },
name: "App",
setup() {
const firstName = ref("张三");
const onClickHandler = () => {
firstName.value = "李四";
};
const onFirstNameChanged = (event) => {
firstName.value = event;
};
return { firstName, onClickHandler, onFirstNameChanged };
},
};
</script>
+ +

Test.vue

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<template>
<div>
{{ firstName }}
<button @click="onClickHandler">我是Test组件中的button</button>
</div>
</template>
<script>
export default {
props: ["firstName"],
setup(props, { emit }) {
const onClickHandler = () => {
emit("onFirstNameChanged", "王五");
};
return { onClickHandler };
},
};
</script>
+ +

2. 升级版

App.vue

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<template>
<Test v-model="firstName" />
<button @click="onClickHandler">我是App组件中的 button</button>
</template>
<script>
import Test from "./components/Test.vue";
import { ref } from "vue";
export default {
components: { Test },
name: "App",
setup() {
const firstName = ref("张三");
const onClickHandler = () => {
firstName.value = "李四";
};
return { firstName, onClickHandler };
},
};
</script>
+ +

Test.vue

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<template>
<div>
{{ modelValue }}
<button @click="onClickHandler">我是Test组件中的button</button>
</div>
</template>
<script>
export default {
props: ["modelValue"],
setup(props, { emit }) {
const onClickHandler = () => {
emit("update:modelValue", "王五");
};
return { onClickHandler };
},
};
</script>
+ +

3. 终极版

App.vue

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<Test v-model:firstName="firstName" v-model:lastName="lastName" />
<button @click="onClickHandler">我是App组件中的 button</button>
</template>
<script>
import Test from "./components/Test.vue";
import { ref } from "vue";
export default {
components: { Test },
name: "App",
setup() {
const firstName = ref("张三");
const lastName = ref("李四");
const onClickHandler = () => {
firstName.value = "孙悟空";
lastName.value = "猪八戒";
};
return { firstName, lastName, onClickHandler };
},
};
</script>
+ +

Test.vue

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<template>
<div>
{{ firstName }} {{ lastName }}
<button @click="onClickHandler">我是Test组件中的button</button>
</div>
</template>
<script>
export default {
props: ["firstName", "lastName"],
setup(props, { emit }) {
const onClickHandler = () => {
emit("update:firstName", "刘备");
emit("update:lastName", "诸葛亮");
};
return { onClickHandler };
},
};
</script>
+ +

24. customRef

创建具有自定义行为的响应式数据, 通过拦截响应式数据的读取和设置实现。

+

防抖: 监听用户的连续操作, 最终只响应连续操作中的最后一次操作。

+
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
<template>
<input type="text" v-model="keyword" />
{{ keyword }}
</template>
<script>
import { customRef } from "vue";
export default {
name: "App",
setup() {
const keyword = useDebounceRef("Hello", 400);
return { keyword };
},
};

function useDebounceRef(initialValue, delay) {
let timer = null;
return customRef((track, trigger) => {
return {
get() {
// 跟踪 initialValue 值的变量
track();
return initialValue;
},
set(newValue) {
clearTimeout(timer);
timer = setTimeout(() => {
initialValue = newValue;
// 触发视图更新
trigger();
}, delay);
},
};
});
}
</script>
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2020/05/20/\345\216\237\347\245\236/\345\216\237\347\245\236\346\212\275\345\215\241\350\256\260\345\275\225\346\212\223\345\217\226/index.html" "b/2020/05/20/\345\216\237\347\245\236/\345\216\237\347\245\236\346\212\275\345\215\241\350\256\260\345\275\225\346\212\223\345\217\226/index.html" new file mode 100644 index 0000000000..9cd4c90c6c --- /dev/null +++ "b/2020/05/20/\345\216\237\347\245\236/\345\216\237\347\245\236\346\212\275\345\215\241\350\256\260\345\275\225\346\212\223\345\217\226/index.html" @@ -0,0 +1,377 @@ +原神抽卡记录抓取 | WaterBoat的博客
加载头像

原神抽卡记录抓取

原神抽卡记录抓取

日志文件

原神的日志文件存储在本地

+
1
2
3
4
5
6
7
8
var os = require("os");
var path = require("path");
// 获取原神日志路径
let outputPath = path.join(
os.userInfo().homedir,
"/AppData/LocalLow/miHoYo/原神/output_log.txt",
);
console.log(outputPath);
+ +

进入游戏后访问自己的抽卡记录,日志里面就会生成对应的访问链接,里面带有用户的 token。

+

OnGetWebViewPageFinish

+

抓包得到的 API

https://hk4e-api.mihoyo.com/event/gacha_info/api/getGachaLog

+

关键参数

+ + + + + + + + + + + + + + + + + + + +
参数含义
size每页多少条(最多 20)
page第多少页(不知道上限 获取到没有为止)
gacha_type抽卡的类型枚举,分别代表新手、常驻、角色 up 池、武器 up 池
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/03/08/\345\211\215\347\253\257/TypeScript/01.TypeScript\347\254\224\350\256\260/index.html" "b/2021/03/08/\345\211\215\347\253\257/TypeScript/01.TypeScript\347\254\224\350\256\260/index.html" new file mode 100644 index 0000000000..556d2b0d42 --- /dev/null +++ "b/2021/03/08/\345\211\215\347\253\257/TypeScript/01.TypeScript\347\254\224\350\256\260/index.html" @@ -0,0 +1,588 @@ +TypeScript 笔记 | WaterBoat的博客
加载头像

TypeScript 笔记

TypeScript 笔记

[[toc]]

+

代码库

点击去往

+

环境搭建

1
2
3
4
5
6
7
8
9
10
# 安装
npm install typescript -g

tsc xx.ts # 生成 js 文件
tsc -d xx.ts #生成 xx.d.ts文件
node xx.js # 运行 js 文件

# 方便直接运行 ts 文件的包
npm install ts-node -g
ts-node xx.ts # 直接运行 ts 文件
+ +

体验一下 ts

类型注解(annotation)

    +
  • 我们告诉 typescript 变量是什么类型
  • +
+
1
2
let a: number; // annotation
a = 11;
+ +
    +
  • 声明数字
  • +
+
1
let a: number = 10;
+ +
    +
  • 声明数组
  • +
+
1
2
3
let a: number[] = [1, 2, 3]; // 声明数字数组
let b: string[] = ["1", "2", "3"]; // 声明字符串数组
let c: Array<number> = [1, 2, 3]; //运用泛型声明数组
+ +
    +
  • 声明对象
  • +
+
1
const obj: { name: string; age: number } = { name: "李四", age: 19 };
+ +
    +
  • 函数
  • +
+
1
2
3
4
5
6
7
function fn(): void {
// 没有返回值
}

function fn2(): number {
return 1;
}
+ +
    +
  • 结构赋值
  • +
+
1
2
3
function sum({ a, b }: { a: number; b: number }): number {
return a + b;
}
+ +
    +
  • 任意类型
  • +
+
1
2
let num: any = "1";
num = 2;
+ +
    +
  • 声明数组对象
  • +
+
1
2
3
4
5
6
7
8
interface Obj {
name: string;
age: number;
}
let arr: Obj[] = [
{ name: "张安", age: 18 },
{ name: "荒芜", age: 20 },
];
+ +

类型推断(inference)

    +
  • typescript 会自动的判断变量的类型
  • +
+
1
let a = 123; // 鼠标放上 a 去看
+ +

never 类型的理解

    +
  • 一个无法执行完成的函数的返回值可以是 never
  • +
+
1
2
3
4
5
6
function fn(): never {
throw new Error();
}
function fn(): never {
while (true) {}
}
+ +

必看(运行环境)

使用的编辑器 vscode

+

typescript 版本 4.2.4

+

tsconfig.json 配置

+

:::tip

+

笔记的全部代码都是开启严格模式,没开严格模式的地方会特别说明

+

:::

+
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"outDir": "./dist",
"strict": true, // 开启严格模式
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"exclude": ["dist"],
"include": ["src"]
}
+ +

基础

数据类型

    +
  1. any类型除了不能赋值给never与其他所有类型兼容

    +
  2. +
  3. unknow可以被其他所有类型赋值

    +
  4. +
  5. anyunknow外,void不可赋值给其他类型

    +
  6. +
+

:::tip

+

strict 严格模式在 tsc -init 之后的 tsconfig.json 里面设置

+

:::

+
    +
  1. 不开启strict选项时,void可被nullundefinednever`赋值

    +
  2. +
  3. 开启strict选项时,void可被undefinednever赋值

    +
  4. +
+

ts数据类型

+

定义变量

JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。

+

原始数据类型包括:布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 SymbolBigInt

+

null 和 undefined 是所有类型的子类型 也就是说 undefined 类型的变量,可以赋值给 number 类型的变量 (在没有开启严格模式的情况下)

+
1
2
3
4
5
6
// 冒号后面的玩意叫类型注解
let num: number = 123;
let flag: boolean = false;
let str: string = "hello ts";
let n: null = null;
let un: undefined = undefined;
+ +

定义函数

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:

+
1
2
3
4
5
6
7
function fn(): void {
console.log("我莫得返回值");
}

function fn2(): string {
return "我的返回值是 string";
}
+ +

声明一个 void 的变量只能被赋值成 null 和 undefined (在没有开启严格模式的情况下 null 才能 赋值给 void 变量)

+
1
2
3
let v: void = null; // "strict": false
let v1: void = null; // "strict": true;Type 'null' is not assignable to type 'void'.ts(2322)
let v: void = undefined;
+ +

:::tip

+

在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。

+

:::

+
1
2
3
4
5
6
7
let returnStr: (str: string) => string = function (str) {
return str;
};
type Str = (str: string) => string;
let fn: Str = function (str) {
return str;
};
+ +

重载

重载允许一个函数接受不同数量或类型的参数时,作出不同的处理

+

类似于 java 里面的方法重载

+

例如我们定义一个函数名为 add 的函数,当传入的值是 number 类型的时候我们就相加,传入的是 string 类型的时候我们就转换成数字再相加

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function add(x1: number, x2: number): number;
function add(x1: string, x2: string): string;

function add(
x1: number | string,
x2: number | string,
): number | string | undefined {
if (typeof x1 == "number" && typeof x2 == "number") {
return x1 + x2;
} else if (typeof x1 == "string" && typeof x2 == "string") {
return x1 + x2;
}
}
let result = add(1, 2);
console.log(result);
+ +

定义任意值 any

任意值(Any)用来表示允许赋值为任意类型。

+

简单理解如果你把一个变量注解成了 any 那么你写的 ts 代码就变成了 js 了

+
1
2
3
let a: any = "123";
a = 5;
a = false;
+ +

等价于

+
1
2
3
var a = "123";
a = 5;
a = false;
+ +

类型推论 Type Inference

如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。

+

也就是说编译器会帮你推断一个类型

+
1
2
let num = 1; // 鼠标移动到 num 上会看到 vscode 给你推断出了number
num = "123"; // Type 'string' is not assignable to type 'number'.ts(2322)
+ +

以上代码等价于

+
1
2
let num: number = 1;
num = "123";
+ +

TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论

+

::: warning

+

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查

+

:::

+

联合类型 Union Types

联合类型(Union Types)表示取值可以为多种类型中的一种。

+

联合类型使用 | 分隔每个类型。

+

案例

+
1
2
3
4
// hello 变量既可以是 number 类型也可以是 string 类型
let hello: number | string;
hello = 123; // 此时是 number 类型 只能访问 number 里面的方法
hello = "123"; // 此时是 string 类型 只能访问 string 里面的方法
+ +

访问联合类型的属性或方法

:::warning

+

当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法

+

:::

+
1
2
3
4
5
6
7
8
9
// 访问联合类型的共有属性
function getLength1(s: string | number): number {
return s.length; //Property 'length' does not exist on type 'string | number'.Property 'length' does not exist on type 'number'.ts(2339)
// number 没有 length 这个方法所以报错
}
function getLength2(s: string | number): string {
return s.toString();
// string 和 number 里面都有 toString 方法所以没有报错
}
+ +

对象的类型——接口 Interface

什么是接口

在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。

+
案例
1
2
3
4
5
6
7
8
9
10
11
12
// 接口名称一般大写
interface Person {
name: string;
age: number;
}

let obj: Person = { name: "张安", age: 18 };

let arr: Person[] = [
{ name: "张安", age: 18 },
{ name: "荒芜", age: 20 },
];
+ +

以上的案例我们发现接口定义之后用里面定义的 name 和 age 在 obj 里面都得完完整整的写完 那么我不想写完呢?或者只写一个呢?

+

可选属性

有时我们希望不要完全匹配一个形状,那么可以用可选属性

+
{4}
1
2
3
4
5
6
7
8
9
10
11
12
interface Person {
name: string;
age: number;
gender?: string;
}

let obj: Person = { name: "张安", age: 18 };

let arr: Person[] = [
{ name: "张安", age: 18 },
{ name: "荒芜", age: 20, gender: "男" },
];
+ +

那么我想让这个 interface 里面的属性可以任意添加呢?

+

任意属性

有时候我们希望一个接口允许有任意的属性,可以使用如下方式

+
{6,17-19}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface Person {
name: string;
age: number;
gender?: string;
// propName 不是固定的写法,可以随便写 比如你写个 aaa 什么的
[propName: string]: any;
}

let obj: Person = { name: "张安", age: 18 };

let arr: Person[] = [
{ name: "张安", age: 18 },
{
name: "荒芜",
age: 20,
gender: "男",
p1: "我是任意属性",
p2: 123,
p3: "我是任意属性",
},
];
+ +

::: warning

+

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

+

:::

+
{6}
1
2
3
4
5
6
7
8
9
10
11
interface Person {
name: string;
age: number; // Property 'age' of type 'number' is not assignable to string index type 'string'.ts(2411)
gender?: string; // Property 'gender' of type 'string | undefined' is not assignable to string index type 'string'.ts(2411)
// 注意看注解成了 string
[propName: string]: string;
}

let obj: Person = { name: "张安", age: 18 }; //Type '{ name: string; age: number; }' is not assignable to type 'Person'.Property 'age' is incompatible with index signature.Type 'number' is not assignable to type 'string'.ts(2322)

// 上例中,任意属性的值允许是 string,但是可选属性 age 的值却是 number,number 不是 string 的子属性,所以报错了。
+ +

那么我想让 interface 里面的属性一开始就被赋值并且只能被读取不能被修改呢?

+

只读属性

有时候我们希望对象中的一些字段只能在创建的时候被赋值,那么可以用 readonly 定义只读属性

+
{2,11}
1
2
3
4
5
6
7
8
9
10
11
interface Person {
readonly id: number;
name: string;
age: number;
gender?: string;
// propName 不是固定的写法,可以随便写 比如你写个 aaa 什么的
[propName: string]: any;
}

let obj: Person = { id: 1, name: "张安", age: 18 };
obj.id = 2; // Cannot assign to 'id' because it is a constant or a read-only property.
+ +

类型断言 Type Assertion

语法

1
// 值 as 类型 或 <类型>值  一般用前者
+ +

类型断言的用途

简单理解就是,现在你比编译器更懂现在的这个变量是什么类型

+
1
2
3
4
5
6
7
function getValue(value: number | string): void {
// 在没有明确传入的类型的时候我们只能调用联合类型中的公共属性和方法
// 明确告诉 ts 我知道他肯定传入的是 number 然后调用 toFixed
let n = (value as number).toFixed(2);
console.log(n);
}
getValue(1);
+ +

确定赋值断言

用处告诉 Ts 该属性被明确的赋值

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let x: number;
initialize();

// Variable 'x' is used before being assigned.(2454)
console.log(2 * x); // Error
function initialize() {
x = 10;
}

let x!: number;
initialize();
console.log(2 * x); // Ok

function initialize() {
x = 10;
}
+ +

进阶

类型别名 type

类型别名用来给一个类型起个新名字

+
1
2
3
4
5
6
7
type Obj = {
name: string;
age: number;
gender?: string;
};

let obj: Obj = { name: "张安", age: 18, gender: "男" };
+ +

:::tip

+

类型别名常用于联合类型

+

:::

+

元组 Tuple

数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。

+

元组定义成啥样就要验证遵守定义的规则

+
1
2
3
4
5
6
7
8
9
10
11
12
13
let arr1: [number, string] = [1, "hello"];
console.log(arr1);

// 对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项
let arr2: [boolean, string];
arr2[0] = false; // Variable 'arr2' is used before being assigned
arr2[1] = "1"; // Variable 'arr2' is used before being assigned

arr2 = [false, "12"];

// 如果数组越界直接 push 注解的类型没有注解的类型无法添加
arr1.push(1);
arr1.push(false);
+ +

枚举 Enum

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

+
1
2
3
4
5
6
7
8
9
enum Days {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
}
+ +

枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum Days {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
}

console.log(Days["Sun"] === 0); // true
console.log(Days["Mon"] === 1); // true
console.log(Days["Tue"] === 2); // true
console.log(Days["Sat"] === 6); // true

console.log(Days[0] === "Sun"); // true
console.log(Days[1] === "Mon"); // true
console.log(Days[2] === "Tue"); // true
console.log(Days[6] === "Sat"); // true
+ +

枚举可以手动赋值

+
{2,6-7}
1
2
3
4
5
6
7
8
9
10
11
12
enum Day {
Sun = 10,
Mon,
Tue,
Wed,
Thu = "123",
Fri = 9,
Sat,
}
console.log(Day.Sun); //10
console.log(Day.Tue); //12
console.log(Day.Sat); //10
+ +

泛型 Generics

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

+

例子

1
2
3
4
5
6
7
// 创建一个函数,它可以创建一个指定长度的数组,同时将每一项都填充一个默认值:
function createArray(length: number, value: any): any[] {
return new Array(length).fill(value);
}

let result = createArray(5, "123"); // [ '123', '123', '123', '123', '123' ]
console.log(result);
+ +

:::tip

+

思考 : 返回的是一个任意类型的数组,若是我后面直接调用 result[0].toFixed(2) 字符串上明明没有这个方法我强行调用不就报错了? 还有一个问题,我们输入 result[0]. 点时候在 vscode 中的代码提示没有了.我们写 ts 可以说就是为了良好的代码提示这时提示没有了是否意味着我们写错了?

+

此时我们需要一个工具我们给 value 输入什么类型 createArray 函数就返回什么类型的数组,并且 result 会被类型推断为正确的类型

+

此时泛型就可以登场了

+

:::

+
{6}
1
2
3
4
5
6
7
8
9
10
11
12
13
// 创建一个函数,它可以创建一个指定长度的数组,同时将每一项都填充一个默认值:
function createArray<T>(length: number, value: T): T[] {
return new Array(length).fill(value);
}

let result = createArray(5, "123"); //鼠标放上去看类型推断,试着把 "123" 修改成不同的数据类型
console.log(result[0]);

// 写法二

let createArray2 = function <T>(length: number, value: T): Array<T> {
return new Array(length).fill(value);
};
+ +

泛型约束

在函数内部使用泛型变量的时候,由于事先不知道它是哪种类型,所以不能随意的操作它的属性或方法

+
1
2
3
4
// 用泛型创建一个函数返回传入字符串的 length
function getLength<T>(str: T): T {
return str.length; // 此时报错 str 上不存在 length 属性
}
+ +

此时我们就需要告诉编译器 str 上肯定存在 length 属性,我们就需要使用到泛型约束

+
{12}
1
2
3
4
5
6
7
8
9
10
11
12
13
// 用泛型创建一个函数返回传入字符串的 length
interface LengthI {
length: number;
}
// 泛型 T 继承 LengthI 让传入数据类型必须有 length 属性
function getLength<T extends LengthI>(str: T): T {
console.log(str.length);
return str;
}

let result = getLength("123");
let result2 = getLength(123); // Argument of type 'number' is not assignable to parameter of type 'LengthI'.
console.log(result);
+ +

泛型接口

1
2
3
4
5
6
7
8
// 泛型接口
interface CreateArray {
<T>(length: number, value: T): Array<T>;
}

let createArray: CreateArray = function <T>(length: number, value: T): T[] {
return new Array(length).fill(value);
};
+ +

我们可以把泛型参数提前到接口名上

+
1
2
3
4
5
6
7
8
9
10
11
// 泛型接口
interface CreateArray<T> {
<T>(length: number, value: T): Array<T>;
}

let createArray: CreateArray<any> = function <T>(
length: number,
value: T,
): T[] {
return new Array(length).fill(value);
};
+ +

一些总结

高级类型

    +
  • 交叉类型,使用类型操作符 &

    +
  • +
  • 联合类型,使用类型操作符

    +
  • +
  • 索引类型,使用类型操作符 keyofT[K]

    +
  • +
  • 映射类型,使用类型操作符 in

    +
  • +
  • 条件类型,使用类型操作符 T extends U ? X : Y infer

    +
  • +
  • 另外还有用于类型保护的类型谓词中的 is 操作符以及上面所介绍的 typeof

    +
  • +
+

高级类型

+

参考资料

+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/03/08/\345\211\215\347\253\257/Vue/01-Vue2/index.html" "b/2021/03/08/\345\211\215\347\253\257/Vue/01-Vue2/index.html" new file mode 100644 index 0000000000..57914c6002 --- /dev/null +++ "b/2021/03/08/\345\211\215\347\253\257/Vue/01-Vue2/index.html" @@ -0,0 +1,441 @@ +Vue 2.0 笔记 | WaterBoat的博客
加载头像

Vue 2.0 笔记

Vue 2.0 笔记

v-for 的更新机制

    +
  • 改变数组的方法就会导致 v-for 更新
  • +
  • 无法改变数组的方法,返回新的数组的,就不会导致 v-for 更新,可采用覆盖数组或者 this.$set(“更新的值”,”更新位置”,”更新值”)
  • +
+
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
<template>
<div>
<h1>v-for 的更新机制</h1>
<template v-for="item in list">
<h1 :key="item">{{ item }}</h1>
</template>
<button @click="reverse">翻转</button>
<button @click="slice">截取前3个元素</button>
<button @click="btn">直接修改第下标0的值为20</button>
</div>
</template>

<script>
export default {
name: "v-for",
data() {
return {
list: [1, 2, 3, 4],
};
},
methods: {
reverse() {
// 因为原数组被修改了所以触发了更新
this.list.reverse();
},
slice() {
// slice方法会返回一个新数组,需要把新数组赋值给 this.list 才会触发更新
// this.list.slice(0, 3);
let arr = this.list.slice(0, 3);
this.list = arr;
},
btn() {
// 直接修改数组的值无法触发更新,可以使用 this.$set 方法
// this.list[0] = 20;
this.$set(this.list, 0, 20);
},
},
};
</script>

<style></style>
+ +

这些方法会触发数组改变, v-for 会监测到并更新页面

+
    +
  • push()
  • +
  • pop()
  • +
  • shift()
  • +
  • unshift()
  • +
  • splice()
  • +
  • sort()
  • +
  • reverse()
  • +
+

这些方法不会触发 v-for 更新

+
    +
  • slice()
  • +
  • filter()
  • +
+

虚拟 DOM

.vue 文件中的 template 里写的标签, 都是模板, 都要被 vue 处理成虚拟 DOM 对象, 才会渲染显示到真实 DOM 页面上

+

内存中生成一样的虚拟 DOM 结构(==本质是个 JS 对象==)

+

因为真实的 DOM 属性好几百个, 没办法快速的知道哪个属性改变了

+

image-20210928204611597

+

使用虚拟 DOM 只包含必要的属性,就可以和旧的虚拟 DOM 进行比较快速找出不同,只更新变化的部分

+

动态 class

    +
  • 用 v-bind 给标签 class 设置动态的值
  • +
  • v-bind 的简化语法 :class
  • +
+
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
<template>
<div>
<h1 v-bind:class="{ red: flag }">动态class</h1>
<button @click="btn">按钮</button>
</div>
</template>

<script>
export default {
name: "class",
data() {
return {
flag: "red",
};
},
methods: {
btn() {
this.flag = !this.flag;
},
},
};
</script>

<style>
.red {
color: red;
}
</style>
+ +

动态 style

    +
  • 用 v-bind 给标签 style 设置动态的值
  • +
  • v-bind 的简化语法 :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
<template>
<div>
<h1 :style="{ background: colorRed }">动态style</h1>
<button @click="btn">按钮</button>
</div>
</template>

<script>
export default {
name: "Dstyle",
data() {
return {
colorRed: "red",
};
},
methods: {
btn() {
if (this.colorRed === "red") {
this.colorRed = "yellow";
} else {
this.colorRed = "red";
}
},
},
};
</script>

<style></style>
+ +

过滤器

    +
  • 过滤器是一个函数,传入值返回处理后的值

    +
  • +
  • 过滤器只能用在, ==插值表达式和 v-bind 表达式==

    +
  • +
  • 语法

    +
      +
    • 全局过滤器 Vue.filter(“过滤器名”, (值) => {return “返回处理后的值”})
    • +
    • 局部过滤器 filters: {过滤器名字: (值) => {return “返回处理后的值”}
    • +
    +
  • +
+
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
<template>
<div>
<h1>过滤器</h1>
<div>{{ str }}</div>
<span>{{ str | reverse }}</span>
</div>
</template>

<script>
export default {
data() {
return {
str: "admin",
};
},
filters: {
reverse(value) {
console.log(value);
return value.split("").reverse().join("");
},
},
};
</script>

<style></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
<template>
<div>
<h1>过滤器</h1>
<div>{{ str }}</div>
<h2>过滤器传参</h2>
<span>{{ str | reverse("123") }}</span>
<h2>多个过滤器的使用</h2>
<div>{{ str | reverse("123") | UpCase }}</div>
</div>
</template>

<script>
export default {
data() {
return {
str: "admin",
};
},
filters: {
reverse(value, data) {
console.log(value);
console.log(data); // 接收传过来的参数
return value.split("").reverse().join("") + data;
},
UpCase(value) {
return value.toUpperCase();
},
},
};
</script>

<style></style>
+ +

计算属性 computed

    +
  • 可以根据数据的变化而实时变化的数据

    +
  • +
  • 语法

    +
      +
    • computed: {
      +    "计算属性名" () {
      +        return "值"
      +    }
      +}
      +
      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

      ```vue
      <template>
      <div>
      <p>{{ num }}</p>
      </div>
      </template>

      <script>
      export default {
      data() {
      return {
      a: 10,
      b: 20,
      };
      },
      // 注意: 计算属性和data属性都是变量-不能重名
      // 注意2: 函数内变量变化, 会自动重新计算结果返回
      computed: {
      num() {
      return this.a + this.b;
      },
      },
      };
      </script>
      +
      +
    • +
    +
  • +
+

计算属性的完整写法

    +
  • 计算属性也是变量, 如果想要直接赋值, 需要使用完整写法

    +
  • +
  • 语法

    +
      +
    • computed: {
      +    "属性名": {
      +        set(值){
      +
      +        },
      +        get() {
      +            return "值"
      +        }
      +    }
      +}
      +
      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

      ```vue
      <template>
      <div>
      <div>
      <span>姓名:</span>
      <input type="text" v-model="full" />
      </div>
      </div>
      </template>

      <script>
      export default {
      computed: {
      full: {
      // 给full赋值触发set方法
      set(val) {
      console.log(val);
      },
      // 使用full的值触发get方法
      get() {
      return "无名氏";
      },
      },
      },
      };
      </script>
      +
      +
    • +
    +
  • +
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/05/01/\345\220\216\347\253\257/01-Sql\345\237\272\347\241\200/index.html" "b/2021/05/01/\345\220\216\347\253\257/01-Sql\345\237\272\347\241\200/index.html" new file mode 100644 index 0000000000..f2649cb72f --- /dev/null +++ "b/2021/05/01/\345\220\216\347\253\257/01-Sql\345\237\272\347\241\200/index.html" @@ -0,0 +1,1194 @@ +SQL 基础 | WaterBoat的博客
加载头像

SQL 基础

SQL 基础

[[toc]]

+

了解 Sql

使用的工具

本文档的代码都是在 MySQL 8.0.23 版本下面运行的
MySQL 下载地址 z
navicat 数据库可视化工具

+

数据库

数据库这个术语的用法很多,(从 SQL 的角度来看),数据库是一个以某种有组织的方式存储的数据集合。最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的物理位置,不管数据是什么也不管数据是如何组织的。
如果你使用 navicat 查看数据库,那么你可以在下面查看到数据库

+

image-20211103095421726

+

::: warning 注意数据库概念混淆

+

人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说,数据库软件应称为数据库管理系统(DBMS)。数据库是通过 DBMS 创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。

+

:::

+

拥有了数据库我们就可以把数据存储在表中,表是一个存储数据的容器,它可以是一个文件,也可以是一个数据库中的一个表。

+

表是一种结构化的文件,可用来存储某种特定类型的数据。

+

数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字。

+

表具有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式(schema),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。

+

::: tip
关于数据库和表的布局及特性的信息。
:::

+

在 navicaat 中,表的表现形式如图

+

image-20211103101446570

+

列和数据类型

表由列组成。列存储表中某部分的信息。
列是表中的一个数据单元,它可以是一个字段,也可以是一个索引。

+

:::tip 列
表中的一个字段。所有表都是由一个或多个列组成的。
:::

+

在 navicat 中,列的表现形式如图

+

image-20211103101837725

+

数据库中每个列都有相应的数据类型。数据类型(datatype)定义了列可以存储哪些数据种类。

+

每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。

+

数据类型限定了可存储在列中的数据种类(例如,防止在数值字段中录入字符值)。数据类型还帮助正确地分类数据,并在优化磁盘使用方面起 重要的作用。因此,在创建表时必须特别关注所用的数据类型。

+

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。

+

在 navicat 中,行的表现形式如图

+

image-20211103101837725

+

上图中的每一行都是表中的一个记录或者称为数据库记录(record)

+

::: tip 说明:是记录还是行?

+

你可能听到用户在提到行时称其为数据库记录(record)。这两个术语 多半是可以交替使用的,但从技术上说,行才是正确的术语

+

:::

+

主键(primary key)

表中每一行都应该有一列(或几列)可以唯一标识自己。用户表可以用用户编号,订单表可以用订单号来标识主键。
唯一标识表中每行的这个列(或这几列)称为主键。主键用来表示一个 特定的行。没有主键,更新或删除表中特定行就极为困难,因为你不能 保证操作只涉及相关的行。

+

::: tip 应该总是定义主键
虽然并不总是需要主键,但多数数据库设计者都会保证他们创建的每 个表具有一个主键,以便于以后的数据操作和管理。
:::

+

表中的任何列都可以作为主键,只要它满足以下条件:

+
    +
  • 任意两行都不具有相同的主键值;
  • +
  • 每一行都必须具有一个主键值(主键列不允许 NULL 值
  • +
  • 主键列中的值不允许修改或更新;
  • +
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。
  • +
+

在 navicat 中,主键的表现形式如图,右键表打开设计表

+

image-20211103103857767

+

什么是 SQL

SQL(发音为字母 S-Q-L 或 sequel)是 Structured Query Language(结构化查询语言)的缩写。SQL 是一种专门用来与数据库沟通的语言。
与其他语言(如英语或 Java、C、PHP 这样的编程语言)不一样,SQL 中只有很少的词,这是有意而为的。设计 SQL 的目的是很好地完成一项 任务——提供一种从数据库中读写数据的简单有效的方法。

+

SQL 有如下的优点。

+
    +
  • SQL 不是某个特定数据库供应商专有的语言。几乎所有重要的 DBMS 都支持 SQL,所以学习此语言使你几乎能与所有数据库打交道。
  • +
  • SQL 简单易学。它的语句全都是由有很强描述性的英语单词组成,而 且这些单词的数目不多。
  • +
  • SQL 虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其 语言元素,可以进行非常复杂和高级的数据库操作。
  • +
+

::: tip SQL 扩展知识

+

许多 DBMS 厂商通过增加语句或指令,对 SQL 进行了扩展。这种扩 展的目的是提供执行特定操作的额外功能或简化方法。虽然这种扩展 很有用,但一般都是针对个别 DBMS 的,很少有两个以上的供应商支 持这种扩展。

+

标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。所有主要 的 DBMS,即使有自己的扩展,也都支持 ANSI SQL。各个实现有自 己的名称,如 PL/SQL、Transact-SQL 等。

+

本教程 SQL 主要是 ANSI SQL。在使用某种 DBMS 特定的 SQL 时,会特别说明。

+

:::

+

检索数据(SELECT)

这一章节介绍如何使用 SELECT 语句从表中检索一个或多个数据列。

+

开始练习之前记得下载练习数据

+

SELECT 语句

select 意思为选择

+

为了使用 SELECT 检索表数据,必须至少给出两条信息——想选择什么, 以及从什么地方选择。

+

检索单列

1
2
-- 检索 subways 表里面的 area_subway_name 字段
SELECT area_subway_name FROM subways;
+ +

上述代码利用 SELECT 语句从 subways 表中检索一个名为 area_subway_name 的列。所需的列名写在 SELECT 关键字之后,FROM 关键字指出从哪个表 中检索数据。

+

语法总结:

+
1
SELECT 列名 FROM 表名;
+ +

输出结果

+

image-20211104165622834

+

::: tip 未排序数据—怎么我执行的结果和图中不一样?

+

如果你自己试验这个查询,可能会发现显示输出的数据顺序与这里的 不同。出现这种情况很正常。如果没有明确排序查询结果(下一课介绍),则返回的数据没有特定的顺序。返回数据的顺序可能是数据被添 加到表中的顺序,也可能不是。只要返回相同数目的行,就是正常的

+

:::

+

如上的一条简单 SELECT 语句将返回表中的所有行。数据没有过滤(过滤将得出结果集的一个子集),也没有排序。以后的章节将会详细讨论。

+

::: warning SQL 语句的分号

+

多条 SQL 语句必须以分号(;)分隔。有些 DBMS 不需要在单挑语句后面加分号,但是也有需要要分号的。

+

总之,加上分号一定没有坏处。

+

:::

+

::: tip SQL 语句不区分大小写

+

SQL 语句不区分大小写,因此 SELECT 与 select 是相同的。 同样,写成 Select 也没有关系。许多 SQL 开发人员喜欢对 SQL 关键字使用大写,而对列名和表名使用小写,

+

:::

+

::: tip 使用空格

+

在处理 SQL 语句时,其中所有空格都被忽略。SQL 语句可以写成长长 的一行,也可以分写在多行。

+
1
2
3
4
5
6
7
8
9
10
SELECT area_subway_name
FROM subways;

SELECT
area_subway_name
FROM
subways;

SELECT area_subway_name FROM subways;
-- 以上都是可以正常运行的,注意以分号结尾来表达一段代码的结束
+ +

:::

+

检索多列

要想从一个表中检索多个列,仍然使用相同的 SELECT 语句。从检索单列一样只不过是要把检索的列名用逗号分隔罢了。

+

::: tip 小心逗号引发的错误

+

当选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。如果在最后一个列名后加了逗号,将出现错误。

+

:::

+

下面的 SELECT 语句从 subways 表中检索 3 列

+
1
2
-- 检索 subways 表里面的 id,area_subway_name,station 字段
SELECT id,area_subway_name,station FROM subways;
+ +

输出结果

+

image-20211104171647508

+

检索所有列

和之前的检索单列、多列一样,检索所有列只是把列名换成了通配符( * )

+
1
2
-- 检索 subways 表里面的所有字段
SELECT * FROM subways;
+ +

输出结果

+

image-20211104171915041

+

::: tip 注意通配符

+

一般而言,除非你确实需要表中的每一列,否则最好别使用* 通配符。 虽然使用通配符能让你自己省事,不用明确列出所需列,但检索不需 要的列通常会降低检索和应用程序的性能

+

:::

+

检索不重复的值

之前的练习案例你会发现重复出现了很多相同的值,如何让这些重复的值不出现呢?

+

办法就是使用 DISTINCT 关键字, distinct 意为不同的、清楚的、确切的,顾名思义,它会返回数据库中不同的值

+
1
2
-- 检索重复的值
SELECT DISTINCT area_subway_name FROM subways
+ +

输出结果,与检索单列对比是不是少了重复的值

+

image-20211104172658631

+

::: tip 不能部分使用 DISTINCT

+

DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定SELECT DISTINCT id,area_subway_name,station FROM subways;除非指定的 两列完全相同,否则所有的行都会被检索出来。

+

image-20211104173041365

+

:::

+

限制结果

SELECT 语句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定数量的行,该怎么办呢?

+

我们可以使用 TOP 但是注意的是在各种数据库中这一 SQL 的实现并不相同。由于本教程使用的是 MySQL 所以只显示 MySQL 的用法

+
1
2
-- top 选择前面 5 条数据
SELECT * FROM subways LIMIT 10;
+ +

image-20211104212011545

+
1
2
-- top 选择第 5 行往后的 5 行数据 用数学语言表示 (5,10]
SELECT * FROM subways LIMIT 5 OFFSET 5;
+ +

image-20211104212027024

+

注释

在很多编辑器里面你都可以使用快捷键ctrl+/来注释所以本章只是简单是说明有哪些注释可以用的。

+
1
2
3
4
5
-- 注释
# 注释
/*
多行注释
*/
+ +

排序检索数据(ORDER BY )

SQL 语句返回某个数据库表的单个列。是没有特定顺序的。

+

其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在 底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是, 如果数据随后进行过更新或删除,那么这个顺序将会受到 DBMS 重用回 收存储空间的方式的影响。因此,如果不明确控制的话,则最终的结果不 能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确 规定排序顺序,则不应该假定检索出的数据的顺序有任何意义。

+

::: 子句 (clause)

+

SQL 语句由子句构成,有些子句是必需的,有些则是可选的。一个子 句通常由一个关键字加上所提供的数据组成。子句的例子有我们在前一课看到的 SELECT 语句的 FROM 子句。

+

:::

+

为了明确地排序用 SELECT 语句检索出的数据,可使用 ORDER BY 子句。

+

ORDER 意思为命令、顺序。

+

ORDER BY 子句取一个或多个列的名字,据此对输出进行排序。

+
1
SELECT area_subway_name FROM subways ORDER BY area_subway_name;
+ +

image-20211105173054891

+

:::tip 注意:ORDER BY 子句的位置

+

在指定一条 ORDER BY 子句时,应该保证它是 SELECT 语句中最后一条子句。如果它不是最后的子句,将会出现错误消息。

+

:::

+

按多个列排序

我们有时候的排序是不止一个裂的数据排序。例如, 地铁路线,我们希望先按地铁城市名排序,然后再按照地铁线路,最后按照地铁站排序。

+
1
SELECT area_subway_name,station,platform FROM subways ORDER BY area_subway_name,station,platform;
+ +

image-20211105195823926

+

按列位置排序

除了能用列名指出排序顺序外,ORDER BY 还支持按相对列位置进行排 序。

+
1
SELECT area_subway_name,station,platform FROM subways ORDER BY 1,2,3;
+ +

image-20211105195823926

+

可以看到,这里的输出与上面的查询相同,不同之处在于 ORDER BY 子句。

+
1
2
3
4
/* select 后面选择了 area_subway_name,station,platform 列
order by 1,2,3 代表了,先按 area_subway_name 排序,然后按 station 排序,最后按 platform 排序
*/
SELECT area_subway_name,station,platform FROM subways ORDER BY 1,2,3;
+ +

这一技术的主要好处在于不用重新输入列名。但它也有缺点。首先,不明 确给出列名有可能造成错用列名排序。其次,在对 SELECT 清单进行更改 时容易错误地对数据进行排序(忘记对 ORDER BY 子句做相应的改动)。 最后,如果进行排序的列不在 SELECT 清单中,显然不能使用这项技术。

+

指定排序方向 (升序、降序)

数据排序不限于升序排序(从 A 到 Z),这只是默认的排序顺序。还可以 使用 ORDER BY 子句进行降序(从 Z 到 A)排序。为了进行降序排序, 必须指定 DESC 关键字。

+
1
2
-- id 降序排列
SELECT * FROM subways order by id desc;
+ +

image-20211105210446735

+

DESC 关键字只应用到直接位于其前面的列名。

+

:::warning 在多个列上降序排序

+

如果想在多个列上进行降序排序,必须对每一列指定 DESC 关键字。

+

:::

+

,DESC 是 DESCENDING 的缩写,这两个关键字都可以使用。与 DESC 相对的是 ASC(或 ASCENDING),在升序排序时可以指定它。但是你指定也没啥用,因为升序的默认的。

+

::: tip

+

在对文本性数据进行排序时,A 与 a 相同吗?a 位于 B 之前,还是 Z 之后?这些问题不是理论问题,其答案取决于数据库的设置方式。

+

在字典(dictionary)排序顺序中,A 被视为与 a 相同,这是大多数数 据库管理系统的默认行为。但是,许多 DBMS 允许数据库管理员在需 要时改变这种行为(如果你的数据库包含大量外语字符,可能必须这 样做)。

+

这里的关键问题是,如果确实需要改变这种排序顺序,用简单的 ORDER BY 子句可能做不到。你必须请求数据库管理员的帮助

+

:::

+

过滤数据(WHERE)

使用 WHERE 子句

数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会 根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指 定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

+

人话就是寻找符合条件的数据

+

在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。 WHERE 子句在表名(FROM 子句)之后给出,如下所示:

+
1
2
-- 语句使用通配符检索所有的列,但是只会返回 id=1987的行
SELECT * FROM subways WHERE id = 1987;
+ +

image-20211105211950641

+

::: tip 注意:WHERE 子句的位置

+

在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则将会产生错误([关于 ORDER BY 的使用](#排序检索数据(ORDER BY )))

+

:::

+

WHERE 子句操作符

我们可以通过子句操作符来获得我们想要的数据

+
1
select * from 表名 where 列名 运算符 想要的结果
+ +

让我们来几个案例来看看。

+

找出 id 小于 3000 的数据。

+
1
SELECT * FROM subways WHERE id < 3000;
+ +

找出 area_subway_name 不是郑州的数据

+
1
2
3
SELECT * FROM subways WHERE area_subway_name <> "郑州";
-- 等价
SELECT * FROM subways WHERE area_subway_name != "郑州";
+ +

::: tip 何时使用引号

+

如果将值与字符串类型的 列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。

+

:::

+

::: tip 是!=还是<>?

+

!= 和 <> 通常可以互换。但是,并非所有 DBMS 都支持这两种不等于操 作符。例如,Microsoft Access 支持 <> 而不支持 != 。如果有疑问,请参 阅相应的 DBMS 文档

+

:::

+

算术运算符

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作符描述示例
+相加:将符号两边的数值加起来。a + b 得 30
-相减:从最边的操作数中减去右边的操作数。a - b 得 -10
*相乘:将两边的操作数相乘。a * b 得 200
/相除:用右边的操作数除以左边的操作数。b / a 得 2
%取余:用右边的操作数除以左边的操作数,并返回余数。b % a 得 0
+

比较运算符

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作符描述示例
=检查两个操作数的值是否相等,是的话返回 true。(a = b) 不为 true。
!= 和 <>检查两个操作数的值是否相等,如果不等则返回 true。(a != b) 为 true。
>检查左边的操作数是否大于右边的操作数,是的话返回真。(a > b) 不为 true。
>=检查左边的操作数是否大于或等于右边的操作数,是的话返回真。(a >= b) 不为 true。
!检查左边的操作数是否不小于右边的操作数,是的话返回真。(a ! b)
!>检查左边的操作数是否不大于右边的操作数,是的话返回真。(a !> b) 为 true。
+

逻辑运算符

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
ALLALL 运算符用于将一个值同另一个值集中所有的值进行比较。
ANDAND 运算符使得在 WHERE 子句中可以同时存在多个条件。
ANYANY 运算符用于将一个值同条件所指定的列表中的任意值相比较。
BETWEEN给定最小值和最大值,BETWEEN 运算符可以用于搜索区间内的值。
EXISTSEXISTS 运算符用于在表中搜索符合特定条件的行。
ININ 运算符用于将某个值同指定的一列字面值相比较。
LIKELIKE 运算符用于使用通配符对某个值和与其相似的值做出比较。
NOTNOT 操作符反转它所作用的操作符的意义。例如,NOT EXISTS、NOT BETWEEN、NOT IN 等。这是一个求反运算符。
OROR 运算符用于在 SQL 语句中连接多个条件。
IS NULLNULL Operator 用于将某个值同 NULL 作比较。
UNIQUEUNIQUE 运算符检查指定表的所有行,以确定没有重复。
+

范围值检查

要检查某个范围的值,可以使用 BETWEEN 操作符。其语法与其他 WHERE 子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。

+

让我们来检索 id 是 2000 到 2005 之间的数据吧。数学语言表述为[2000,2005]

+
1
2
-- 范围值检查
SELECT * FROM subways WHERE id BETWEEN 2000 AND 2005;
+ +

image-20211108155024457

+

在使用 BETWEEN 时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用 AND 关键字分隔。BETWEEN 匹配范围中所有的值,包括指定的开始值和结束值。

+

空值检查

在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不 包含值时,称其包含空值 NULL。

+

::: tip NULL

+

无值(no value),它与字段包含 0、空字符串或仅仅包含空格不同。

+

:::

+

确定值是否为 NULL,不能简单地检查是否 = NULL。SELECT 语句有一个 特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就 是 IS NULL 子句。其语法如下:

+
1
2
-- 空值检查
SELECT * FROM subways WHERE id IS NULL;
+ +

这条语句返回所有数据(空的 id 字段),因为表中没有空的行,所以没有返回数据。

+

高级数据过滤

这一课讲授如何组合 WHERE 子句以建立功能更强、更高级的搜索条件。 我们还将学习如何使用 NOT 和 IN 操作符。

+

组合 WHERE 子句

为了进行更强的过滤控制,SQL 允许给出多个 WHERE 子句。

+

AND 操作符

找出 id 小于 2007 且大于 2000 的数据

+
1
2
-- AND
SELECT * FROM subways WHERE id > 2000 AND id < 2007;
+ +

image-20211108161956721

+

::: AND

+

用在 WHERE 子句中的关键字,用来指示检索满足所有给定条件的行。

+

:::

+

这个例子只包含一个 AND 子句,因此最多有两个过滤条件。可以增加多 个过滤条件,每个条件间都要使用 AND 关键字。

+

OR 操作符

OR 操作符与 AND 操作符正好相反,它指示 DBMS 检索匹配任一条件的行。事实上,许多 DBMS 在 OR WHERE 子句的第一个条件得到满足的情 况下,就不再计算第二个条件了(在第一个条件满足时,不管第二个条 件是否满足,相应的行都将被检索出来)

+
1
2
-- OR
SELECT * FROM subways WHERE id = 2000 OR id = 2001;
+ +

image-20211108165746007

+

这一段 SQL 语句返回了 id = 2000 或 id = 2001 的数据。

+

::: tip OR

+

WHERE 子句中使用的关键字,用来表示检索匹配任一给定条件的行。

+

:::

+

IN 操作符

IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。

+

IN 取 一组由逗号分隔、括在圆括号中的合法值。

+
1
2
-- IN
SELECT * FROM subways WHERE code IN("SUY|54d7ed78-86ac-7095","SUY|15c420a5-8ea4-9495");
+ +

image-20211108171648832

+

此 SELECT 语句检索 code 列里面符合 IN 操作符后面由逗号分隔的合法值,这些值必须括在圆括号中。

+

为什么要使用 IN 操作符?其优点如下。

+
    +
  • 在有很多合法选项时,IN 操作符的语法更清楚,更直观。
  • +
  • 在与其他 AND 和 OR 操作符组合使用 IN 时,求值顺序更容易管理。
  • +
  • IN 操作符一般比一组 OR 操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
  • +
  • IN 的最大优点是可以包含其他 SELECT 语句,能够更动态地建立 WHERE 子句。
  • +
+

NOT 操作符

WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定其后所跟的任何条件。

+

::: tip NOT

+

WHERE 子句中用来否定其后条件的关键字。

+

:::

+
1
2
-- NOT
SELECT * FROM subways WHERE area_subway_name NOT IN("郑州","上海") ORDER BY area_subway_name;
+ +

image-20211108172846172

+

返回 area_subway_name 不是 郑州和上海的数据,并进行了 area_subway_name 排序

+

用通配符进行过滤

这一章介绍什么是通配符、如何使用通配符以及怎样使用 LIKE 操作符 进行通配搜索,以便对数据进行复杂过滤。

+

LIKE 操作符进行模糊查询

前面介绍的所有操作符都是针对已知值进行过滤的。在我们的日常使用中肯定还有未知的,比如寻找姓李的同学有几个之类的。例如下面的例子。

+

查找姓王的学生

+
1
2
-- LINK
SELECT * FROM students WHERE sname LIKE "王%";
+ +

image-20211108201951329

+

上面的代码使用了通配符。

+

通配符本身实际上是 SQL 的 WHERE 子句中有特殊含义的字符,SQL 支持 几种通配符。为在搜索子句中使用通配符,必须使用 LIKE 操作符。LIKE 指示 DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进 行比较。

+

::: tip 通配符(wildcard)

+

用来匹配值的一部分的特殊字符。

+

:::

+

::: tip 搜索模式(search pattern)

+

由字面值、通配符或两者组合构成的搜索条件

+

:::

+

::: tip 谓词(predicate)

+

操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE 是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有 所了解,以免在 SQL 文献或手册中遇到此术语时不知所云

+

:::

+

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用 通配符搜索。

+

百分号(%)通配符

最常使用的通配符是百分号(%)。在搜索串中,% 表示任何字符出现任意次数。

+
1
2
-- LINK
SELECT * FROM students WHERE sname LIKE "王%";
+ +

以上代码查找了以开头的字段。

+

::: tip Access 通配符

+

如果使用的是 Microsoft Access,需要使用*而不是%。

+

:::

+

::: tip 说明:区分大小写

+

根据 DBMS 的不同及其配置,搜索可以是区分大小写的。如果区分大 小写,则 “A%” 与 “a%”是不一样的

+

:::

+

通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。

+
1
SELECT * FROM students WHERE class LIKE "%95033%";
+ +

搜索模式 “%95033%”表示匹配任何位置上包含文本 95033 的值,不论它之前或者之后出现什么字符。

+

::: warning 请注意 NULL

+

通配符%看起来像是可以匹配任何东西,但有个例外,这就是 NULL。 子句 WHERE name LIKE '%'不会匹配产品名称为 NULL 的行。

+

:::

+

下划线(_)通配符

另一个有用的通配符是下划线(_)。下划线的用途与 % 一样,但它只匹配 单个字符,而不是多个字符。

+

::: tip 说明:Access 通配符

+

如果使用的是 Microsoft Access,需要使用?而不是_。

+

:::

+
1
2
-- 下划线(_)通配符
SELECT * FROM subways WHERE id LIKE "__80";
+ +

image-20211108210409362

+

注意使用了两个下划线用来匹配所以是匹配前面任意两个字符后面以 80 结尾的数据。

+

可以与 % 通配符对比一下

+
1
SELECT * FROM subways WHERE id LIKE "%80";
+ +

image-20211108210430171

+

与%能匹配 0 个字符不同,_总是刚好匹配一个字符,不能多也不能少

+

使用通配符的技巧

正如所见,SQL 的通配符很有用。但这种功能是有代价的,即通配符搜 索一般比前面讨论的其他搜索要耗费更长的处理时间。这里给出一些使 用通配符时要记住的技巧。

+
    +
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用 其他操作符。
  • +
  • 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始 处。把通配符置于开始处,搜索起来是最慢的。
  • +
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
  • +
+

计算字段

存储在数据库表中的数据一般不是应用程序所需要的格式,下面举几个 例子。

+
    +
  • 需要显示公司名,同时还需要显示公司的地址,但这两个信息存储在 不同的表列中。
  • +
  • 城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打 印程序需要把它们作为一个有恰当格式的字段检索出来。
  • +
  • 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。
  • +
  • 物品订单表存储物品的价格和数量,不存储每个物品的总价格(用价 格乘以数量即可)。但为打印发票,需要物品的总价格。  需要根据表数据进行诸如总数、平均数的计算。
  • +
+

在上述每个例子中,存储在表中的数据都不是应用程序所需要的。我们 需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索 出数据,然后再在客户端应用程序中重新格式化。

+

这就是计算字段可以派上用场的地方了。与前几课介绍的列不同,计算 字段并不实际存在于数据库表中。计算字段是运行时在 SELECT 语句内 创建的。

+

::: tip 字段(field)

+

基本上与列(column)的意思相同,经常互换使用,不过数据库列一 般称为列,而术语字段通常与计算字段一起使用。

+

:::

+

需要特别注意,只有数据库知道 SELECT 语句中哪些列是实际的表列, 哪些列是计算字段。从客户端(如应用程序)来看,计算字段的数据与 其他列的数据的返回方式相同。

+

::: 提示:客户端与服务器的格式

+

在 SQL 语句内可完成的许多转换和格式化工作都可以直接在客户端 应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在 客户端中完成要快得多。

+

:::

+

拼接字段

我们直接来看案例

+
1
2
-- 拼接字段
SELECT CONCAT(sno,sname) from students;
+ +

image-20211108211632207

+

如果我们想去掉数据中的前后空格可以使用 TRIM()函数,同时还有 LTRIM( )去掉左空格和 RTIRM( )去掉右空格;

+
1
SELECT CONCAT(trim(sno),rtrim(sname)) from students;
+ +

使用别名

从前面的输出可以看到,SELECT 语句可以很好地拼接地址字段。但是, 这个新计算列的名字是什么呢?实际上它没有名字,它只是一个值。如 果仅在 SQL 查询工具中查看一下结果,这样没有什么不好。但是,一个 未命名的列不能用于客户端应用中,因为客户端没有办法引用它。
为了解决这个问题,SQL 支持列别名。别名(alias)是一个字段或值的 替换名。别名用 AS 关键字赋予。请看下面的 SELECT 语句:

+
1
2
-- 拼接字段
SELECT CONCAT(sno,sname) as noAndName from students;
+ +

image-20211108212307162

+

执行算术计算

计算字段的另一常见用途是对检索出的数据进行算术计算。

+

查看案例

+
1
2
-- 执行算术计算
SELECT *,sno*score as product FROM students;
+ +

image-20211109211920796

+

使用函数处理数据

这一章介绍什么是函数,DBMS 支持何种函数,以及如何使用这些函数; 还将讲解为什么 SQL 函数的使用可能会带来问题。

+

函数

与大多数其他计算机语言一样,SQL 也可以用函数来处理数据。函数一 般是在数据上执行的,为数据的转换和处理提供了方便。

+

之前我们见过的 trim() 就是一个函数。

+

使用函数

大多数 SQL 实现支持以下类型的函数。

+
    +
  • 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文 本函数。
  • +
  • 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的 数值函数。
  • +
  • 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期 之差,检查日期有效性)的日期和时间函数。
  • +
  • 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数。
  • +
+

::: danger 8.2

+

81 页 正在施工中….

+

:::

+

MySQL 常用函数

汇总数据

聚集函数

我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供了专 门的函数。使用这些函数,SQL 查询可用于检索数据,以便分析和报表 生成。这种类型的检索例子有:

+
    +
  • 确定表中行数(或者满足某个条件或包含某个特定值的行数);
  • +
  • 获得表中某些行的和;
  • +
  • 找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。
  • +
+

::: tip 聚集函数(aggregate function)

+

对某些行运行的函数,计算并返回一个值。

+

:::

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
函数说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和
+

::: tip 列值为 null

+

AVG()函数忽略列值为 NULL 的行。

+

如果指定列名,则 COUNT()函数会忽略指定列的值为空的行,但如果 COUNT()函数中用的是星号(*),则不忽略。

+

MAX()函数忽略列值为 NULL 的行。

+

MIN()函数忽略列值为 NULL 的行。

+

SUM()函数忽略列值为 NULL 的行。

+

:::

+

分组数据 GROUP

这一课介绍如何分组数据,以便汇总表内容的子集。这涉及两个新 SELECT 语句子句:GROUP BY 子句和 HAVING 子句。

+

数据分组

使用 SQL 聚集函数可以汇总数据。这样,我们就能够对行进行计数,计算和与平均数,不检索所有数据就获得大值和小值。

+

目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的数 据上进行的。例如下面的例子

+
1
SELECT area_subway_name,COUNT(area_subway_name) from subways WHERE area_subway_name = '郑州';
+ +

image-20211111171641909

+

如果我们要返回每个地铁名称出现的次数怎么办?总可能一个一个的去判断吧?

+

这时候就需要使用到分组了。使用分组可以将数据分为多个逻辑组, 对每个组进行聚集计算。

+

创建分组

1
SELECT area_subway_name,COUNT(area_subway_name) from subways GROUP BY area_subway_name;
+ +

image-20211111171830400

+

因为使用了 GROUP BY,就不必指定要计算和估值的每个组了。系统会自 动完成。GROUP BY 子句指示 DBMS 分组数据,然后对每个组而不是整 个结果集进行聚集。

+

在使用 GROUP BY 子句前,需要知道一些重要的规定。

+
    +
  • GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组。
  • +
  • 如果在 GROUP BY 子句中嵌套了分组,数据将在后指定的分组上进 行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以 不能从个别的列取回数据)。
  • +
  • GROUP BY 子句中列出的每一列都必须是检索列或有效的表达式(但 不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同的表达式。不能使用别名。
  • +
  • 大多数 SQL 实现不允许 GROUP BY 列带有长度可变的数据类型(如文 本或备注型字段)。
  • +
  • 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句 中给出。
  • +
  • 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。 如果列中有多行 NULL 值,它们将分为一组。
  • +
  • GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。
  • +
+

过滤分组

除了能用 GROUP BY 分组数据外,SQL 还允许过滤分组,规定包括哪些 分组,排除哪些分组。例如,上一节的例子中我们不想看见郑州的统计次数就可以这样写。

+
1
2
-- 过滤分组
SELECT area_subway_name,COUNT(area_subway_name) from subways GROUP BY area_subway_name having area_subway_name != '郑州';
+ +

image-20211111172340655

+

还记得上一节,”使用 GROUP BY 子句前的规定”吗?GROUP 子句 where 子句之后,order by 子句之前,而且因为 where 过滤指定的是而不是分组。事实上,where 没有分组的概念。

+

那么,不使用 WHERE 使用什么呢?SQL 为此提供了另一个子句,就是 HAVING 子句。HAVING 非常类似于 WHERE。事实上,目前为止所学过的 所有类型的 WHERE 子句都可以用 HAVING 来替代。唯一的差别是,WHERE 过滤行,而 HAVING 过滤分组。

+

::: tip 说明:HAVING 和 WHERE 的差别

+

这里有另一种理解方法,WHERE 在数据分组前进行过滤,HAVING 在数 据分组后进行过滤。这是一个重要的区别,WHERE 排除的行不包括在 分组中。这可能会改变计算值,从而影响 HAVING 子句中基于这些值 过滤掉的分组。

+

:::

+

::: tip 说明:使用 HAVING 和 WHERE

+

HAVING 与 WHERE 非常类似,如果不指定 GROUP BY,则大多数 DBMS 会同等对待它们。不过,你自己要能区分这一点。使用 HAVING 时应 该结合 GROUP BY 子句,而 WHERE 子句用于标准的行级过滤。

+

:::

+

分组和排序

GROUP BY 和 ORDER BY 经常完成相同的工作,但它们非常不同,理解这一点很重要。以下汇总了它们之间的差别。

+ + + + + + + + + + + + + + + + + + + +
ORDER BYGROUP BY
对产生的输出排序对行分组,但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用)只可能使用选择列或表达式列,而且必须使用每个选择列 表达式
不一定需要如果与聚集函数一起使用列(或表达式),则必须使用
+

第一项差别极为重要。我们经常发现,用 GROUP BY 分组的数据确实是以分组顺序输出的。但并不总是这样,这不是 SQL 规范所要求的。此外,即使特定的 DBMS 总是按给出的 GROUP BY 子句排序数据,用户也可能会要求以不同的顺序排序。就因为你以某种方式分组数据(获得特定的分组聚集值),并不表示你需要以相同的方式排序输出。 应该提供明确的 ORDER BY 子句,即使其效果等同于 GROUP BY 子句。

+

::: tip 不要忘记 ORDER BY

+

一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。这是保 证数据正确排序的唯一方法。千万不要仅依赖 GROUP BY 排序数据。

+

:::

+

为说明 GROUP BY 和 ORDER BY 的使用方法,来看一个例子。

+
1
2
-- 排序和分组
SELECT area_subway_name,COUNT(area_subway_name) from subways GROUP BY area_subway_name having area_subway_name != '郑州' ORDER BY id DESC;
+ +

image-20211111180341765

+

SELECT 子句顺序

在 SELECT 语句中 使用时必须遵循的次序,以下列出迄今为止所学过的子句。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
子句说明是否必须使用
SELECT要返回的列或表达式
FROM从中检索数据的表仅在从表选择数据时使用
WHERE行级过滤
GROUP BY分组说明仅在按组计算聚集时使用
HAVING组级过滤
ORDER BY输出排序顺序
+

使用子查询

SELECT 语句是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都 是简单查询,即从单个数据库表中检索数据的单条语句。

+

::: tip 查询(query)

+

任何 SQL 语句都是查询。但此术语一般指 SELECT 语句。

+

:::

+

SQL 还允许创建子查询(subquery),即嵌套在其他查询中的查询。为什 么要这样做呢?理解这个概念的最好方法是考察几个例子。

+

利用子查询进行过滤

比如 student 表中有没有记录 学生的 degree,但是 score 表中记录了,同时 student 表中的 sno 和 score 表中的 sno 有所对应,我们可以使用子查询来找到学生的 degree

+
1
2
-- 子查询
select sname from students WHERE sno IN (SELECT sno from score) ORDER BY sno;
+ +

image-20211112150009187

+

分析 : 这一条 SQL 语句可以看成 先执行 SELECT sno from score 返回了

+

image-20211112150707717

+

然后把值替换进了 select sname from students WHERE sno IN () IN 的里面。

+

联结表

这一章会介绍什么是联结,为什么使用联结,如何编写使用联结的 SELECT 语句。

+

联结

SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表。联结 是利用 SQL 的 SELECT 能执行的最重要的操作,很好地理解联结及其语 法是学习 SQL 的极为重要的部分。

+

在能够有效地使用联结前,必须了解关系表以及关系数据库设计的一些 基础知识。下面的介绍并不能涵盖这一主题的所有内容,但作为入门已经够了。

+

关系表

理解关系表,最好是来看个例子。

+

有一个包含产品目录的数据库表,其中每类物品占一行。对于每一种物 品,要存储的信息包括产品描述、价格,以及生产该产品的供应商。

+

现在有同一供应商生产的多种物品,那么在何处存储供应商名、地址、联系方法等供应商信息呢?将这些数据与产品信息分开存储的理由是:

+
    +
  • 同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品 重复此信息既浪费时间又浪费存储空间;
  • +
  • 如果供应商信息发生变化,例如供应商迁址或电话号码变动,只需修 改一次即可;
  • +
  • 如果有重复数据(即每种产品都存储供应商信息),则很难保证每次 输入该数据的方式都相同。不一致的数据在报表中就很难利用。
  • +
+

关键是,相同的数据出现多次决不是一件好事,这是关系数据库设计的 基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。各 表通过某些共同的值互相关联(所以才叫关系数据库)。

+

在这个例子中可建立两个表:一个存储供应商信息,另一个存储产品信 息。Vendors 表包含所有供应商信息,每个供应商占一行,具有唯一的 标识。此标识称为主键(primary key),可以是供应商 ID 或任何其他唯 一值。
Products 表只存储产品信息,除了存储供应商 ID(Vendors 表的主键) 外,它不存储其他有关供应商的信息。Vendors 表的主键将 Vendors 表 与 Products 表关联,利用供应商 ID 能从 Vendors 表中找出相应供应 商的详细信息。

+

这样做的好处是:

+
    +
  • 供应商信息不重复,不会浪费时间和空间;
  • +
  • 如果供应商信息变动,可以只更新 Vendors 表中的单个记录,相关表 中的数据不用改动;
  • +
  • 由于数据不重复,数据显然是一致的,使得处理数据和生成报表更简单。
  • +
+

总之,关系数据可以有效地存储,方便地处理。因此,关系数据库的可 伸缩性远比非关系数据库要好。

+

::: tip 可伸缩(scale)

+

能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序 称为可伸缩性好(scale well)。

+

:::

+

为什么使用联结

如前所述,将数据分解为多个表能更有效地存储,更方便地处理,并且 可伸缩性更好。但这些好处是有代价的。

+

如果数据存储在多个表中,怎样用一条 SELECT 语句就检索出数据呢?

+

答案是使用联结。简单说,联结是一种机制,用来在一条 SELECT 语句 中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组 输出,联结在运行时关联表中正确的行。

+

创建联结

创建联结非常简单,指定要联结的所有表以及关联它们的方式即可。请 看下面的例子:

+
1
2
-- 创建联结
SELECT students.sno,students.sname,score.degree FROM students,score WHERE students.sno = score.sno;
+ +

image-20211112155443946

+

我们来看这段代码。SELECT 语句与前面所有语句一样指定要检索的列。

+

这里最大的差别是所指定的两列(sno 和 sname)在一个 表中,而第三列(degree)在另一个表中。

+

现在来看 FROM 子句。与以前的 SELECT 语句不一样,这条语句的 FROM 子句列出了两个表:students 和 score。它们就是这条 SELECT 语句 联结的两个表的名字。这两个表用 WHERE 子句正确地联结,WHERE 子句 指示 DBMS 将 students 表中的 sno 与 score 表中的 sno 匹配起来。

+

我们注意到要匹配的两列指定为 students.sno 和 students.sno = score.snoscore.sno 这里需要这种完全限定列名,如果只给出 sno,DBMS 就不知道指的是哪一个了。

+

::: tip 警告:完全限定列名

+

就像前一课提到的,在引用的列可能出现歧义时,必须使用完全限定 列名(用一个句点分隔表名和列名)。如果引用一个没有用表名限制的 具有歧义的列名,大多数 DBMS 会返回错误。

+

:::

+

WHERE 子句的重要性

使用 WHERE 子句建立联结关系似乎有点奇怪,但实际上是有个很充分的 理由的。要记住,在一条 SELECT 语句中联结几个表时,相应的关系是 在运行中构造的。在数据库表的定义中没有指示 DBMS 如何对表进行联 结的内容。你必须自己做这件事情。在联结两个表时,实际要做的是将 第一个表中的每一行与第二个表中的每一行配对。WHERE 子句作为过滤 条件,只包含那些匹配给定条件(这里是联结条件)的行。没有 WHERE 子句,第一个表中的每一行将与第二个表中的每一行配对,而不管它们 逻辑上是否能配在一起。

+
1
2
-- WHERE 子句的重要性
SELECT students.sno,students.sname,score.degree FROM students,score;
+ +

111

+

::: tip 注意:不要忘了 WHERE 子句

+

要保证所有联结都有 WHERE 子句,否则 DBMS 将返回比想要的数据多 得多的数据。同理,要保证 WHERE 子句的正确性。不正确的过滤条件 会导致 DBMS 返回不正确的数据

+

:::

+

内联结 INNER JOIN

目前为止使用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)。其实,可以对这种联结使用稍微不同的语法,明确指定联结的类型。下面的 SELECT 语句返回与前面例子完全相同的数据:

+
1
2
-- 内连接
SELECT students.sno,students.sname,score.degree FROM students INNER JOIN score ON students.sno = score.sno;
+ +

image-20211112170705621

+

此语句中的 SELECT 与前面的 SELECT 语句相同,但 FROM 子句不同。这 里,两个表之间的关系是以 INNER JOIN 指定的部分 FROM 子句。在使用 这种语法时,联结条件用特定的 ON 子句而不是 WHERE 子句给出。传递 给 ON 的实际条件与传递给 WHERE 的相同。

+

联结多个表

SQL 不限制一条 SELECT 语句中可以联结的表的数目。创建联结的基本 规则也相同。首先列出所有表,然后定义表之间的关系。

+
1
SELECT prod_name, vend_name, prod_price, quantity FROM OrderItems, Products, Vendors WHERE Products.vend_id = Vendors.vend_id  AND OrderItems.prod_id = Products.prod_id  AND order_num = 20007;
+ +
1
2
3
SELECT cust_name, cust_contact FROM Customers WHERE cust_id IN
(SELECT cust_id FROM Orders WHERE order_num IN
(SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01'));
+ +
1
SELECT cust_name, cust_contact FROM Customers, Orders, OrderItems WHERE Customers.cust_id = Orders.cust_id  AND OrderItems.order_num = Orders.order_num  AND prod_id = 'RGAN01';
+ +

创建高级联结

本章讲解另外一些联结(包括它们的含义和使用方法),介绍如何使用表 别名,如何对被联结的表使用聚集函数。

+

使用表别名

之前介绍了如何使用别名引用被检索的表列。例如

+
1
SELECT CONCAT(sno,sname) as noAndName from students;
+ +

SQL 除了可以对列名和计算字段使用别名,还允许给表名起别名。这样 做有两个主要理由:

+
    +
  • 缩短 SQL 语句;
  • +
  • 允许在一条 SELECT 语句中多次使用相同的表。
  • +
+

请看下面的 SELECT 语句。它与前一课例子中所用的语句基本相同,但 改成了使用别名:

+
1
SELECT cust_name, cust_contact FROM Customers AS C, Orders AS O, OrderItems AS OI WHERE C.cust_id = O.cust_id  AND OI.order_num = O.order_num  AND prod_id = 'RGAN01';
+ +

可以看到,FROM 子句中的三个表全都有别名。Customers AS C 使用 C 作为 Customers 的别名,如此等等。这样,就可以使用省略的 C 而不用 全名 Customers。在这个例子中,表别名只用于 WHERE 子句。其实它不 仅能用于 WHERE 子句,还可以用于 SELECT 的列表、ORDER BY 子句以及 其他语句部分。

+

使用不同类型的联结

迄今为止,我们使用的只是内联结或等值联结的简单联结。现在来看三种 其他联结:自联结(self-join)、自然联结(natural join)和外联结(outer join)

+

自联结

如前所述,使用表别名的一个主要原因是能在一条 SELECT 语句中不止一次引用相同的表。下面举两个例子。

+
1
2
-- 自联结
SELECT * FROM students WHERE sname IN (SELECT sname FROM students WHERE ssex = "男");
+ +

image-20211112202305202

+
1
SELECT * FROM students WHERE sname = (SELECT sname FROM students WHERE birthday = "1998-09-01 00:00:00");
+ +

image-20211112202414314

+

::: tip 提示:用自联结而不用子查询

+

自联结通常作为外部语句,用来替代从相同表中检索数据的使用子查 询语句。虽然终的结果是相同的,但许多 DBMS 处理联结远比处理 子查询快得多。应该试一下两种方法,以确定哪一种的性能更好。

+

:::

+

自然联结

无论何时对表进行联结,应该至少有一列不止出现在一个表中(被联结的列)。标准的联结(前一课中介绍的内联结)返回所有数据,相同的列甚至多次出现。自然联结排除多次出现,使每一列只返回一次。

+

怎样完成这项工作呢?答案是,系统不完成这项工作,由你自己完成它。 自然联结要求你只能选择那些唯一的列,一般通过对一个表使用通配符 (SELECT *),而对其他表的列使用明确的子集来完成。

+

事实上,我们迄今为止建立的每个内联结都是自然联结,很可能永远都 不会用到不是自然联结的内联结。

+

外联结 OUTER JOIN

许多联结将一个表中的行与另一个表中的行相关联,但有时候需要包含没有关联行的那些行。

+
1
2
3
4
-- 内联结
SELECT DISTINCT sname FROM students INNER JOIN score ON students.sno = score.sno ORDER BY sname;
-- 外联结
SELECT DISTINCT sname FROM students LEFT OUTER JOIN score ON students.sno = score.sno ORDER BY sname;
+ +

这条 SELECT 语句使用了关键字 OUTER JOIN 来指定联结类型。但是,与内联结关联两个表中的行不同的是,外联结还包括没有关联行的行。在使用 OUTER JOIN 语法时,必须使用 RIGHT 或 LEFT 关键字指定包括其所有行的表 (RIGHT 指出的是 OUTER JOIN 右边的表,而 LEFT 指出的是 OUTER JOIN 左边的表)。

+

上面的例子使用 LEFT OUTER JOIN 从 FROM 子句左边的表 (students 表)中选择所有行。

+

为了从右边的表中选择所有行,需要使 用 RIGHT OUTER JOIN

+
1
2
-- 外联结 右
SELECT DISTINCT sname FROM students RIGHT OUTER JOIN score ON students.sno = score.sno ORDER BY sname;
+ +

组合查询 UNION

如何利用 UNION 操作符将多条 SELECT 语句组合成一个结 果集。

+

组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。 但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一 个查询结果集返回。这些组合查询通常称为并(union)或复合查询 (compound query)

+

主要有两种情况需要使用组合查询:

+
    +
  • 在一个查询中从不同的表返回结构数据;

    +
  • +
  • 对一个表执行多个查询,按一个查询返回数据

    +
  • +
+

创建组合查询

可用 UNION 操作符来组合数条 SQL 查询。利用 UNION,可给出多条 SELECT 语句,将它们的结果组合成一个结果集。

+

比如输出 匡明 的总分

+
1
2
-- 创建组合查询
SELECT sname,SUM(score.degree) AS 总分 FROM students INNER JOIN score ON students.sno = score.sno AND students.sname = "匡明" ORDER BY sname;
+ +

输出 王芳的总分

+
1
SELECT sname,SUM(score.degree) AS 总分 FROM students INNER JOIN score ON students.sno = score.sno AND students.sname = "王芳" ORDER BY sname;
+ +

接下来组合这两条语句

+
1
2
3
SELECT sname,SUM(score.degree) AS 总分 FROM students INNER JOIN score ON students.sno = score.sno AND students.sname = "匡明"
UNION
SELECT sname,SUM(score.degree) AS 总分 FROM students INNER JOIN score ON students.sno = score.sno AND students.sname = "王芳" ORDER BY sname
+ +

image-20211117205630468

+

注意 order by 子句需要在最后的位置,所以去掉了第一段代码的 order by 子句

+

使用 UNION 可能比使用 WHERE 子句更为复杂。但对于较复杂的过滤条件,或者从多个表(而不是一个表)中检索数据的 情形,使用 UNION 可能会使处理更简单。

+

UNION 规则

    +
  • UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键 字 UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION 关键字)。
  • +
  • UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过, 各个列不需要以相同的次序列出)。
  • +
  • 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含 转换的类型(例如,不同的数值类型或不同的日期类型)。
  • +
+

包含或取消重复的行

UNION 默认会去掉重复的行,如果想显示重复的行可以使用

+
1
UNION ALL
+ +

插入数据 INSERT

介绍如何利用 SQL 的 INSERT 语句将数据插入表中。

+

数据插入

INSERT 用来将行插入(或添加)到数据库表。插入有几种 方式:

+
    +
  • 插入完整的行;
  • +
  • 插入行的一部分;
  • +
  • 插入某些查询的结果。
  • +
+

插入完整的行

1
2
-- 插入完整行
INSERT INTO students VALUES(110,"张三","男",NOW(),95033,100);
+ +

这段代码将一个新学生插入到 students 表中。。存储到表中每一列的数 据在 VALUES 子句中给出,必须给每一列提供一个值。如果某列没有值则应该使用 NULL 。

+

上面的 SQL 语 句高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。即 使可以得到这种次序信息,也不能保证各列在下一次表结构变动后保持完全相同的次序。因此,编写依赖于特定列次序的 SQL 语句是很不安全 的,这样做迟早会出问题。

+

更安全清晰的方法如下

+
1
INSERT INTO students(sno,sname,ssex,birthday,class,score) VALUES(110,"张三","男",NOW(),95033,100);
+ +

这个例子与前一个 INSERT 语句的工作完全相同,但在表名后的括号里 明确给出了列名。在插入行时,DBMS 将用 VALUES 列表中的相应值填 入列表中的对应项。

+

参考资料

SQL 必知必会第四版

+

SQL 基础教程第二版

+

Mysql 官方文档

+

SQL 教程 - 廖雪峰的官方网站

+

练习数据

练习数据 subways 下载

+

148

+

单词

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
select选择,挑选
单词意义
from从…起,选择哪个表
distinct不同的
limit限制
offset偏离
order顺序
between在…中间
having有…拥有;和 group by 配合使用
group
subquery子查询
INNER内部的
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
avatar
正因你我生于繁华,弥足之花方显珍贵
文章目录
  1. 1. 了解 Sql
    1. 1.1. 使用的工具
    2. 1.2. 数据库
    3. 1.3.
    4. 1.4. 列和数据类型
    5. 1.5.
    6. 1.6. 主键(primary key)
    7. 1.7. 什么是 SQL
  2. 2. 检索数据(SELECT)
    1. 2.1. SELECT 语句
    2. 2.2. 检索单列
    3. 2.3. 检索多列
    4. 2.4. 检索所有列
    5. 2.5. 检索不重复的值
    6. 2.6. 限制结果
    7. 2.7. 注释
  3. 3. 排序检索数据(ORDER BY )
    1. 3.1. 按多个列排序
    2. 3.2. 按列位置排序
    3. 3.3. 指定排序方向 (升序、降序)
  4. 4. 过滤数据(WHERE)
    1. 4.1. 使用 WHERE 子句
    2. 4.2. WHERE 子句操作符
      1. 4.2.1. 算术运算符
      2. 4.2.2. 比较运算符
      3. 4.2.3. 逻辑运算符
    3. 4.3. 范围值检查
    4. 4.4. 空值检查
  5. 5. 高级数据过滤
    1. 5.1. 组合 WHERE 子句
      1. 5.1.1. AND 操作符
      2. 5.1.2. OR 操作符
    2. 5.2. IN 操作符
    3. 5.3. NOT 操作符
  6. 6. 用通配符进行过滤
    1. 6.1. LIKE 操作符进行模糊查询
    2. 6.2. 百分号(%)通配符
    3. 6.3. 下划线(_)通配符
    4. 6.4. 使用通配符的技巧
  7. 7. 计算字段
    1. 7.1. 拼接字段
    2. 7.2. 使用别名
    3. 7.3. 执行算术计算
  8. 8. 使用函数处理数据
    1. 8.1. 函数
    2. 8.2. 使用函数
    3. 8.3. MySQL 常用函数
  9. 9. 汇总数据
    1. 9.1. 聚集函数
  10. 10. 分组数据 GROUP
    1. 10.1. 数据分组
    2. 10.2. 创建分组
    3. 10.3. 过滤分组
    4. 10.4. 分组和排序
    5. 10.5. SELECT 子句顺序
  11. 11. 使用子查询
    1. 11.1. 利用子查询进行过滤
  12. 12. 联结表
    1. 12.1. 联结
    2. 12.2. 关系表
    3. 12.3. 为什么使用联结
    4. 12.4. 创建联结
    5. 12.5. WHERE 子句的重要性
    6. 12.6. 内联结 INNER JOIN
    7. 12.7. 联结多个表
  13. 13. 创建高级联结
    1. 13.1. 使用表别名
    2. 13.2. 使用不同类型的联结
      1. 13.2.1. 自联结
      2. 13.2.2. 自然联结
      3. 13.2.3. 外联结 OUTER JOIN
  14. 14. 组合查询 UNION
    1. 14.1. 组合查询
    2. 14.2. 创建组合查询
    3. 14.3. UNION 规则
    4. 14.4. 包含或取消重复的行
  15. 15. 插入数据 INSERT
    1. 15.1. 数据插入
    2. 15.2. 插入完整的行
  16. 16. 参考资料
  17. 17. 练习数据
  18. 18. 单词
最近发布
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/05/01/\345\220\216\347\253\257/03-MySQL\350\270\251\345\235\221/index.html" "b/2021/05/01/\345\220\216\347\253\257/03-MySQL\350\270\251\345\235\221/index.html" new file mode 100644 index 0000000000..5cfadae7a7 --- /dev/null +++ "b/2021/05/01/\345\220\216\347\253\257/03-MySQL\350\270\251\345\235\221/index.html" @@ -0,0 +1,356 @@ +MySQL踩坑记录 | WaterBoat的博客
加载头像

MySQL踩坑记录

MySQL踩坑记录

GROUP_CONCAT 返回长度限制

1
2
3
# 默认是 1024 字符长度增长长度
SET SESSION group_concat_max_len = 10240;
SET GLOBAL group_concat_max_len = 10240;
+ +

GROUP_CONCAT 对于是 NULL 的数据是不会返回的所以记得 IFNOLL

+
1
CONCAT('"shengping":"', IFNULL(wp.shengping,''), '"}')),
+ +

33 个概念

+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/05/02/\345\211\215\347\253\257/JavaScript/03-\345\256\236\347\216\260\351\230\262\346\212\226\345\222\214\350\212\202\346\265\201/index.html" "b/2021/05/02/\345\211\215\347\253\257/JavaScript/03-\345\256\236\347\216\260\351\230\262\346\212\226\345\222\214\350\212\202\346\265\201/index.html" new file mode 100644 index 0000000000..3a3a7d6cc8 --- /dev/null +++ "b/2021/05/02/\345\211\215\347\253\257/JavaScript/03-\345\256\236\347\216\260\351\230\262\346\212\226\345\222\214\350\212\202\346\265\201/index.html" @@ -0,0 +1,355 @@ +实现防抖和节流 | WaterBoat的博客
加载头像

实现防抖和节流

实现防抖和节流

防抖

所谓防抖,就是指触发事件后 n 秒后才执行函数,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function debounce(fn, daytime) {
let timer;
clearInterval(timer);
timer = setTimeout(() => {
fn();
}, daytime);
}

function fn() {
console.log("fn");
}

let result = debounce(fn, 10);
console.log(result);
+ +

节流

所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function throttle(fn, dalay) {
let start = 0;
return () => {
let now = new Date().getTime();
if (now - start > dalay) {
fn();
start = now;
}
};
}

function fn() {
console.log(1);
}
document.addEventListener("scroll", throttle(fn, 2000));
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git "a/2021/05/07/\345\211\215\347\253\257/React/01-React\347\254\224\350\256\260/index.html" "b/2021/05/07/\345\211\215\347\253\257/React/01-React\347\254\224\350\256\260/index.html" new file mode 100644 index 0000000000..e6cf66ab69 --- /dev/null +++ "b/2021/05/07/\345\211\215\347\253\257/React/01-React\347\254\224\350\256\260/index.html" @@ -0,0 +1,780 @@ +React 笔记 | WaterBoat的博客
加载头像

React 笔记

React 笔记

[[toc]]

+

React 介绍

用于构建用户界面的 JavaScript 库

+

声明式

React 使创建交互式 UI 变得轻而易举。为你应用的每一个状态设计简洁的视图,当数据改变时 React 能有效地更新并正确地渲染组件。

+

以声明式编写 UI,可以让你的代码更加可靠,且方便调试。

+

组件化

创建拥有各自状态的组件,再由这些组件构成更加复杂的 UI。

+

组件逻辑使用 JavaScript 编写而非模板,因此你可以轻松地在应用中传递数据,并使得状态与 DOM 分离。

+

一次学习,随处编写

无论你现在正在使用什么技术栈,你都可以随时引入 React 来开发新特性,而不需要重写现有代码。

+

React 还可以使用 Node 进行服务器渲染,或使用 React Native 开发原生移动应用。

+

React 初体验

使用 React 的 2 种方式

1.自行配置
1.1 https://zh-hans.reactjs.org/docs/add-react-to-a-website.html

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>
<script src="lib/babel.min.js"></script>

<!-- type 一定要写成 babel 让浏览器知道需要 babel 转义-->
<script type="text/babel">
let VDOM = <h1>hello,React</h1>;
ReactDOM.render(VDOM, document.getElementById("root"));
</script>
</body>
</html>
+ +

2.通过脚手架自动配置
2.1 https://zh-hans.reactjs.org/docs/create-a-new-react-app.html

+

虚拟 DOM 和真实 DOM

1.虚拟 DOM 是相对于浏览器所渲染出来的真实 DOM 的 2.虚拟 DOM 就是使用 JS 对象来表示页面上的真实 DOM

+

如何创建虚拟 DOM

createElement 通过 React.createElement()方法
该方法接收三个参数:
第一个参数: 需要创建的元素类型或组件
第二个参数: 被创建出来的元素拥有的属性
第三个参数: 被创建出来的元素拥有的内容(可以是多个)
https://zh-hans.reactjs.org/docs/react-api.html#

+

如何通过虚拟 DOM 渲染真实 DOM 到浏览器

通过 ReactDOM.render()方法
该方法接收三个参数
第一个参数: 被渲染的虚拟 DOM
第二个参数: 要渲染到哪个元素中
第三个参数: 渲染或更新完成后的回调函数
https://zh-hans.reactjs.org/docs/react-dom.html#render

+

render 方法的注意点

多次渲染,后渲染会覆盖先渲染的
render 方法一次只能渲染一个元素/组件

+

createElement 方法注意点

可以添加 3 个以上参数,后续参数都会作为当前创建元素内容处理

+

案例

{14}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>

<script type="text/javascript">
// 创建虚拟 DOM
let VDOM = React.createElement("h1", { id: "title" }, "hello,React");
// 渲染虚拟 DOM
ReactDOM.render(VDOM, document.getElementById("root"));
</script>
</body>
</html>
+ +

image-20210507154406002

+

React 中的 JSX 语法

为什么需要 JSX

如果结构比较简单还好,但是如果结构比较复杂,就比较难以下手
所以大牛们就发明了 JSX, 专门用来编写 React 中的页面结构

+

举一个简单的例子

+

需求 : 使用  React 虚拟 DOM 创建一个 div 里面包含一个 span 里面包含一个 a 标签,a 标签里面写上 hello,React

+

如果用 js 的写法

{14,21-29}
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
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>

<script type="text/javascript">
// 创建虚拟 DOM
// let VDOM = React.createElement(
// "h1",
// { id: "title" },
// "<span><a>hello,React</a></span>" // 我们发现直接写span是无效的
// );
let VDOM = React.createElement(
"h1",
{ id: "title" },
React.createElement(
"span",
null,
React.createElement("a", null, "hello,React"), // 如果还需要写更多的子标签那么就会启动无限套娃技术相当不友好
),
);
// 渲染虚拟 DOM
ReactDOM.render(VDOM, document.getElementById("root"));
</script>
</body>
</html>
+ +

使用 JSX 写法

{14,16-22}
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
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>
<script src="lib/babel.min.js"></script>
<script type="text/babel">
// 创建虚拟 DOM
let VDOM = // 这样就避免了难看的无限套娃,方便理解
(
<h1>
<span>
<a>hello,React</a>
</span>
</h1>
);

// 渲染虚拟 DOM
ReactDOM.render(VDOM, document.getElementById("root"));
</script>
</body>
</html>
+ +

JSX 是什么?

JSX 是一个看起来很像 XML 的 JavaScript 语法扩展

+

为什么要使用 JSX

使用 JSX 使得我们在 React 中编写页面结构更为简单、灵活
JSX 是类型安全的, 在编译过程中就能发现错误
JSX 执行更快, 因为它在编译为 JavaScript 代码后进行优化
防止 XSS 注入攻击

+

https://zh-hans.reactjs.org/docs/introducing-jsx.html

+

JSX 的本质

浏览器只认识 JS 不认识 JSX,所以我们编写的 JSX 代码是无法在浏览器中执行的
为了解决这个问题,我们需要使用 babel 将 JSX 转换成 JS,也就是转换成 React.createElement()

+

https://zh-hans.reactjs.org/docs/react-without-jsx.html
https://babeljs.io/repl/

+

如何将 JSX 转换成 JS?

导入 babel.js
在 script 标签上添加 type=”text/babel”

+

JSX 中使用表达式

在 JSX 中只要看到 { } 就会当做 JS 解析(执行里面的 JS 代码)
所以无论是绑定属性,还是绑定类名,还是绑定样式, 只需要将字符串改为{}
然后再通过 JS 动态获取, 动态绑定即可
注意:{} 中,不能出现语句!!! if() {} / for() {} / switch…

+

以下嵌入的内容不会被显示出来 [] true false null undefined
如果想显示上面的内容,那么就必须转换成字符串,但是对于空数组而言,即使转换成字符串,也不能显示

+
1
2
3
4
5
6
7
8
// const name = 'jack'
// const h1 = <div>{name}</div>
// const h1 = <div>{19}</div>
// const h1 = <div>{true + ''}</div>
// const h1 = <div>{1 + 3 + 7 + 9}</div>
// const h1 = <div>{['red', 'yellogreen', 'pink']}</div>
// const h1 = <div>{['red', 'yellogreen', 'pink'].join('')}</div>
// const h1 = <div>{Math.random() > 0.5 ? '大于' : '小于等于'}</div>
+ +

JSX 使用条件渲染

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
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>
<script src="lib/babel.min.js"></script>
<script type="text/babel">
function VDOM() {
flag = false;
if (flag) {
return <h1>我是flag=true</h1>;
} else {
return <h1>我是flag=false</h1>;
}
}

// 渲染虚拟 DOM
ReactDOM.render(<VDOM />, document.getElementById("root"));
</script>
</body>
</html>
+ +

JSX 中的列表渲染

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
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>

<body>
<div id="root"></div>
<!-- 注意引用顺序 -->
<script src="lib/react.development.js"></script>
<script src="lib/react-dom.development.js"></script>
<script src="lib/babel.min.js"></script>
<script type="text/babel">
function VDOM() {
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) => (
<li key={number}>{number}</li>
));
return listItems;
}

// 渲染虚拟 DOM
ReactDOM.render(<VDOM />, document.getElementById("root"));
</script>
</body>
</html>
+ +

key

key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识

+

一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串

+

JSX 中的绑定属性

1.JSX 绑定内容
在 JSX 中只要看到{} 就会当作 js 解析(执行里面的 js 代码)
所以无论是绑定属性,还是绑定类名,还是绑定样式,只要将字符串改为{}
然后再通过 JS 动态获取,动态绑定即可

+

2.绑定普通属性

+
1
2
<p title="我是标题">我是段落</p>
<p title="{message}">我是段落</p>
+ +

3.绑定类名(className)
由于 JSX 本质是转换成 JS 代码, 而在 JS 中 class 有特殊含义, 所以不能使用
同理可证, 但凡是属性名称是 JS 关键字的都不能直接使用

+

4.绑定样式(style)
由于样式是键值对形式的, 所以在 JSX 中如果想要动态绑定样式
必须将样式放到一个对象中, 并且所有以-连接的样式名称都要转换成驼峰命名

+
1
<p style={{ color: "red", fontSize: "50px" }}>绑定样式</p>
+ +

JSX 语法总结

jsx 语法规则

1.定义虚拟 DOM 时,不要写引号。

+

2.标签中混入 JS 表达式时要用{}。

+

3.样式的类名指定不要用 class,要用 className。

+

4.内联样式,要用 style={ { key:value } }的形式去写。

+

5.只有一个根标签

+

6.标签必须闭合

+

7.标签首字母

+

(1).若小写字母开头,则将该标签转为 html 中同名元素,若 html 中无该标签对应的同名元素,则报错。

+

(2).若大写字母开头,react 就去渲染对应的组件,若组件没有定义,则报错。

+

区分:【js 语句(代码)】与【js 表达式】

1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方

+

下面这些都是表达式:

+

(1). a

+

(2). a+b

+

(3). demo(1)

+

(4). arr.map()

+

(5). function test () {}

+

2.语句(代码):

+

下面这些都是语句(代码):

+

(1).if(){}

+

(2).for(){}

+

(3).switch(){case:xxxx}

+

受控组件

在 HTML 中,表单元素(如<input><textarea><select>)之类的表单元素通常自己维护 state,并根据用户输入进行更新。

+

对于受控组件来说,输入的值始终由 React 的 state 驱动。

+

非受控组件

说明:对于某一个表单元素,借助于 ref,使用原生 DOM 方式来获取表单元素值的这样的元素叫做非受控组件
ref 的作用:获取 DOM 或组件

+
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
import React from "react";

class Refcom extends React.Component {
constructor() {
super();
// 通过 React.createRef 创建 ref 对象
this.txt = React.createRef();
}

fn = () => {
// 输出 ref 对象
console.log(this.txt);
};
render() {
return (
<React.Fragment>
<div style={{ background: "pink", marginBottom: "20px" }}>
<h1>ref 获取 node</h1>
<input
type="text"
/* 绑定 ref */
ref={this.txt}
/* 点击输出 ref 对象 */
onClick={this.fn}
placeholder="点击我"
/>
</div>
</React.Fragment>
);
}
}

export default Refcom;
+ +

image-20210510201119630

+

获取 Dom 元素

React 中通过 ref 获取 Dom 元素

+

何时使用 Refs

下面是几个适合使用 refs 的情况:

+
    +
  • 管理焦点,文本选择或媒体播放。
  • +
  • 触发强制动画。
  • +
  • 集成第三方 DOM 库。
  • +
+

React 会在组件挂载时给 current 属性传入 DOM 元素,并在组件卸载时传入 null 值。ref 会在 componentDidMountcomponentDidUpdate 生命周期钩子触发前更新。

+

一个简单的使用案例

+
1
2
3
4
5
6
7
8
9
10
11
12
function App() {
let divInput = useRef();
// class 组件使用 createRef() 创建
const getDivRef = () => {
console.log(divInput);
};
return (
<div ref={divInput}>
<button onClick={getDivRef}>点击获取 ref</button>
</div>
);
}
+ +

Refs 转发

为什么要转发?我们先来看一个需求.

+
    +
  1. 定义一个组件 Father,一个组件 Son.
  2. +
  3. 在 Son 组件里面定义一个 input 和 button,点击 button 会出现 input 里面会出现 Hello (通过操作 Dom 的方式).
  4. +
  5. 在 Father 组件里面定义一个 button 操作 Son 里面的 input 出现 Hello.
  6. +
+

步骤一 : 实现子组件点击安装 input 出现 Hello

+
{20,24}
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
import React, { forwardRef, useRef } from "react";
const ForwardRef = () => {
return (
<div>
<Father></Father>
</div>
);
};
const Father = () => {
return (
<div>
<button>我是 Father </button>
<Son></Son>
</div>
);
};
const Son = () => {
let inputRef = useRef();
const changeInputValue = () => {
inputRef.current.value = "Hello";
};
return (
<div>
<input type="text" ref={inputRef} />
<button onClick={changeInputValue}>我是 Son </button>
</div>
);
};

export default ForwardRef;
+ +

步骤二 : 实现父组件点击安装 input 出现 Hello

+
{10,15}
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
import React, { forwardRef, useRef } from "react";
const ForwardRef = () => {
return (
<div>
<Father></Father>
</div>
);
};
const Father = () => {
let inputRef = useRef();
return (
<div>
<button>我是 Father </button>
{/* 报错:Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()? */}
<Son ref={inputRef}></Son>
</div>
);
};
const Son = () => {
let inputRef = useRef();
const changeInputValue = () => {
inputRef.current.value = "Hello";
};
return (
<div>
<input type="text" ref={inputRef} />
<button onClick={changeInputValue}>我是 Son </button>
</div>
);
};

export default ForwardRef;
+ +

我们可能会想当然的直接给 Son 组件添加 ref 但是 React 会报错,此时就需要使用 Refs 转发,使用的 APi 为 React.forwardRef

+
{10-13,23-25}
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
import React, { forwardRef, useRef } from "react";
const ForwardRef = () => {
return (
<div>
<Father></Father>
</div>
);
};
const Father = () => {
let inputRef = useRef();
const changeInputValue = () => {
inputRef.current.value = "Hello";
};
return (
<div>
<button onClick={changeInputValue}>我是 Father </button>
<Son ref={inputRef}></Son>
</div>
);
};
const Son = forwardRef((props, ref) => {
// let inputRef = useRef();
const changeInputValue = () => {
ref.current.value = "Hello";
};
return (
<div>
<input type="text" ref={ref} />
<button onClick={changeInputValue}>我是 Son </button>
</div>
);
});

export default ForwardRef;
+ +

组件

    +
  • 可以将 UI 切分成一些独立的、可复用的部件,这样你就只需专注于构建每一个单独的部件
  • +
  • 组件从概念上类似于 JavaScript 函数。它接受任意的入参(即 “props”),并返回用于描述页面展示内容的 React 元素
  • +
+

组件的渲染

    +
  • React 元素不但可以是 DOM 标签,还可以是用户自定义的组件
  • +
  • 当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)转换为单个对象传递给组件,这个对象被称之为 props
  • +
  • 组件名称必须以大写字母开头
  • +
  • 组件必须在使用的时候定义或引用它
  • +
  • 组件的返回值只能有一个根元素
  • +
+

定义函数组件

1
2
3
4
5
import React from "react";

export default function Function() {
return <div>这是函数组件</div>;
}
+ +

定义类组件

1
2
3
4
5
6
7
import React, { Component } from "react";

export default class Class extends Component {
render() {
return <div>这是类组件</div>;
}
}
+ +

状态 state

    +
  • 组件的数据来源有两个地方,分别是属性对象和状态对象
  • +
  • 属性是父组件传递过来的(默认属性,属性校验)
  • +
  • 状态是自己内部的,改变状态唯一的方式就是setState
  • +
  • 属性和状态的变化都会影响视图更新
  • +
+
{13}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import React, { Component } from "react";

export default class State extends Component {
state = {
msg: "你好",
};
render() {
return (
<div>
<div>{this.state.msg}</div>
<button
onClick={() =>
// 状态是自己内部的,改变状态唯一的方式就是`setState`
this.setState({
msg: "我被更新了",
})
}
>
点我更新数据
</button>
</div>
);
}
}
+ +

State 的更新可能是异步的

    +
  • 出于性能考虑,React 可能会把多个 setState() 调用合并成一个调用
  • +
  • 因为 this.props 和 this.state 可能会异步更新,所以你不要依赖他们的值来更新下一个状态
  • +
  • 可以让 setState() 接收一个函数而不是一个对象。这个函数用上一个 state 作为第一个参数
  • +
+
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
import React, { Component } from "react";
// 实现累加点击按钮数字加2
export default class AsyncState extends Component {
state = {
conut: 0,
};
update = () => {
this.setState({
conut: this.state.conut + 1,
});
this.setState({
conut: this.state.conut + 1,
});
console.log("AsyncState.jsx conut 的值是--", this.state.conut);
};
update2 = () => {
this.setState((state) => {
return {
conut: state.conut + 1,
};
});
this.setState((state) => {
return {
conut: state.conut + 1,
};
});
console.log("AsyncState.jsx conut 的值是--", this.state.conut);
};
render() {
return (
<div>
<h1>{this.state.conut}</h1>
<span>请看控制器</span>
<button onClick={this.update}>点我累加</button>
<button onClick={this.update2}>点我累加2</button>
</div>
);
}
}
+ +

事件处理

    +
  • React 事件的命名采用小驼峰式(camelCase),而不是纯小写。
  • +
  • 使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串
  • +
  • 你不能通过返回 false 的方式阻止默认行为。你必须显式的使用preventDefault
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import React, { Component } from "react";

export default class HandlingEvents extends Component {
state = {
msg: "1",
};
test = (e) => {
e.preventDefault();
console.log(e);
};
render() {
return (
<div>
<h1>事件处理</h1>
<a href="//www.baidu.com" onClick={(e) => this.test(e)}>
阻止默认行为
</a>
<button onClick={(e) => this.test(e)}>点击</button>
</div>
);
}
}
+ +

this

你必须谨慎对待 JSX 回调函数中的 this,可以使用:

+
    +
  • 公共属性(箭头函数)
  • +
  • 匿名函数
  • +
  • bind 进行绑定
  • +
+
{18-20}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React, { Component } from "react";

export default class HandlingEvents extends Component {
state = {
msg: "1",
};
test = (e) => {
e.preventDefault();
console.log(e);
};
render() {
return (
<div>
<h1>事件处理</h1>
<a href="//www.baidu.com" onClick={(e) => this.test(e)}>
阻止默认行为
</a>
<button onClick={(e) => this.test(e)}>箭头函数点击</button>
<button onClick={this.test}>普通调用函数点击</button>
<button onClick={this.test.bind(this)}>bind点击</button>
</div>
);
}
+ +

组件通信

父子通信-class 组件

    +
  1. 在 class 中的 state 定义变量
  2. +
  3. 在子组件的标签上面写入 key=value 的形式
  4. +
  5. 子组件中通过 this.props.key 获取值
  6. +
+

父子通信-function 组件

    +
  1. 在 class 中的 state 定义变量
  2. +
  3. 在子组件的标签上面写入 key=value 的形式
  4. +
  5. 在函数组件的形参位置写上 props
  6. +
  7. 通过 props.key 获取父组件传过来的值
  8. +
+

父子传参案例

    +
  • Father
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import React from "react";
import "./index.css";
import { Soncom, Soncom2 } from "../Soncom/index";
class Fathercom extends React.Component {
state = {
name: "刘德华",
};
render() {
return (
<div className="father">
<h1>父子传参</h1>
{/* class 子组件 */}
<Soncom cname={this.state.name}></Soncom>
{/* function 子组件 */}
<Soncom2 cname="张学友"></Soncom2>
</div>
);
}
}

export default Fathercom;
+ +
    +
  • Son
  • +
+
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
import React from "react";
import "./index.css";
export class Soncom extends React.Component {
// 设置 class 子组件的参数的默认值
static defaultProps = {
age: 90,
};
render() {
return (
<div className="son">
<h1>子组件</h1>
<div>class 子组件传参</div>
<span>
传递的参数-----{this.props.cname}年龄{this.props.age}
</span>
</div>
);
}
}

export const Soncom2 = (props) => {
const fn = () => {
console.dir(Soncom2);
};

return (
<div className="son2">
<h1>子组件</h1>
<div>function 子组件传参</div>
<span>
传递的参数----{props.cname}年龄{props.age}
</span>
<button onClick={fn}>测试</button>
</div>
);
};
// 设置 function 子组件的参数的默认值
Soncom2.defaultProps = {
age: 10,
};
// export default Soncom
+ +

image-20210510202129212

+

子父传参

    +
  1. 父组件里面定义一个函数 fn
  2. +
  3. 在子组件的标签上面写入 key=fn 的形式
  4. +
  5. 子组件里面定义一个函数 fns
  6. +
  7. 子组件调用 fns 方法,方法体内通过 this.props.key(传入的参数) 调用父组件的方法,完成传参
  8. +
+
    +
  • Father
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React from "react";
import "./index.css";
import { Soncom } from "../Soncom/index";
class Fathercom extends React.Component {
state = {
name: "刘德华",
};

Fatherfn(age) {
console.log(age);
}

render() {
return (
<div className="father">
{/* class 子组件 */}
<Soncom cname={this.state.name} Fatherfn={this.Fatherfn}></Soncom>
</div>
);
}
}

export default Fathercom;
+ +
    +
  • son
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import React from "react";
import "./index.css";
export class Soncom extends React.Component {
// 设置 class 子组件的参数的默认值
static defaultProps = {
age: 90,
};
Sonfn = () => {
this.props.Fatherfn("son子里面的" + this.props.age);
};
render() {
return (
<div className="son">
<h1>子组件</h1>
<div>class 子组件传参</div>
<span>
传递的参数-----{this.props.cname}年龄{this.props.age}
</span>
<button onClick={this.Sonfn}>子父传参</button>
</div>
);
}
}
// export default Soncom
+ +

组件的 props 的数据类型的限制

    +
  • 通过 propTypes
  • +
  • npm install prop-types
  • +
  • 函数组件类组件
  • +
+
1
2
3
4
5
class Person {
static propTypes = {
son: propTypes.string,
};
}
+ +

Context(上下文)

    +
  • 在某些场景下,你想在整个组件树中传递数据,但却不想手动地在每一层传递属性。你可以直接在 React 中使用强大的contextAPI 解决上述问题
  • +
  • 在一个典型的 React 应用中,数据是通过 props 属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI 主题),这些属性是应用程序中许多组件都需要的。Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props
  • +
+

contextapi

+
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
import React, { Component } from "react";

let ContextMsg = React.createContext("你好");
export default class Context extends Component {
render() {
return (
<ContextMsg.Consumer>
{(value) => (
<div>
<h1>{value}</h1>
<Son msg={value}></Son>
</div>
)}
</ContextMsg.Consumer>
);
}
}

function Son(props) {
return (
<div>
<h1>子组件</h1>
<span>{props.msg}</span>
</div>
);
}
+ +

组件的生命周期

生命周期演示网址)

+

image-20210517181121093

+

什么是生命周期

    +
  • 组件的生命周期:组件从被创建到挂载到页面中运行,再到组件不用时卸载的过程
  • +
  • 意义:组件的生命周期有助于理解组件的运行方式、完成更复杂的组件功能、分析组件错误原因等
  • +
  • 生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数。
  • +
  • 钩子函数的作用:为开发人员在不同阶段操作组件提供了时机。
  • +
  • 只有 类组件 才有生命周期。
  • +
+

创建时(挂载阶段)

执行时机:组件创建时(页面加载时)
执行顺序: constructor() –> render() –> componentDidMount
函数的作用:
constructor()函数: 创建组件时最先执行 作用是: 1.初始化 state 2.为事件处理程序绑定 this
render()函数: 每次组件渲染都会触发 作用: 渲染 UI(注意: 不能调用 setState())
componentDidMount 组件挂载(完成 DOM 渲染)后, 作用: 1.发送网络请求 2.DOM 操作

+

更新时(更新阶段)

执行时机: 1.setState() 2.forceUpdate() 3.组件接收到新的 props
说明: 以上三者任意一种变化,组件就会重新渲染
执行顺序: render() –> componentDidUpdate()
函数的作用:
render: 每次组件渲染都会触发 作用:渲染 UI(与挂载阶段是同一 render)
componentDidUpdate: 组件更新(完成 DOM 渲染)后,作用: 1.发送网络请求 2.DOM 操作 注意: 如果要 setState()必须放在一个 if 条件中

+

卸载时(卸载阶段)

执行时机:组件从页面中消失
函数的作用: componentWillUnmount 当组件卸载(从页面中消失)时触发 作用:执行清理工作(比如:清理定时器等)

+

shouldComponentUpdate

作用 : 当指定的值发生变化的时候才更新值

+
    +
  • 当一个组件的 props 或 state 变更,React 会将最新返回的元素与之前渲染的元素进行对比,以此决定是否有必要更新真实的 DOM,当它们不相同时 React 会更新该 DOM
  • +
  • 如果渲染的组件非常多时可以通过覆盖生命周期方法 shouldComponentUpdate 来进行优化
  • +
  • shouldComponentUpdate 方法会在重新渲染前被触发。其默认实现是返回 true,如果组件不需要更新,可以在 shouldComponentUpdate 中返回 false 来跳过整个渲染过程。其包括该组件的 render 调用以及之后的操作
  • +
+
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
import React, { Component } from "react";

export default class ShouldComponentUpdate extends Component {
state = {
count: 0,
};
add = () => {
this.setState({
count: this.state.count + 1,
});
};
// 返回 false 会阻止 组件更新
shouldComponentUpdate(nextProps, nextState) {
if (nextState.count < 2) {
return false;
} else {
return true;
}
}
componentDidUpdate() {
console.log("ShouldComponentUpdate.jsx 组件更新了");
}
render() {
return (
<div>
<h1>ShouldComponentUpdate</h1>
<div>
<span>{this.state.count}</span>
<button onClick={this.add}>点击更新</button>
</div>
</div>
);
}
}
+ +

render-props 和高阶组件

React 组件复用概述

 思考:如果两个组件中的部分功能相似或相同,该如何处理?  处理方式:复用相似的功能(联想函数封装)
 复用什么?1. state 2. 操作 state 的方法 (组件状态逻辑 )  两种方式:1. render props 模式 2. 高阶组件(HOC)
 注意:这两种方式不是新的 API,而是利用 React 自身特点的编码技巧,演化而成的固定模式(写法)

+

render props 模式

思路:将要复用的 state 和操作 state 的方法封装到一个组件中
 问题 1:如何拿到该组件中复用的 state?
 在使用组件时,添加一个值为函数的 prop,通过 函数参数 来获取(需要组件内部实现)
 问题 2:如何渲染任意的 UI?
 使用该函数的返回值作为要渲染的 UI 内容(需要组件内部实现)

+

render props 模式

使用步骤 1.创建 Mouse 组件,在组件中提供复用的状态逻辑代码(1. 状态 2. 操作状态的方法) 2.将要复用的状态作为 props.render(state) 方法的参数,暴露到组件外部 3.使用 props.render() 的返回值作为要渲染的内容

+

APP.jsx

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React, { Component } from "react";
import Mouse from "../Mouse";

export default class App extends Component {
render() {
return (
<div>
{/* 写法一 */}
<Mouse
wdnmd={(mouse) => (
<div>
{mouse.x}---{mouse.y}
</div>
)}
></Mouse>
{/* 写法二 */}
{/* <Mouse>
{(mouse)=>(<div>{mouse.x}---{mouse.y}</div>)}
</Mouse> */}
</div>
);
}
}
+ +

Mouse.jsx

+
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
import React from "react";

class Mouse extends React.Component {
// 需求: 完成坐标显示

state = {
x: 0,
y: 0,
};

componentDidMount() {
window.addEventListener("mousemove", this.fn);
}

fn = (e) => {
this.setState({
x: e.clientX,
y: e.clientY,
});
};

render() {
// 写法一
return this.props.wdnmd(this.state);
// 写法二
// return this.props.children(this.state)
}
}

export default Mouse;
+ +

演示 Mouse 组件的复用

Mouse 组件负责:封装复用的状态逻辑代码(1. 状态 2. 操作状态的方法)  状态:鼠标坐标(x, y)
 操作状态的方法:鼠标移动事件
 传入的 render prop 负责:使用复用的状态来渲染 UI 结构

+

children 代替 render 属性

 注意:并不是该模式叫 render props 就必须使用名为 render 的 prop,实际上可以使用任意名称的 prop  把 prop 是一个函数并且告诉组件要渲染什么内容的技术叫做:render props 模式
 推荐:使用 children 代替 render 属性

+

高阶组件

什么是高阶组件(higher order component)

    +
  • 高阶组件:实际上就是一个函数,这个函数能够接受一个参数组件,然后,返回一个增强后的组件
  • +
  • 参数组件:就是需要被包装的组件
  • +
  • 返回的组件:增强后的组件,这个组件中就是通过 props 来接收到复用的状态逻辑的
  • +
+

高阶组件的封装

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
import React from "react";
const WidthMouse = (Params) => {
class Mouse extends React.Component {
state = {
x: 0,
y: 0,
};

componentDidMount() {
window.addEventListener("mousemove", this.fn);
}

fn = (e) => {
this.setState({
x: e.clientX,
y: e.clientY,
});
};

render() {
// return <Params x={this.state.x} y={this.state.y}></Params>
return <Params {...this.state}></Params>;
}
}
// Mouse.displayName=Params.name
// console.dir(Mouse);
return Mouse;
};

export default WidthMouse;

// 创建一个组件(函数组件)
const Position = (props) => {
return (
<div>
<p>
{props.x}--{props.y}
</p>
</div>
);
};
/* 包装一下 */
let a = WidthMouse(Position);
+ +

给高阶组件添加 displayName

    +
  • displayName:用于设置 react-dev-tools (浏览器中的 react 插件) 中组件的展示名称
  • +
  • 注意:该属性仅仅用于设置展示名称,并不会对组件功能产生影响,所以,如果不想在 react-dev-tools 中进行区分,实际上,可以省略该设置。
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
const withMouse = (WrappedComponent) => {
class Mouse extends React.Component {
...
}

// 给高阶组件设置名称,将来在 react-dev-tools 工具中,能够区分到底是哪一个高阶组件包装的组件
function getDisplayName(WrappedComponent) {
return WrappedComponent.displayName || WrappedComponent.name || 'Component'
}
Mouse.displayName = `WithMouse${getDisplayName(WrappedComponent)}`

return Mouse
}
+ +

给高阶组件传递属性

    +
  • 推荐:在高阶组件中,将高阶组件接收到的 props 一起传递给被包装的组件;这样,才能在 被包装 组件中获取到传递的额外属性。
  • +
  • 目的:防止 props 丢失问题
  • +
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
class Mouse extends React.Component {
state = {
x: 0,
y: 0,
};

componentDidMount() {
window.addEventListener("mousemove", this.fn);
}

fn = (e) => {
this.setState({
x: e.clientX,
y: e.clientY,
});
};

render() {
// 多写上一句 ...this.props
return <Params {...this.state} {...this.props}></Params>;
}
}
+ +

setState()的说明

更新数据

1.setState() 是异步更新数据的 2.注意:使用该语法时,后面的 setState() 不要依赖于前面的 setState() 3.可以多次调用 setState() ,只会触发一次重新渲染

+
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
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";

class Father extends React.Component {
state = {
count: 0,
};

fn = () => {
// 多次调用 setState 只会执行一次渲染
this.setState({
count: 1,
});
this.setState({
count: 2,
});
this.setState({
count: 3,
});
};
render() {
console.log("渲染");
return (
<div id="Father">
<h1>Father</h1>
<span>{this.state.count}</span>
<button onClick={this.fn}>点击Father按钮 ++</button>
</div>
);
}
}
+ +

推荐语法

1.推荐:使用 setState((state, props) => {}) 语法 2.参数 state:表示最新的 state 3.参数 props:表示最新的 props

+
{11-16}
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
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";

class Father extends React.Component {
state = {
count: 0,
};

fn = () => {
this.setState((newstate, newprops) => {
// newstate.count++
return {
count: newstate.count + 1,
};
});
};
render() {
console.log("渲染", this.state.count);
return (
<div id="Father">
<h1>Father</h1>
<span>{this.state.count}</span>
<button onClick={this.fn}>点击Father按钮 ++</button>
</div>
);
}
}
+ +

第二个参数

1.场景:在状态更新(页面完成重新渲染)后立即执行某个操作 2.语法: setState(updater[, callback])

+
{16-19}
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
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";

class Father extends React.Component {
state = {
count: 0,
};

fn = () => {
this.setState(
(newstate, newprops) => {
// newstate.count++
return {
count: newstate.count + 1,
};
},
() => {
console.log("setState 执行后立即执行");
},
);
console.log("我比 setState 打印得还要快呢");
};
render() {
console.log("渲染", this.state.count);
return (
<div id="Father">
<h1>Father</h1>
<span>{this.state.count}</span>
<button onClick={this.fn}>点击Father按钮 ++</button>
</div>
);
}
}
+ +

组件更新机制

 setState() 的两个作用: 1. 修改 state 2. 更新组件(UI)
 过程:父组件重新渲染时,也会重新渲染子组件。但只会渲染当前组件子树(当前组件及其所有子组件)

+

组件性能优化

减轻 state

 减轻 state:只存储跟组件渲染相关的数据(比如:count / 列表数据 / loading 等)
 注意:不用做渲染的数据不要放在 state 中,比如定时器 id 等
 对于这种需要在多个方法中用到的数据,应该放在 this 中

+
1
2
3
4
5
6
7
class Hello extends Component { componentDidMount() {
// timerId存储到this中,而不是state中 this.timerId = setInterval(() => {}, 2000)
}
componentWillUnmount() {
clearInterval(this.timerId) }
render() { ... } }

+ +

避免不必要的重新渲染

 组件更新机制:父组件更新会引起子组件也被更新,这种思路很清晰
 问题:子组件没有任何变化时也会重新渲染
 如何避免不必要的重新渲染呢?
 解决方式:使用钩子函数 shouldComponentUpdate(nextProps, nextState)
 作用:通过返回值决定该组件是否重新渲染,返回 true 表示重新渲染,false 表示不重新渲染
 触发时机:更新阶段的钩子函数,组件重新渲染前执行 (shouldComponentUpdate  render)

+
1
2
3
4
5
6
class Hello extends Component {
shouldComponentUpdate() {
// 根据条件,决定是否重新渲染组件 return false
}
render() {...}
}
+ +

纯组件(类组件)

 纯组件:PureComponent 与 React.Component 功能相似
 区别:PureComponent 内部自动实现了 shouldComponentUpdate 钩子,不需要手动比较
 原理:纯组件内部通过分别 对比 前后两次 props 和 state 的值,来决定是否重新渲染组件

+

 说明:纯组件内部的对比是 shallow compare(浅层对比)
 对于值类型来说:比较两个值是否相同(直接赋值即可,没有坑)
 注意:state 或 props 中属性值为引用类型时,应该创建新数据,不要直接修改原数据!(示例)

+
1
2
3
4
5
class Hello extends React.PureComponent {
render() {
return <div>纯组件</div>;
}
}
+ +

函数组件的优化

1.函数组件没有继承关系–> class A extends React.Component 没有这样的东西 不能用 pureComponent 来优化 2.没有生命周期方法 –> shouldComponentUpdate() 不能用

+

解决方案: React.memo()高阶组件来优化函数组件

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React, { PureComponent } from "react";

class ClassPure extends PureComponent {
state = {
msg: "hello 纯组件",
};
render() {
return (
<div>
{this.state.msg}
<span>测试</span>
</div>
);
}
}
+ +

将某元素或组件渲染到父组件以外的标签上

Portals – React (reactjs.org)

+
1
2
3
4
5
6
7
8
9
import React, { Component } from "react";
import ReactDOM from "react-dom";
class Portal extends Component {
render() {
const Portal = <div>Portal</div>;
// 将标签渲染到 html 里面的指定元素内
return ReactDOM.createPortal(Portal, document.getElementById("app"));
}
}
+ +

Fragment 占位标签

Fragments – React (reactjs.org)

+
1
2
3
<React.Fragment></React.Fragment>
<Fragment></Fragment>
<></>
+ +
1
2
3
4
5
class Index extends Component {
render() {
return <React.Fragment>Fragment</React.Fragment>;
}
}
+ +

StrictMode 严格模式

作用: 开启严格模式,提示 代码中的过时的属性或方法 可能存在的问题

+
1
2
3
4
5
6
7
8
9
class Index extends Component {
render() {
return (
<React.StrictMode>
<div>严格模式</div>
</React.StrictMode>
);
}
}
+ +

CSS 模块化

    +
  • 把 xxxx.css 改成 xxxx.module.css

    +
  • +
  • 把 xxxx.module.css 引入到对应的组件中 import xxxxStyle from “./xxxx.module.css”

    +
  • +
  • 在组件中使用

    +
      +
    • <p className="{xxxxStyle.类名}">Hello World</p>
      +
      1
      2
      3
      4
      5
      6
      7

      index.module.css

      ```css
      .hello span {
      color: hotpink;
      }
      +
      +
    • +
    +
  • +
+

index.jsx

+
{8}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import React, { Component } from "react";
import ModuleStyle from "./index.module.css";

class Index extends Component {
render() {
return (
<div>
<h1 className={ModuleStyle.hello}>
<span>css 模块化</span>
</h1>
</div>
);
}
}

export default Index;
+ +

css in js

styled-component 包的基本使用

使用 styled-component 1.安装 styled-component 2.在你要使用 styled-component 的组件中 引入这个包 3.使用 const 组件名称 = styled.标签名和以前一样的写样式 4.在 render 函数中的 html 结构中使用组件名称

+
{4-10}
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
import React from "react";
import styled from "styled-components";
// 创建一个 div组件里面的样式是
const Div = styled.div`
width: ${(props) => props.width};
height: ${(props) => props.height};
background-color: green;
opacity: ${(props) => props.opacity};
transition: all 3s;
`;
class App extends React.Component {
// div的初始状态
state = {
width: "0px",
height: "0px",
opacity: 0,
};

// div的改变后的状态
btnClick = () => {
this.setState({
width: "60px",
height: "60px",
opacity: 1,
});
};

render() {
return (
<div className="one">
<Div {...this.state}></Div>
<button onClick={this.btnClick}>按钮</button>
</div>
);
}
}

export default App;
+ +

样式继承

1
2
3
4
5
6
7
8
9
10
11
12
const Div = styled.div`
width: ${(props) => props.width};
height: ${(props) => props.height};
background-color: green;
opacity: ${(props) => props.opacity};
transition: all 3s;
`;

// 继承样式
const Button = styled(Div)`
background-color: skyblue;
`;
+ +

动画

React Transition Group (reactcommunity.org)

+

CSSTransition 包的使用

1.安装插件 npm install react-transition-group –save 2.在使用过渡效果的组件中导入 import { CSSTransition } from “react-transition-group” 3.使用导入的 CSSTransition 组件把需要过渡的标签包起来 4.书写过渡的样式 xxx-enter 代表进入动画执行之前绑定的类名 xxx-enter-active 代表进入动画执行中绑定的类名 xxx-enter-done 代表进入动画执行完绑定的类名 别忘了在 active 写 transition 属性 5.设置 CSSTransition 的属性 in 属性(触发动画进入或退出的状态) classNames 属性(告诉 react-transition-group 类的前缀是什么) timeout 属性(动画运行多久 退出 一定要大于等于 transition 的时间)

+

index.css

+
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
49
50
51
52
53
/* xxx-enter 进入动画执行之前绑定的类名 */
/* xxx-enter-active 进入动画执行中绑定的类名 */
/* xxx-enter-done 进入动画执行完绑定的类名 */

.box-enter {
/* xxx-enter 进入动画执行之前绑定的类名 */
width: 0px;
height: 0px;
opacity: 0;
background-color: burlywood;
}

.box-enter-active {
/* xxx-enter-active 进入动画执行中绑定的类名 */
width: 100px;
height: 100px;
opacity: 1;
background-color: burlywood;
transition: all 3s;
}

.box-enter-done {
/* xxx-enter-active 进入动画执行中绑定的类名 */
width: 100px;
height: 100px;
opacity: 1;
background-color: burlywood;
}

/* 动画退出执行的动画 */
.box-exit {
/* xxx-exit 退出动画执行之前绑定的类名 */
width: 100px;
height: 100px;
opacity: 1;
background-color: skyblue;
}

.box-exit-active {
/* xxx-exit-active 退出动画执行中绑定的类名 */
width: 10px;
height: 10px;
opacity: 0.5;
background-color: red;
transition: all 3s;
}

.box-exit-done {
/* xxx-exit-active 退出动画执行完绑定的类名 */
width: 0px;
height: 0px;
opacity: 0;
}
+ +

index.jsx

+
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
import React, { Component } from "react";
import { CSSTransition } from "react-transition-group";
import "./index.css";
// CSSTransition有三个状态:
// + appear: 初始
// + enter : 进入
// + exit;: 退出
// 当组件第一次加载时候会自动查找
// - appear / -appear - active / -appear - done
// 当组件显示时会自动查找
// - enter / -enter - active / -enter - done
// 当组件退出时会自动查找
// - exit / -exit - active / -exit - done
export default class index extends Component {
state = {
isShow: false,
};
fn = () => {
this.setState({
isShow: !this.state.isShow,
});
};
render() {
return (
<React.Fragment>
<div id="two">
<CSSTransition
in={this.state.isShow}
classNames="box"
timeout={3000}
// 动画加载的时候才显示 dom 元素
unmountOnExit
>
<div></div>
</CSSTransition>
<button onClick={this.fn}>点击显示动画</button>
</div>
</React.Fragment>
);
}
}
+ +

SwitchTransition 切换动画

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 使用SwitchTransition的过程
// 1.导入SwitchTransition
// 2.使用SwitchTransition包裹CSSTransition
// 3.注意: 以前在CSSTransition中用的属性in 现在用的key
// 4.写变化的样式 出来 进去 类名的前缀classNames
// 5.timeout 时间

class App extends React.Component {
render() {
<SwitchTransition>
<CSSTransition key={this.state.flag} classNames="box" timeout={1000}>
<button onClick={this.btnClick}>
{this.state.flag ? "Hello,World" : "GoodBye,World"}
</button>
</CSSTransition>
</SwitchTransition>;
}
}
+ +

路由

如何在 React 中安装路由

1
npm install react-router-dom
+ +

文档地址

+

基本使用

常用组件的说明

    +
  • BrowserRouter 组件:用来包裹整个 React 应用,整个应用中只需要使用一次即可。

    +
  • +
  • Link 组件:最终会生成一个 a 标签,通过 to 属性指定 pathname(history /) 或 hash(哈希模式 #)

    +
  • +
  • Route 组件:用来配置路由规则和要展示的组件

    +
      +
    • path 属性:配置路由规则
    • +
    • component 属性:指定当前路由规则匹配时要展示的组件
    • +
    • Route 组件放在哪,组件内容就展示在哪。并且每一个路由都是一个单独的 Route 组件。
    • +
    +
  • +
  • react-router4 之前, 所有路由代码都是统一放到 react-router 中管理的

    +
      +
    • react-router4 开始, 拆分为了两个包 react-router-dom 和 react-router-native
        +
      • react-router-dom 在浏览器中使用路由
      • +
      • react-router-native 在原生应用中使用路由
      • +
      +
    • +
    +
  • +
  • BrowserRouter history 模式使用的是 H5 的特性, 所以兼容性会比 HashRouter hash 模式差一些

    +
      +
    • 在企业开发中如果不需要兼容低级
      版本浏览器, 建议使用 BrowserRouter 如果需要兼容低级版本浏览器, 那么只能使用 HashRouter
    • +
    +
  • +
  • 无论是 Link 还是 Route 都只能放到 BrowserRouter 和 HashRouter 中才有效

    +
  • +
+

路由的执行过程

    +
  • 1 当点击 Link (a 标签)的时候,就会修改浏览器中的 pathname

    +
  • +
  • 2 只要 浏览器地址栏中的 pathname 发生改变,React 路由就会监听到这个改变

    +
  • +
  • 3 React 路由监听到 pathname 改变后,就会遍历所有 Route 组件,分别使用 Route 组件中的 path 路由规则,与当前的 浏览器地址栏中的 pathname 进行匹配

    +
  • +
  • 4 只要匹配成功,就会把当前 Route 对应的组件,展示在页面中

    +
  • +
  • 注意:匹配时,不是找到第一个匹配的路由就停下来了。而是: 所有的 Route 都会进行匹配,只要匹配就会展示该组件。

    +
      +
    • 也就是说:在一个页面中,可以有多个 Route 同时被匹配
    • +
    +
  • +
+

路由的使用-案例

+ +

路由传参

+ +

路由嵌套-子路由

+#### react-router-config 统一路由管理 + +

为了像 vue-router 一样方便的管理路由所以需要这样一个插件

+

部分源码展示

+
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
import React from "react";
import { Switch, Route } from "react-router";

function renderRoutes(routes, extraProps = {}, switchProps = {}) {
return routes (
<Switch {...switchProps}>
{routes.map((route, i) => (
<Route
key={route.key || i}
path={route.path}
exact={route.exact}
strict={route.strict}
render={props =>
route.render ? (
route.render({ ...props, ...extraProps, route: route })
) : (
<route.component {...props} {...extraProps} route={route} />
)
}
/>
))}
</Switch>
) : null;
}

export default renderRoutes;

+ +

总结

元素渲染 – React (docschina.org)

+
    +
  • React 元素是不可变对象。一旦被创建,你就无法更改它的子元素或者属性。一个元素就像电影的单帧:它代表了某个特定时刻的 UI。

    +
  • +
  • React DOM 只会更新实际改变了的内容

    +
  • +
  • 组件名称必须以大写字母开头。

    +

    React 会将以小写字母开头的组件视为原生 DOM 标签

    +
  • +
  • 正确地使用 State State & 生命周期 – React (docschina.org)

    +
      +
    • 不要直接修改 State,而是应该使用 setState()

      +
    • +
    • State 的更新可能是异步的

      +
    • +
    • 数据是向下流动的

      +
    • +
    +
  • +
  • 事件默认行为

    +
      +
    • React 不能通过返回 false 来阻止默认行为必须显现的调用 preventDefault
    • +
    +
  • +
  • React 里面的事件对象是合成事件 事件处理 – React (docschina.org)

    +
  • +
  • 事件处理程序传递参数

    +
  • +
+
1
2
3
4
5
<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
//上述两种方式是等价的

在这两种情况下,React 的事件对象 e 会被作为第二个参数传递。如果通过箭头函数的方式,事件对象必须显式的进行传递,而通过 bind 的方式,事件对象以及更多的参数将会被隐式的进行传递。
+ +
    +
  • 事件回调函数
  • +
+
1
2
3
4
5
6
7
8
9
10
11
class LoggingButton extends React.Component {
handleClick() {
console.log("this is:", this);
}

render() {
// 此语法确保 `handleClick` 内的 `this` 已被绑定。
return <button onClick={() => this.handleClick()}>Click me</button>;
}
}
// 此语法问题在于每次渲染 LoggingButton 时都会创建不同的回调函数。在大多数情况下,这没什么问题,但如果该回调函数作为 prop 传入子组件时,这些组件可能会进行额外的重新渲染。我们通常建议在构造器中绑定或使用 class fields 语法来避免这类性能问题。
+ +
    +
  • 受控组件上指定 value 的 prop 会阻止用户更改输入。如果你指定了 value,但输入仍可编辑,则可能是你意外地将value 设置为 undefinednull
  • +
+
头像头像
WaterBoat
正因你我生于繁华,弥足之花方显珍贵
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
avatar
正因你我生于繁华,弥足之花方显珍贵
文章目录
  1. 1. React 介绍
    1. 1.1. 声明式
    2. 1.2. 组件化
    3. 1.3. 一次学习,随处编写
  2. 2. React 初体验
    1. 2.1. 使用 React 的 2 种方式
  3. 3. 虚拟 DOM 和真实 DOM
    1. 3.1. 如何创建虚拟 DOM
    2. 3.2. 如何通过虚拟 DOM 渲染真实 DOM 到浏览器
    3. 3.3. render 方法的注意点
    4. 3.4. createElement 方法注意点
    5. 3.5. 案例
  4. 4. React 中的 JSX 语法
    1. 4.1. 为什么需要 JSX
      1. 4.1.1. 如果用 js 的写法
      2. 4.1.2. 使用 JSX 写法
    2. 4.2. JSX 是什么?
    3. 4.3. 为什么要使用 JSX
    4. 4.4. JSX 的本质
    5. 4.5. 如何将 JSX 转换成 JS?
    6. 4.6. JSX 中使用表达式
    7. 4.7. JSX 使用条件渲染
    8. 4.8. JSX 中的列表渲染
      1. 4.8.1. key
    9. 4.9. JSX 中的绑定属性
    10. 4.10. JSX 语法总结
      1. 4.10.1. jsx 语法规则
      2. 4.10.2. 区分:【js 语句(代码)】与【js 表达式】
  5. 5. 受控组件
  6. 6. 非受控组件
  7. 7. 获取 Dom 元素
    1. 7.1. 何时使用 Refs
    2. 7.2. Refs 转发
  8. 8. 组件
    1. 8.1. 组件的渲染
    2. 8.2. 定义函数组件
    3. 8.3. 定义类组件
  9. 9. 状态 state
    1. 9.1. State 的更新可能是异步的
  10. 10. 事件处理
    1. 10.1. this
  11. 11. 组件通信
    1. 11.1. 父子通信-class 组件
    2. 11.2. 父子通信-function 组件
    3. 11.3. 父子传参案例
    4. 11.4. 子父传参
    5. 11.5. 组件的 props 的数据类型的限制
  12. 12. Context(上下文)
  13. 13. 组件的生命周期
    1. 13.1. 什么是生命周期
      1. 13.1.1. 创建时(挂载阶段)
      2. 13.1.2. 更新时(更新阶段)
      3. 13.1.3. 卸载时(卸载阶段)
  14. 14. shouldComponentUpdate
  15. 15. render-props 和高阶组件
    1. 15.1. React 组件复用概述
    2. 15.2. render props 模式
    3. 15.3. render props 模式
    4. 15.4. 演示 Mouse 组件的复用
    5. 15.5. children 代替 render 属性
    6. 15.6. 高阶组件
      1. 15.6.1. 什么是高阶组件(higher order component)
      2. 15.6.2. 高阶组件的封装
      3. 15.6.3. 给高阶组件添加 displayName
      4. 15.6.4. 给高阶组件传递属性
  16. 16. setState()的说明
    1. 16.0.1. 更新数据
    2. 16.0.2. 推荐语法
    3. 16.0.3. 第二个参数
  • 17. 组件更新机制
  • 18. 组件性能优化
    1. 18.1. 减轻 state
    2. 18.2. 避免不必要的重新渲染
    3. 18.3. 纯组件(类组件)
    4. 18.4. 函数组件的优化
  • 19. 将某元素或组件渲染到父组件以外的标签上
  • 20. Fragment 占位标签
  • 21. StrictMode 严格模式
  • 22. CSS 模块化
  • 23. css in js
    1. 23.1. styled-component 包的基本使用
      1. 23.1.1. 样式继承
  • 24. 动画
    1. 24.1. CSSTransition 包的使用
    2. 24.2. SwitchTransition 切换动画
  • 25. 路由
    1. 25.1. 如何在 React 中安装路由
    2. 25.2. 基本使用
      1. 25.2.1. 常用组件的说明
      2. 25.2.2. 路由的执行过程
      3. 25.2.3. 路由的使用-案例
      4. 25.2.4. 路由传参
      5. 25.2.5. 路由嵌套-子路由
  • 26. 总结
  • 最近发布
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/05/07/\345\211\215\347\253\257/React/02-Redux\347\254\224\350\256\260/index.html" "b/2021/05/07/\345\211\215\347\253\257/React/02-Redux\347\254\224\350\256\260/index.html" new file mode 100644 index 0000000000..1b2dcdf075 --- /dev/null +++ "b/2021/05/07/\345\211\215\347\253\257/React/02-Redux\347\254\224\350\256\260/index.html" @@ -0,0 +1,422 @@ +Redux 笔记 | WaterBoat的博客
    加载头像

    Redux 笔记

    Redux 笔记

    Redux

    和 vuex 一样为了解决组件之间的通信问题而使用的架构

    +

    设计思想

      +
    • Web 应用是一个状态机,视图与状态是一一对应的。
    • +
    • 所有的状态,保存在一个对象里面。
    • +
    +

    Redux 核心理念

    1. 通过store来保存数据
    +2. 通过action来修改数据
    +3. 通过reducer将store和action串联起来 reducer(state=initialState) {}
    +
    +
    1
    2
    3
    4
    5
    6
    7
    8
                        -------------
    ---------> | Component | ---------
    | ------------- |
    | ⬇
    ------------- ------------- -------------
    | Store | <---- | Reducer | <---- | Action |
    ------------- ------------- -------------

    + +

    API

    createStore 存数据的地方

    createStore方法还可以接受第二个参数,表示 State 的最初状态。这通常是服务器给出的。

    +
    {11}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const redux = require("redux");
    // 定义数据
    const initialState = {
    count: 0,
    list: [1, 3, 4, 2, 3],
    };
    function fn(state = initialState) {
    return state;
    }
    // 创建 Store
    const store = redux.createStore(fn);
    // 获取数据
    console.log(store.getState()); // { count: 0, list: [ 1, 3, 4, 2, 3 ] }
    + +

    State 对象包含所有数据

    如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。

    +

    当前时刻的 State,可以通过store.getState()拿到。

    +

    Redux 规定, 一个 State 对应一个 View。只要 State 相同,View 就相同。你知道 State,就知道 View 是什么样,反之亦然。

    +

    Action 修改 State 数据

    State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。

    +

    Action 是一个对象。其中的 type 属性是必须的,表示 Action 的名称。其他属性可以自由设置,社区有一个规范可以参考。

    +
    1
    2
    3
    4
    const action = {
    type: "ADD_TODO",
    msg: "Hello Redux",
    };
    + +

    Store.dispatch() 发送 Action

    1
    2
    3
    4
    5
    6
    const action = {
    type: "ADD_TODO",
    msg: "Hello Redux",
    };

    store.dispatch(action);
    + +

    Reducer 接收新的 state 并且返回它

    Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。

    +
    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
    const redux = require("redux");
    // 定义数据
    const initialState = {
    count: 0,
    list: [1, 3, 4, 2, 3],
    };
    function fn(state = initialState, action) {
    // 这里接收到新的 action
    console.log(action);
    switch (action.type) {
    case "ADD_TODO":
    state.msg = action.msg;
    return state;
    default:
    return state;
    }
    }
    // 创建 Store
    const store = redux.createStore(fn);
    // 获取数据
    // console.log(store.getState()); // { count: 0, list: [ 1, 3, 4, 2, 3 ] }

    const action = {
    type: "ADD_TODO",
    msg: "Hello Redux",
    };
    // 派发 action
    store.dispatch(action);
    console.log(store.getState());
    // { type: '@@redux/INITu.8.s.4.e.9' }
    //{ type: 'ADD_TODO', msg: 'Hello Redux' }
    //{ count: 0, list: [ 1, 3, 4, 2, 3 ], msg: 'Hello Redux' }
    + +

    store.Subscribe 监听数据变化

    {23-26}
    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
    const redux = require("redux");
    // 定义数据
    const initialState = {
    count: 0,
    list: [1, 3, 4, 2, 3],
    };
    function fn(state = initialState, action) {
    // 这里接收到新的 action
    console.log(action);
    switch (action.type) {
    case "ADD_TODO":
    state.msg = action.msg;
    return state;
    default:
    return state;
    }
    }
    // 创建 Store
    const store = redux.createStore(fn);
    // 获取数据
    // console.log(store.getState()); // { count: 0, list: [ 1, 3, 4, 2, 3 ] }

    // 监听 state 变化
    store.subscribe(() => {
    console.log("变化了");
    });
    const action = {
    type: "ADD_TODO",
    msg: "Hello Redux",
    };
    // 派发 action
    store.dispatch(action);
    console.log(store.getState());
    + +

    store.subscribe方法返回一个函数,调用这个函数就可以解除监听。

    +
    1
    2
    let unsubscribe = store.subscribe(() => console.log(store.getState()));
    unsubscribe();
    + +

    combineReducers 组合 reducer

    1
    2
    3
    4
    import { combineReducers, createStore } from "redux";
    let reducer = combineReducers({ reducer1, reducer2 });
    let stote = createStore(reducer);
    // store.reducer1 获取到数据
    + +

    概念 action creator

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 什么是 action 对象?     形如  {type:"ADD",payload:5} 这样的形式就是 action 对象
    // 什么是 action creator 函数? 返回 action 对象的函数就是 action creator函数

    function actionCreator(payload) {
    return {
    type: "ADD",
    payload,
    };
    }
    // 在什么时候使用? 一般在相同 type 不同传参的情况下使用,比如一个按钮想一次+1一个按钮想一次+2
    + +

    bindActionCreators 简化 //TODO

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import { useDispatch } from "react-redux";
    import { bindActionCreators } from "redux";
    function test() {
    const dispatch = useDispatch();
    return bindActionCreators(
    { increment: () => {}, save_message: () => {} },
    dispatch,
    ); // {increment: ƒ, save_message: ƒ}
    }
    + +

    总结

      +
    • 通过 redux.createStore() 创建 store
    • +
    • 通过 store.dispatch(action) 修改 state 里面的值
    • +
    • 通过 reducer(state,action) 函数返回 state 值
    • +
    +
    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
    // 1.引入 redux 包
    const redux = require("redux");

    const defaultState = {
    msg: "hello redux",
    };

    // 2.创建 stote
    const store = redux.createStore(reducer);

    // 3.创建 reducer 初始化数据
    function reducer(state = defaultState, action) {
    console.log("我被触发了");
    switch (action.type) {
    case "ADD":
    return { ...state, age: action.age };
    default:
    return state;
    }
    }

    // 4. 调用 action 修改 state
    let action = {
    type: "ADD",
    age: 18,
    };
    // 调用完成之后会触发 reducer
    store.dispatch(action);
    // 5. 查看 state 是否修改
    console.log(store.getState());
    + +

    react-redux 的使用

    文档

    Getting Started with React Redux | React Redux (react-redux.js.org)

    +

    基本使用

      +
    • Provider 这个组件能够使你整个 app 都能获取到 store 中的数据
    • +
    • connect 这个方法能够使组件跟 store 来进行关联
    • +
    +

    index.jsx

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import React from "react";
    import ReactDOM from "react-dom";
    import "./index.css";
    import App from "./App";
    import { Provider } from "react-redux";
    import store from "./store";

    ReactDOM.render(
    <Provider store={store}>
    <React.StrictMode>
    <App />
    </React.StrictMode>
    </Provider>,

    document.getElementById("root"),
    );
    + +

    store.js

    +
    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
    import { createStore } from "redux";

    // 1.创建初始化 状态
    const initialState = {
    name: "zhangsan",
    age: 19,
    };

    export const action = {
    type: "ADD",
    };

    // 3.创建reducer函数
    export const reducer = (state = initialState, action) => {
    // console.log(action)
    // console.log(state)
    switch (action.type) {
    case "ADD":
    state.age++;
    return state;
    default:
    return state;
    }
    };

    let store = createStore(reducer);

    export default store;
    + +

    app.jsx

    +
    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
    49
    50
    51
    52
    53
    54
    55
    56
    import "./App.css";
    import { connect } from "react-redux";
    import store, { action } from "./store";
    import React from "react";

    class App extends React.Component {
    constructor() {
    super();
    this.state = store.getState();
    this.unsubscribe = null;
    }

    componentDidMount() {
    // 监听数据变化
    this.unsubscribe = store.subscribe(() => {
    this.setState({
    ...store.getState(),
    });
    });
    }
    // 组件销毁停止监听
    componentWillUnmount() {
    this.unsubscribe();
    }
    render() {
    return (
    <div className="App">
    <h1>{this.state.age}</h1>
    <button onClick={this.props.onClick}>点击增加年龄</button>
    <button onClick={this.unsubscribe}>停止监听</button>
    </div>
    );
    }
    }

    // 传入 state 获取 store 里面的值
    // 这个单词翻译过来就是把state映射到props中去 ,其实也就是把Redux中的数据映射到React中的props中去。
    const mapStateToProps = (state) => {
    console.log(state);
    return {
    name: state.name,
    age: state.age,
    };
    };
    // 这个单词翻译过来就是就是把各种dispatch也变成了props让你可以直接使用;
    const mapDispatchToProps = (dispatch) => {
    // 默认传递参数就是dispatch
    return {
    onClick: () => {
    dispatch(action);
    },
    };
    };

    // connect(mapStateToProps, mapDispatchToProps)(MyComponent)
    export default connect(mapStateToProps, mapDispatchToProps)(App);
    + +

    redux-thunk

      +
    • 让 action 支持异步请求数据
    • +
    +

    使用

    store.js

    +
    1
    2
    3
    4
    import { createStore, applyMiddleware } from "redux";
    import thunk from "redux-thunk";
    // 添加中间件即可
    let store = createStore(reducer, applyMiddleware(thunk));
    + +

    案例

    index.jsx

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import React from "react";
    import ReactDOM from "react-dom";
    import "./index.css";
    import App from "./App";
    import { Provider } from "react-redux";
    import store from "./store";

    ReactDOM.render(
    <React.StrictMode>
    <Provider store={store}>
    <App />
    </Provider>
    </React.StrictMode>,
    document.getElementById("root"),
    );
    + +

    App.jsx

    +
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import "./App.css";

    import React, { Component } from "react";
    import { connect } from "react-redux";
    import { asyncAction, promiseAction } from "./store";

    class App extends Component {
    render() {
    return (
    <div className="App">
    <h1>{this.props.msg}</h1>
    <button onClick={this.props.msgUpdate}>点击修改值</button>
    <h1>{this.props.async}</h1>
    <button onClick={this.props.msgAsync}>异步修改值使用 thunk</button>
    <button onClick={this.props.msgAsync2}>异步修改值不使用 thunk</button>
    <button onClick={this.props.msgAsync3}>异步修改值使用 promise</button>
    </div>
    );
    }
    }

    let mapState = (state) => {
    return {
    msg: state.msg,
    async: state.async,
    };
    };
    let mapDispatch = (dispatch) => {
    return {
    msgUpdate() {
    dispatch({
    type: "MSG",
    msg: "你好",
    });
    },
    // redux-thunk
    msgAsync() {
    dispatch(asyncAction);
    },
    // 不使用 redux-thunk
    msgAsync2() {
    fetch("http://localhost:8000/hello")
    .then((res) => res.json())
    .then((res) => {
    dispatch({
    type: "ASYNC",
    async: res.msg,
    });
    });
    },
    // promise redux-thunk
    msgAsync3() {
    dispatch(promiseAction);
    },
    };
    };

    export default connect(mapState, mapDispatch)(App);
    + +

    store

    +
    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
    import { createStore, applyMiddleware } from "redux";
    import thunk from "redux-thunk";
    let defaultState = {
    msg: "123",
    async: "异步",
    };

    function reducer(state = defaultState, action) {
    console.log(action);
    switch (action.type) {
    case "MSG":
    return {
    ...state,
    msg: action.msg,
    };
    case "ASYNC":
    return {
    ...state,
    async: action.async,
    };
    default:
    return state;
    }
    }

    export const asyncAction = function (dispatch) {
    fetch("http://localhost:8000/hello")
    .then((res) => res.json())
    .then((res) => {
    dispatch({
    type: "ASYNC",
    async: res.msg,
    });
    });
    };
    export const promiseAction = async function (dispatch) {
    let data = await (await fetch("http://localhost:8000/hello")).json();
    dispatch({
    type: "ASYNC",
    async: data.msg,
    });
    };

    // let store = createStore(reducer)
    let store = createStore(reducer, applyMiddleware(thunk));

    export default store;
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/05/07/\345\211\215\347\253\257/React/React\346\200\273\347\273\223\347\254\224\350\256\260/index.html" "b/2021/05/07/\345\211\215\347\253\257/React/React\346\200\273\347\273\223\347\254\224\350\256\260/index.html" new file mode 100644 index 0000000000..f588c04499 --- /dev/null +++ "b/2021/05/07/\345\211\215\347\253\257/React/React\346\200\273\347\273\223\347\254\224\350\256\260/index.html" @@ -0,0 +1,362 @@ +React 总结笔记 | WaterBoat的博客
    加载头像

    React 总结笔记

    React 总结笔记

    父传子

    props 传数据

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import ClassProps from "./components/ClassProps";
    import FunctionProps from "./components/FunctionProps";

    function App() {
    return (
    <div className="App">
    <ClassProps name="张三" age={18} />
    <FunctionProps name="梨花" age={20} />
    </div>
    );
    }

    export default App;
    + +

    +
    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
    import React from "react";

    class ClassProps extends React.Component<{
    name?: string;
    age?: number;
    }> {
    render() {
    return (
    <>
    <div>{this.props.name}</div>
    <div>{this.props.age}</div>
    </>
    );
    }
    }
    // 设置默认值 可能会被弃用 https://twitter.com/dan_abramov/status/1133878326358171650
    (ClassProps as any).defaultProps = {
    name: "John Doe",
    age: 30,
    };
    export default ClassProps;

    interface FunctionProps {
    name: string;
    age: number;
    }
    // 设置默认值
    FunctionProps.defaultProps = {
    name: "",
    age: 0,
    };
    function FunctionProps(props: FunctionProps) {
    return (
    <div>
    <h1>Function Props</h1>
    <p>{props.name}</p>
    <p>{props.age}</p>
    </div>
    );
    }

    export default FunctionProps;
    + +

    children 传元素

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function App() {
    return (
    <div className="App">
    <ClassChildren>
    <div>
    <p>我是子组件</p>
    </div>
    </ClassChildren>
    <FunctionChildren>
    <div>
    <p>我是子组件</p>
    </div>
    </FunctionChildren>
    </div>
    );
    }
    + +

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import React from "react";

    class ClassChildren extends React.Component {
    render() {
    return <div id="ClassChildren">{this.props.children}</div>;
    }
    }

    export default ClassChildren;

    import { ReactChild, ReactFragment, ReactPortal } from "react";

    function FunctionChildren(props: {
    children: ReactChild | ReactFragment | ReactPortal;
    }) {
    return (
    <div>
    <h1>Function Children</h1>
    <p>{props.children}</p>
    </div>
    );
    }

    export default FunctionChildren;
    + +

    context

    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/05/14/\345\211\215\347\253\257/JavaScript/01-Effective JavaScript \347\274\226\345\206\231\351\253\230\350\264\250\351\207\217JavaScript\344\273\243\347\240\201\347\232\20468\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225/index.html" "b/2021/05/14/\345\211\215\347\253\257/JavaScript/01-Effective JavaScript \347\274\226\345\206\231\351\253\230\350\264\250\351\207\217JavaScript\344\273\243\347\240\201\347\232\20468\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225/index.html" new file mode 100644 index 0000000000..16aba0abcc --- /dev/null +++ "b/2021/05/14/\345\211\215\347\253\257/JavaScript/01-Effective JavaScript \347\274\226\345\206\231\351\253\230\350\264\250\351\207\217JavaScript\344\273\243\347\240\201\347\232\20468\344\270\252\346\234\211\346\225\210\346\226\271\346\263\225/index.html" @@ -0,0 +1,581 @@ +Effective JavaScript 编写高质量JavaScript代码的68个有效方法 | WaterBoat的博客
    加载头像

    Effective JavaScript 编写高质量JavaScript代码的68个有效方法

    Effective JavaScript 编写高质量JavaScript代码的68个有效方法

    JavaScript 中的浮点数

    大多数编程语言都有几种数值型数据类型,但是 JavaScript 却只有一种。你可以使用 typeof 运算符查看数字的类型。不管是整数还是浮点数,JavaScript 都将它们简单地归类为数字。

    +
    1
    2
    3
    typeof 10; // number
    typeof 10.1; // number
    typeof -10.1; // number
    + +

    事实上,JavaScript 中所有的数字都是双精度浮点数。这是由IEE 754标准制定的 64 位编码数字—即 “doubles” 。

    +

    那么 JavaScript 是如何表达整数的呢?

    +

    请先记住一个概念 : 双精度浮点数能完美地表示高达 53 位精度的整数,范围大小为 -2^53—-2^53 的所有整数都是有效的双精度浮点数

    +

    因此,尽管 JavaScript 中缺少明显的整数类型,但是完全可以进行整数运算。

    +

    大多数的算术运算符可以使用整数、实数或两者的组合进行计算。

    +
    1
    2
    3
    4
    5
    console.log(0.1 * 1.9); // 0.19;
    console.log(-10 + 11); // 1
    console.log(20 - 10); // 10
    console.log(5 / 10); // 0.5
    console.log(49 / 7); // 7
    + +

    然而位算术运算符比较特殊。JavaScript 不会直接将操作数作为浮点数进行运算,而是会将其隐式地转换为 32 位整数后进行运算(确切地说,它们被转换为 32 位大端(big-endian) 的 2 补码表示的整数)

    +
    1
    console.log(8 | 1); //9
    + +

    看似简单的表达式实际上需要几个步骤来完成运算

    +

    如前文所述,JavaScript 的数字都是双精度浮点数。同时也可以表示为 32 位整数,即 32 位 0、1 的序列。

    +

    整数 8 为 32 位二进制序列如下

    +

    00000000000000000000000000001000

    +

    我们也可以用 JavaScript 中数字类型的 toString 方法来查看

    +
    1
    2
    // 转成二进制
    (8).toString(2); // "1000"
    + +

    整数 1 表示为 32 位二进制如下所示:
    00000000000000000000000000000001

    +

    然后按照相同位只要一个为 1 即为 1 的运算法则,那么结果就是

    +

    00000000000000000000000000001001

    +

    其结果就是

    +
    1
    2
    // 将 1001 看成二进制,返回十进制数
    ParseInt("1001", 2); // 9
    + +

    所有位运算符的工作方式都是相同的。其操作步骤为 :

    +
      +
    • 将操作数转换为 32 位整数
    • +
    • 使用整数位模式进行运算
    • +
    • 将结果转换为标准的 JavaScript 浮点数
    • +
    +

    一般情况下,JavaScript 引擎需要做一些额外的工作来进行折现转换。

    +

    因为数字是以浮点数存储的,必须将其转为整数,然后再转回浮点数。

    +

    然后我们在进行浮点数的运算的时候会发现一些不正确的结果

    +
    1
    0.1 + 0.2; // 0.30000000000000004
    + +

    尽管 64 位的精度已经相当高了,但是双精度浮点数也只能表示一组有限的数字,而不能表示所有的实数集。浮点运算只能产生近似的结果,四舍五入到最接近的可表示的实数。

    +

    浮点数权衡了精度和性能。当我们关系精度的时候,要小心浮点数的局限性。一个有效的解决办法就是尽可能地采用整数值运算,因为整数在表示时不需要舍入。

    +

    总结

      +
    • JavaScript 的数字都是双精度的浮点数。
    • +
    • JavaScript 中的整数仅仅是双精度浮点数的一个子集,而不是一个单独的数据类型。
    • +
    • 位运算符将数字视为 32 位的有符号整数。
    • +
    +

    隐式转换

    算术运算符 -、*、/ 和 % 在计算之前都会尝试将其参数转换为数字。而算术符 +,既重载了数字相加,又重载了字符串连接操作。

    +

    加法运算是左结合律

    +

    null 在算术运算中不会导致失败而是隐式地转换为 0

    +

    一个未定义的变量将被转换为特殊的浮点数值 NaN(not a number)

    +

    无奈的是,即便是测试 NaN 值也是异常困难。这有两个原因。

    +
      +
    • JavaScript 遵循了 IEEE 浮点数标准令人头痛的要求—NaN 不等于其本身
    • +
    +
    1
    2
    let x = NaN;
    x === NaN; //false
    + +

    另外,标准的库函数 isNaN 也不是很可靠,因为它带有自己的隐式强制转换,在测试其参数之前,会将参数转换为数字(isNaN 函数的一个更精确的名称可能是 coercesToNaN)。如果你已经知道一个值是数字,你可以使用 isNaN 函数测试它是否是 NaN。

    +
    1
    isNaN(NaN); //true
    + +

    但是对于其他绝对不是 NaN,但会被强制转换为 NaN 的值,使用 isNaN 方法是无法区分的。

    +
    1
    2
    3
    4
    console.log(isNaN("刘德华")); // true
    console.log(isNaN(undefined)); // true
    console.log(isNaN({})); // true
    console.log(isNaN({ name: "罗老师" })); // true
    + +

    最后一种强制转换有时称为真值运算(truthiness)

    +

    大多数的 JavaScript 值都为真值(truth),也就是能隐式地转换为 true,真值运算不会隐式调用任何强制转换方法

    +

    JavaScript 中有 7 个假值: false、0、-0、”“、NaN、null 和 undefined

    +

    其他所有的值都为真值。

    +

    由于数字和字符串可能为假值,因此,使用真值运算检查函数参数或者对象属性是否已定义不是绝对安全的。

    +

    对象也可以被强制转换为原始值。最常见的用法是转换为字符串

    +
    1
    2
    console.log("the Math object" + Math); //the Math object[object Math]
    console.log("the JSON object" + JSON); //the JSON object[object JSON]
    + +

    对象通过隐式地调用其自身的 toString 方法转换为字符串。

    +
    1
    2
    console.log(Math.toString());
    console.log(JSON.toString());
    + +

    总结

      +
    • 类型错误可能被隐式的强制转换所隐藏。
    • +
    • 重载的运算符+是进行加法运算还是字符串连接操作取决于其参数类型。
    • +
    • 对象通过 valueof 方法强制转換为数字,通过 toString 方法强制转换为字符串。
    • +
    • 具有 valueof 方法的对象应该实现 toString 方法,返回一个 valueof 方法产生的数字的字符串表示。
    • +
    • 测试一个值是否为未定义的值,应该使用 typeof 或者与 undefined 进行比较而不是使用真值运算。
    • +
    +

    原始类型优于封装对象

    除了对象之外,JavaScript 有 5 个原始值类型:布尔值、数字、字符串、null 和 undefined
    (令人困惑的是,对 null 类型进行 typeof 操作得到的结果为“object”,然而,ECMAScript 标准描述其为一个独特的类型。)同时,标准库提供了构造函数来封装布尔值、数字和字符串作为对象。你可以创建一个 String 对象,该对象封装了一个字符串值。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 原始字符串
    let a = "hello";
    let b = "hello";
    // String 对象
    let c = new String("hello");
    let d = new String("hello");
    console.log(a === b); // true
    console.log(typeof c); // object
    console.log(a === c); // false
    console.log(a == c); // true
    console.log(c == d); // false
    console.log(c === d); // false
    + +

    String 的原型对象有一个 toUpperCase 方法,可以将字符串转换为大写.你可以对原始字符串值调用这个方法。

    +
    1
    2
    "hi".someProperty = 17;
    console.log("hi".someProperty); // undefined
    + +

    因为每次隐式封装都会产生一个新的 String 对象,更新第一个封装对象并不会造成持久的影响。对原始值设置属性的确是没有意义的,但是觉察到这种行为是值得的。事实证明,这是 JavaScript 隐藏类型错误的又一种情形。本来你想给一个对象设置属性,但没注意其实它是个原始值,程序只是忽略更新而继续运行。这容易导致一些难以发现的错误,并且难以诊断。

    +

    总结

      +
    • 当做相等比较时,原始类型的封装对象与其原始值行为不一样。
    • +
    • 获取和设置原始类型值的属性会隐式地创建封装对象。
    • +
    +

    == 运算符的强制转换规则

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    参数类型 1参数类型 2强制转换
    nullundefined不转换,总是返回 true
    null 或 undefined其他任何非 null 或 undefined 的类型不转换,总是返回 false
    原始类型 : string 、number 或 booleanDate 对象将原始类型转换为数字;将 Date 对象转换为原始类型(优先常识 toString 方法,再常识 valueOf 方法)
    原始类型 : string 、number 或 boolean非 Date 对象将原始类型转换为数字;将非 Date 对象转换为原始类型(优先常识 valueOf 方法,再常识 toString 方法)
    原始类型 : string 、number 或 boolean原始类型 : string 、number 或 boolean将原始类型转换为数字
    +

    总结

      +
    • 当参数类型不同时,== 运算符应用了一套难以理解的隐式强制转换规则
    • +
    • 使用 === 运算符,使读者不需要涉及任何的隐式强制转換就能明白你的比较运算。
    • +
    • 当比较不同类型的值时,使用你自己的显式强制转换使程序的行为更清晰。
    • +
    +

    视字符串为 16 位的代码单元序列

      +
    • JavaScript 字符串由 16 位的代码单元组成,而不是由 Unicode 代码点组成。
    • +
    • JavaScript 使用两个代码单元表示 26 及其以上的 Unicode 代码点。这两个代码单元被称为代理对
    • +
    • 代理对甩开了字符串元素计数,length、charAt、charCodeAt:方法以及正则表达式模式(例如“.”)受到了影响。
    • +
    • 使用第三方的库编写可识别代码点的字符串操作。
    • +
    • 每当你使用一个含有字符串操作的库时,你都需要查阅该库文档,看它如何处理代码点的整个范围。
    • +
    +

    熟练掌握闭包

    我们可能经常时候闭包,但是你未发现这是闭包而已罢了

    +

    理解闭包只需要学会三个基本的事实。

    +

    第一个事实:JavaScript 允许你引用在当前函数以外定义的变量。

    +
    {7}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function sayHi() {
    let Hi = "Hi";

    function name(name) {
    return Hi + "," + name;
    }
    return name("罗老师");
    }
    let result = sayHi();
    console.log(result); // Hi,罗老师
    + +

    第二个事实:即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量。
    如果这听起来让人难以置信,请记住,JavaScript 的函数是第一类(first-class 对象(请参阅第 19 条)。这意味着,你可以返回一个内部函数,并在稍后调用它。

    +
    {7,10-13}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function sayHi() {
    let Hi = "Hi";

    function name(name) {
    return Hi + "," + name;
    }
    return name;
    }
    let result = sayHi();
    let a = result("a老师");
    let b = result("b老师");
    console.log(a); // Hi,罗老师
    console.log(b); // Hi,罗老师
    + +

    和第一个例子不同的是,不是在外部调用函数 sayHi 中立即调用 name(“罗老师”),而是返回 name 函数本身。因此变量 a 的值是内部的 name 函数,调用变量 a 实际上是调用了 name 函数。但即使 sayHi 函数已经返回,name 函数仍然能记住 Hi 变量的值

    +

    学习闭包的第三个也是最后一个事实 : 闭包可以更新外部变量的值。

    +

    实际上,闭包存储的是外部变量的引用,而不是它们的值的副本。因此,对于任何具有访问这些外部变量的闭包,都可以进行更新。一个简单的惯用法 box 对象说明了这一切。它存储了一个可读写的内部值。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function box() {
    let value = undefined;
    return {
    set: function (newValue) {
    value = newValue;
    },
    get: function () {
    return value;
    },
    type: function () {
    return typeof value;
    },
    };
    }
    let result = box();
    console.log(result.type()); //undefined
    console.log(result.get()); //undefined
    result.set(100);
    console.log(result.get()); // 100
    console.log(result.type()); // number
    + +

    这个例子产生了一个包含三个闭包的对象。这三个闭包是 set、get 和 type 属性。它们都共享访问 value 变量。se t 闭包更新 value 的值,随后调用 get 和 type 查看更新的结果。

    +

    总结

      +
    1. Javascript 允许你引用当前函数以外定义的变量
    2. +
    3. 即使外部函数已经返回,当前函数仍可以引用在外部函数所定义的变量
    4. +
    5. 闭包可以更新外部变量的值。实际上,闭包存储的是外部变量的引用,而不是它们的值的副本
    6. +
    +

    变量声明提升

    JavaScript 支持词法作用域( lexical scoping),即除了极少的例外,对变量 foo 的引用会被绑定到声明 foo 变量最近的作用域中。但是, JavaScript 不支持块级作用域,即变量定义的作用域并不是离其最近的封闭语句或代码块,而是包含它们的函数。

    +
    {3,17}
    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
    var a = 20;
    function test2() {
    a = 100;
    {
    a = 10;
    }
    return a;
    }
    a = 90;

    console.log(test2()); // 10
    console.log(a); // 10

    var a = 20;
    function test2() {
    let a = 100;
    {
    a = 10;
    }
    return a;
    }
    a = 90;

    console.log(test2()); // 10
    console.log(a); // 90
    + +

    先来看一段案例

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function test(params) {
    var a = 10;
    var params = 20;
    return a > params;
    }

    // 因为 JavaScript 函数内部声明的变量是函数作用域,而不是块级作用域,所以内部声明的 params 变量只是简单地重新声明了一个已经存在于作用域内的变量(即参数 params)
    /*
    理解 JavaScript 变量声明行为的一个好办法是把变量声明看作由两部分组成,即声明和赋值。
    JavaScript隐式地提升(声明部分到封闭函数的顶部,而将赋值留在原地。换句话说,变量的作用域是整个函数,但仅在 var 语句出现的位置进行赋值。
    */
    // 所以以上代码可以转换为
    function test(params) {
    var params;
    params = params;
    var a;
    a = 10;
    var params;
    params = 20;
    return a > params;
    }
    console.log(test(500)); // false
    + +

    变量声明提升也可能导致变量重声明的混淆。在同一函数中多次声明相同变量是合法。

    +

    JavaScript 中 var 声明的变量没有块级作用域的一个例外恰好是其异常处理。try…catch 语句将捕获的异常绑定到一个变量,该变量的作用域只是 catch 语句块。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function test3() {
    var x = "var",
    result = [];
    result.push(x);
    try {
    throw "错误";
    } catch (x) {
    x = "catch";
    }
    result.push(x);
    return result;
    }

    console.log(test3()); // [ 'var', 'var' ]
    + +

    总结

      +
    • 在代码块中的变量声明会被隐式地提升到封闭函数的顶部。
    • +
    • 重声明变量被视为单个变量。
    • +
    • 考虑手动提升局部变量的声明,从而避免混淆。
    • +
    +

    使用立即调用的函数表达式创建局部作用域

    先来看一段代码输出的是什么?

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function test(arr) {
    var result = [];
    /*
    for循环中头部使用 var 定义变量 i 时,它和循环体中的 i 的作用域不是同级作用域,
    因此当 for 循环执行完毕后,并不会给每个循环都储存相对应的 i 的值。
    (注意,这种情况只有在循环体执行完时才会发生,直接在循环体中写同步执行的数据,
    是可以拿到对应的i的值的。也就是这种情况一般发生在循环体中存在执行函数,
    这个函数的触发执行时机是在for循环执行完毕后)
    */
    for (var i = 0; i < arr.length; i++) {
    result[i] = function () {
    return arr[i];
    };
    }
    return result;
    }
    var result = test([10, 20, 30]);
    var a = result[0];
    console.log(a()); // undefined
    + +

    我们希望输出的是 10 但是程序给我们的结果却是 undefined

    +

    我们似乎期望该函数存储的是嵌套函数创建时变量 i 的值。但事实上,它存储的是变量 i 的引用。由于每次函数创建后变量 i 的值都发生了变化,因此内部函数最终看到的是变量 i 最后的值。需要注意的是,闭包存储的是其外部变量的引用而不是值。

    +

    解决方案一 : 立即调用函数

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function test2(arr) {
    var result = [];
    for (var i = 0; i < arr.length; i++) {
    // 强制创建作用域
    (function (i) {
    result[i] = function () {
    return arr[i];
    };
    })(i);
    }
    return result;
    }
    var result = test2([10, 20, 30]);
    var a = result[0];
    console.log(a()); // 10
    + +

    使用立即调用函数虽然可以解决问题但是要注意,代码块不能包含任何跳出块的 break 语句和 continue 语句。

    +

    解决方案二 : 使用 ES6 的 let 声明变量

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function test(arr) {
    var result = [];
    for (let i = 0; i < arr.length; i++) {
    result[i] = function () {
    return arr[i];
    };
    }
    return result;
    }
    var result = test([10, 20, 30]);
    var a = result[0];
    console.log(a()); // undefined
    + +

    总结

      +
    • 理解绑定与赋值的区别。
    • +
    • 闭包存储的是外部变量的引用,而不是它们的值的副本
    • +
    • 使用立即调用的函数表达式(IIFE)来创建局部作用域。
    • +
    • 当心在立即调用的函数表达式中包裹代码块可能改变其行为的情形。
    • +
    • 使用 let 吧,求求了
    • +
    +

    当心命名函数表达式笨拙的作用域

    JavaScript 函数无论放在何处看起来似乎都是一样的,但是根据上下文其含义会发生变化

    +

    查看一下代码片段

    +
    1
    2
    3
    function test(x) {
    return x;
    }
    + +

    这段代码可以是一个函数声明,也可以是命名函数表达式,这取决于它出现的地方。它定义一个函数并且绑定到当前作用域的一个变量。在程序的最顶层,以上声明将创建一个名为 test 的全局函数。但是同一段代码也可以作为一个表达式,它可以有截然不同的含义。例如 :

    +
    1
    2
    3
    var result = function test(x) {
    return x;
    };
    + +

    根据 ECMAScript 规范,上面那一段代码将函数 test 绑定到了变量 result 而不是变量 test。当然,函数的表达式命名并不是必要的。我们可以省略

    +
    1
    2
    3
    var result = function (x) {
    return x;
    };
    + +

    匿名和命名函数表达式的官方区别在于命名函数会绑定到与其函数名相同的变量上,该变量将作为该函数内的一个局部变量。这也是递归函数的原理

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 求个阶乘呗
    var result = function fn(value) {
    if (value == 1) {
    return value;
    } else {
    // fn 变量成为了函数内的一个局部变量
    return value * fn(value - 1);
    }
    };
    console.log(result(5));
    + +

    需要注意的是变量 fn 的作用域只在其自身函数中。不像函数声明,命名函数表达式不能通过其内部的函数名在外部被引用。

    +

    使用外部作用域的函数名也可以达到同样的效果

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 求个阶乘呗
    function fn(value) {
    if (value == 1) {
    return value;
    } else {
    return value * fn(value - 1);
    }
    }
    console.log(fn(5));
    + +

    :::tip

    +

    命名函数表达式真正的用处是进行调试。大多数现代的 JavaScript 环境都提供对 Error 对象的栈跟踪功能。在栈跟踪中,函数表达式的名称通常作为其入口使用。用于检查栈的设备调试器对命名函数表达式有类似的使用。

    +

    :::

    +

    总结

      +
    • 在 Eror 对象和调试器中使用命名函数表达式改进栈跟踪。
    • +
    • 谨记在错误百出的 JavaScript 环境中会提升命名函数表达式声明,并导致命名函数表达式的重复存储。
    • +
    • 考虑避免使用命名函数表达式或在发布前删除函数名。
    • +
    +

    当心局部块函数声明笨拙的作用域

    先来看一段案例

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function f() {
    return "global fff";
    }

    function test(x) {
    var result = [];
    function f() {
    return "local fff";
    }
    if (x) {
    result.push(f());
    }
    result.push(f());
    return result;
    }

    console.log(test(true)); // [ 'local fff', 'local fff' ]
    console.log(test(false)); // [ 'local fff' ]
    + +

    现在看起来丝毫没有问题,但是如果我们把 test 函数内的 f 函数移动到 if 语句块里面

    +
    {8-10}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function f() {
    return "global fff";
    }

    function test(x) {
    var result = [];
    if (x) {
    function f() {
    return "local fff";
    }
    result.push(f());
    }
    result.push(f()); // Error : f is not a function
    return result;
    }

    console.log(test(true)); // ???
    console.log(test(false)); // ???
    + +

    你或许你产生疑问为什么 13 行的代码会报错函数 f 不是在外部还定义了一个吗?为什么访问不到外部的全局 f 函数。

    +

    由于内部的函数 f 出现在 if 语句块中,因此你可能认为第一次调用 test 产生数组 [“local fff”,”globa fff”],第二次调用产生数组[“global”]。但是要记住 JavaScript 没有块级作用域,所以内部函数 f 的作用域应该是整个 test 函数。

    +

    第二个例子的合理猜测是 [“local fff”,”local fff”]和[“local fff”]。而事实上,一些 JavaScript 环境的确如此行事。但并不是所有的 JavaScript 环境都这样。其他一些环境在运行时根据包含函数 f 的块是否被执行来有条件地绑定函数 f。(不仅使代码更难理解,而且还致使性能降低。这与 with 语句没什么不同。)

    +

    关于这一点 ECMAScript 标准说了什么呢?令人惊讶的是,几乎没有。直到 ES5,JavaScript 标准才承认局部块函数声明的存在。官方指定函数声明只能出现在其他函数或者程序的最外层。ES5 甚至建议将在非标准环境的函数声明转变成警告或错误。一些流行的 JavaScript 实现在严格模式下将这类函数报告为错误(具有局部块函数声明的处于严格模式下的程序将报告一个语法错误)。这有助于检测出不可移植的代码,并为未来的标准版本在给局部块函数声明指定更明智和可移植的语义开辟了一条路。

    +

    在此期间,编写可移植的函数的最好方式是始终避免将函数声明置于局部块或子语句中。如果你想编写嵌套函数声明,应该将它置于其父函数的最外层,正如最开始的示例所示。另外,如果你需要有条件地选择函数,最好的办法是使用 var 声明和函数表达式来实现。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function f() {
    return "global";
    }

    function test(x) {
    var result = [],
    g = f;
    if (x) {
    g = function () {
    return "local";
    };
    result.push(g());
    }
    result.push(f());
    return result;
    }

    console.log(test(true)); // [ 'local', 'global' ]
    console.log(test(false)); // [ 'global' ]
    + +

    这消除了内部变量(重命名为 g)作用域的神秘性。它无条件地作为局部变量被绑定,而仅仅只有赋值语句是有条件的。结果很明确,该函数完全可移植。

    +

    总结

      +
    • 始终将函数声明置于程序或被包含的函数的最外层以避免不可移植的行为。
    • +
    • 使用 var 声明和有条件的赋值语句替代有条件的函数声明。
    • +
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/05/20/\345\211\215\347\253\257/JavaScript/02-hash \345\222\214 history \350\267\257\347\224\261\347\232\204\345\214\272\345\210\253/index.html" "b/2021/05/20/\345\211\215\347\253\257/JavaScript/02-hash \345\222\214 history \350\267\257\347\224\261\347\232\204\345\214\272\345\210\253/index.html" new file mode 100644 index 0000000000..da3d474308 --- /dev/null +++ "b/2021/05/20/\345\211\215\347\253\257/JavaScript/02-hash \345\222\214 history \350\267\257\347\224\261\347\232\204\345\214\272\345\210\253/index.html" @@ -0,0 +1,441 @@ +hash 和 history 路由的区别 | WaterBoat的博客
    加载头像

    hash 和 history 路由的区别

    hash 和 history 路由的区别

    前端路由实现方式

    路由需要实现三个功能:

    +
      +
    • 当浏览器地址变化时,切换页面;

      +
    • +
    • 点击浏览器【后退】、【前进】按钮,网页内容跟随变化;

      +
    • +
    • 刷新浏览器,网页加载当前路由对应内容;

      +
    • +
    +

    在单页面 web 网页中, 单纯的浏览器地址改变, 网页不会重载,如单纯的 hash 网址改变网页不会变化,因此我们的路由主要是通过监听事件,并利用 js 实现动态改变网页内容,有两种实现方式:

    +
      +
    • hash 模式:监听浏览器地址 hash 值变化,执行相应的 js 切换网页;

      +
    • +
    • history 模式:利用 history API 实现 url 地址改变,网页内容改变;

      +
    • +
    +

    它们的区别最明显的就是 hash 会在浏览器地址后面增加#号,而 history 可以自定义地址。

    +

    hash 模式

    使用 window.location.hash 属性及窗口的 onhashchange 事件,可以实现监听浏览器地址 hash 值变化,执行相应的 js 切换网页。下面具体介绍几个使用过程中必须理解的要点:

    +
      +
    • hash 指的是地址中#号以及后面的字符,也称为散列值。hash 也称作锚点,本身是用来做页面跳转定位的。如 http://localhost/index.html#abc,这里的#abc 就是 hash;

      +
    • +
    • 散列值是不会随请求发送到服务器端的,所以改变 hash,不会重新加载页面;

      +
    • +
    • 监听 window 的 hashchange 事件,当散列值改变时,可以通过 location.hash 来获取和设置 hash 值;

      +
    • +
    • location.hash 值的变化会直接反应到浏览器地址栏;

      +
    • +
    +

    触发 hashchange 事件的几种情况

      +
    • 浏览器地址栏散列值的变化(包括浏览器的前进、后退)会触发 window.location.hash 值的变化,从而触发 onhashchange 事件;

      +
    • +
    • 当浏览器地址栏中 URL 包含哈希如 http://www.baidu.com/#home,这时按下输入,浏览器发送http://www.baidu.com/请求至服务器,请求完毕之后设置散列值为#home,进而触发 onhashchange 事件;

      +
    • +
    • 当只改变浏览器地址栏 URL 的哈希部分,这时按下回车,浏览器不会发送任何请求至服务器,这时发生的只是设置散列值新修改的哈希值,并触发 onhashchange 事件;

      +
    • +
    • html 中<a>标签的属性 href 可以设置为页面的元素 ID 如 #top,当点击该链接时页面跳转至该 id 元素所在区域,同时浏览器自动设置 window.location.hash 属性,地址栏中的哈希值也会发生改变,并触发 onhashchange 事件;

      +
    • +
    +

    history 模式

      +
    • window.history 属性指向 History 对象,它表示当前窗口的浏览历史。当发生改变时,只会改变页面的路径,不会刷新页面。

      +
    • +
    • History 对象保存了当前窗口访问过的所有页面网址。通过 history.length 可以得出当前窗口一共访问过几个网址。

      +
    • +
    • 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航。

      +
    • +
    • 浏览器工具栏的“前进”和“后退”按钮,其实就是对 History 对象进行操作。

      +
    • +
    +

    // 当前窗口访问过多少个网页
     history.length; // 1
     ​
     // History 对象的当前状态
     // 通常是 undefined,即未设置
     history.state; // undefined

    +
      +
    • History.back():移动到上一个网址,等同于点击浏览器的后退键。对于第一个访问的网址,该方法无效果。

      +
    • +
    • History.forward():移动到下一个网址,等同于点击浏览器的前进键。对于最后一个访问的网址,该方法无效果。

      +
    • +
    • History.go():接受一个整数作为参数,以当前网址为基准,移动到参数指定的网址。如果参数超过实际存在的网址范围,该方法无效果;如果不指定参数,默认参数为 0,相当于刷新当前页面。

      +
    • +
    +

    history.back();
     history.forward();
     history.go(1); //相当于 history.forward()
     history.go(-1); //相当于 history.back()
     history.go(0); // 刷新当前页面

    +

    History.pushState()

    该方法用于在历史中添加一条记录。pushState()方法不会触发页面刷新,只是导致 History 对象发生变化,地址栏会有变化。

    +

    语法:history.pushState(object, title, url)

    +

    该方法接受三个参数,依次为:

    +
      +
    • object:是一个对象,通过 pushState 方法可以将该对象内容传递到新页面中。如果不需要这个对象,此处可以填 null。

      +
    • +
    • title:指标题,几乎没有浏览器支持该参数,传一个空字符串比较安全。

      +
    • +
    • url:新的网址,必须与当前页面处在同一个域。不指定的话则为当前的路径,如果设置了一个跨域网址,则会报错。

      +
    • +
    +

    var data = { foo: “bar” };
     history.pushState(data, “”, “2.html”);
     console.log(history.state); // {foo: “bar”}

    +

    注意:如果 pushState 的 URL 参数设置了一个新的锚点值(即 hash),并不会触发 hashchange 事件。反过来,如果 URL 的锚点值变了,则会在 History 对象创建一条浏览记录。

    +

    如果 pushState() 方法设置了一个跨域网址,则会报错。

    +

    // 报错
     // 当前网址为 http://example.com
     history.pushState(null, “”, “https://twitter.com/hello“);

    +

    History.replaceState()

    该方法用来修改 History 对象的当前记录,用法与 pushState() 方法一样。

    +

    假定当前网页是 example.com/example.html。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    history.pushState({ page: 1 }, "", "?page=1");
    // URL 显示为 http://example.com/example.html?page=1

    history.pushState({ page: 2 }, "", "?page=2");
    // URL 显示为 http://example.com/example.html?page=2

    history.replaceState({ page: 3 }, "", "?page=3");
    // URL 显示为 http://example.com/example.html?page=3

    history.back();
    // URL 显示为 http://example.com/example.html?page=1

    history.back();
    // URL 显示为 http://example.com/example.html

    history.go(2);
    // URL 显示为 http://example.com/example.html?page=3
    + +

    popstate 事件

    每当 history 对象出现变化时,就会触发 popstate 事件。

    +

    注意:

    +
      +
    • 仅仅调用 pushState()方法或 replaceState()方法 ,并不会触发该事件;
    • +
    • 只有用户点击浏览器倒退按钮和前进按钮,或者使用 JavaScript 调用 History.back()、
    • +
    • History.forward()、History.go()方法时才会触发。
    • +
    • 另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。
    • +
    • 页面第一次加载的时候,浏览器不会触发 popstate 事件。
    • +
    +

    使用的时候,可以为 popstate 事件指定回调函数,回调函数的参数是一个 event 事件对象,它的 state 属性指向当前的 state 对象。

    +
    1
    2
    3
    4
    5
    window.addEventListener("popstate", function (e) {
    //e.state 相当于 history.state
    console.log("state: " + JSON.stringify(e.state));
    console.log(history.state);
    });
    + +

    总结

    hash 路由通过 window.hashchange 事件监听变化

    +

    history 路由通过 window.popstate 事件监听变化

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/06/08/\344\277\241\345\256\211\345\267\245\345\205\267/01-\345\267\245\345\205\267\344\270\213\350\275\275\351\223\276\346\216\245/index.html" "b/2021/06/08/\344\277\241\345\256\211\345\267\245\345\205\267/01-\345\267\245\345\205\267\344\270\213\350\275\275\351\223\276\346\216\245/index.html" new file mode 100644 index 0000000000..01545a4b91 --- /dev/null +++ "b/2021/06/08/\344\277\241\345\256\211\345\267\245\345\205\267/01-\345\267\245\345\205\267\344\270\213\350\275\275\351\223\276\346\216\245/index.html" @@ -0,0 +1,351 @@ +工具下载 | WaterBoat的博客
    加载头像

    工具下载

    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    avatar
    正因你我生于繁华,弥足之花方显珍贵
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/06/08/\345\211\215\347\253\257/shell/01-windows-powerline/index.html" "b/2021/06/08/\345\211\215\347\253\257/shell/01-windows-powerline/index.html" new file mode 100644 index 0000000000..b17a65f421 --- /dev/null +++ "b/2021/06/08/\345\211\215\347\253\257/shell/01-windows-powerline/index.html" @@ -0,0 +1,413 @@ +开发工具 powershell | WaterBoat的博客
    加载头像

    开发工具 powershell

    开发工具 powershell

    前言

    用过 oh-my-zsh 的小伙伴都知道有非常好看的主题和插件,其中我最喜欢的就是一个插件就是显示自己输入过的命令,但是在 windows 下面的命令行没有发现这个功能一直让我敲代码的快感 -1,一次偶然的机会发现 Powerline 有类似的功能以此介绍了大家

    +

    可能遇到的问题

      +
    1. Restricted 执行策略不允许任何脚本运行。

      +

      AllSigned 和 RemoteSigned 执行策略可防止 Windows PowerShell 运行没有数字签名的脚本。

      +

      本主题说明如何运行所选未签名脚本(即使在执行策略为 RemoteSigned 的情况下),还说明如何对 脚本进行签名以便您自己使用。

      +

      有关 Windows PowerShell 执行策略的详细信息,请参阅 about_Execution_Policy。

      +

      解决方案 :

      +

      管理员打开 powershell

      +
      1
      2
      get-executionpolicy
      set-executionpolicy remotesigned
      + +

      一路 Y 即可

      +
    2. +
    +

    Powerline 安装

    安装完成的效果

    +

    image-20210608093958283

    +

    Windows 终端 Powerline PowerShell

    +

    字体文件

    开始安装之前请先安装字体文件

    +

    Releases · microsoft/cascadia-code (github.com)

    +

    +

    Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher

    +

    安装步骤

      +
    1. 打开 powershell
    2. +
    3. 执行命令
    4. +
    +
    1
    2
    3
    Install-Module posh-git -Scope CurrentUser
    Install-Module oh-my-posh -Scope CurrentUser
    Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck
    + +

    Posh-Git 将 Git 状态信息添加到提示,并为 Git 命令、参数、远程和分支名称添加 tab 自动补全。

    +

    Oh-My-Posh 为 PowerShell 提示符提供主题功能。

    +

    image-20210608092105902

    +
      +
    1. 全部安装完成之后导入配置
    2. +
    +

    输入 notepad $PROFILE 打开配置文件

    +

    image-20210608092128256

    +

    点击是然后输入下面的代码

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Import-Module posh-git
    Import-Module oh-my-posh
    Set-PoshPrompt cert #设置主题 如果 Set-PoshPrompt 报错就使用 Set-Theme 设置主题
    Set-PSReadLineOption -PredictionSource History # 设置预测文本来源为历史记录


    Set-PSReadlineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
    Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete # 设置 Ctrl+d 为菜单补全和 Intellisense
    Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
    Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
    Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录
    + +

    新版配置

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Import-Module posh-git
    oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\material.omp.json" | Invoke-Expression
    #设置主题 如果 Set-PoshPrompt 报错就使用 Set-Theme 设置主题
    Set-PSReadLineOption -PredictionSource History # 设置预测文本来源为历史记录


    Set-PSReadlineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
    Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete # 设置 Ctrl+d 为菜单补全和 Intellisense
    Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
    Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
    Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录
    + +
      +
    1. 然后重启 powershell
    2. +
    +

    image-20210608092419436

    +

    发现字体不对,此时右键标题栏选择属性–>字体修改之前拿到的字体文件

    +

    image-20210608092541466

    +

    image-20210608092548138

    +

    恢复正常

    +

    在 vscode 里面使用 powershell

      +
    • 在 vscode 中打开 powershell 你会发现又出现了乱码或者显示不正确,那么不用怀疑,一定是字体问题
    • +
    • 打开 setting 搜索 terminal.integrated.fontFamily 修改值为 Cascadia Code PL 即可
    • +
    +

    image-20210608093355960

    +

    主题预览

    1
    Get-PoshThemes #获取主题
    + +

    Themes | Oh My Posh

    +

    添加右键菜单

    win+R + regedit 打开注册表 进入计算机\HKEY_CLASSES_ROOT\Directory\Background\shell

    +

    image-20220326171541661

    +

    添加在当前位置打开 wt

    +
    1
    2
    "C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe\wt.exe" /d "%V\."
    # 路径
    + +

    参考

    Windows 终端 Powerline 设置 | Microsoft Docs

    +

    PSReadLine Module - PowerShell | Microsoft Docs

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/06/10/\345\211\215\347\253\257/React/03-React-hooks/index.html" "b/2021/06/10/\345\211\215\347\253\257/React/03-React-hooks/index.html" new file mode 100644 index 0000000000..94af4fd7b5 --- /dev/null +++ "b/2021/06/10/\345\211\215\347\253\257/React/03-React-hooks/index.html" @@ -0,0 +1,431 @@ +React-hooks | WaterBoat的博客
    加载头像

    React-hooks

    React-hooks

    什么是 hooks?

    Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

    +

    我们先来看一个例子,这是传统的 class 组件的

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import React from "react";

    class index extends React.component {
    state = {
    msg: "你好",
    };
    updateMsg = () => {
    this.setState({
    msg: "真好",
    });
    };
    render() {
    <div>
    <span>{this.state.msg}</span>
    <button onClick={this.updateMsg}>点击修改值</button>
    </div>;
    }
    }
    export default index;
    + +

    将上面的例子转换成 hooks 的写法

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import { useState } from "react";
    function index() {
    let [msg,setMsg] = useState("你好)
    return (
    <div>
    <span>{msg}</span>
    <button onClick={()=>updateMsg("真好")}>点击修改值</button>
    </div>
    );
    }
    + +

    仔细感受一下异同

    +

    解决的问题

      +
    • 在组件之间复用状态逻辑很难,可能要用到 render props 和高阶组件,React 需要为共享状态逻辑提供更好的原生途径,Hook 使你在无需修改组件结构的情况下复用状态逻辑
    • +
    • 复杂组件变得难以理解,Hook 将组件中相互关联的部分拆分成更小的函数(比如设置订阅或请求数据)
    • +
    • 难以理解的 class,包括难以捉摸的this
    • +
    +

    注意事项

      +
    • 只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。
    • +
    • 只能在 React 的函数组件中调用 Hook。不要在其他 JavaScript 函数中调用
    • +
    +

    hooks 规则校验插件

    eslint-plugin-react-hooks - npm (npmjs.com)

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 你的 ESLint 配置
    {
    "plugins": [
    // ...
    "react-hooks"
    ],
    "rules": {
    // ...
    "react-hooks/rules-of-hooks": "error", // 检查 Hook 的规则
    "react-hooks/exhaustive-deps": "warn" // 检查 effect 的依赖
    }
    }
    + +

    useState 声明状态和设置状态

    state 只在组件首次渲染的时候被创建。在下一次重新渲染时,useState 返回给我们当前的 state。

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import React, { useState } from "react";

    function UseState() {
    // [state, setState]
    // 创建一个名为 count 的 state 并且设置初始化的值为 0,通过 setCount(值) 来修改 count 的值
    let [count, setCount] = useState(0);

    return (
    <div className="use-state" style={{ border: "1px solid pink" }}>
    <h1>这里是 UseState 组件</h1>
    <div>{count}</div>
    <button onClick={() => setCount(count + 1)}>点击累加</button>
    </div>
    );
    }

    export default UseState;
    + +

    useReducer 替代 useState

      +
    • useState 的替代方案。它接收一个形如 (state, action) => newState 的 reducer,并返回当前的 state 以及与其配套的 dispatch 方法
    • +
    • 在某些场景下,useReducer 会比 useState 更适用,例如 state 逻辑较复杂且包含多个子值,或者下一个 state 依赖于之前的 state 等
    • +
    +
    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
    import React, { useReducer } from "react";

    const initialState = { count: 0 };
    function reducer(state, action) {
    switch (action.type) {
    case "add":
    return { count: state.count + 1 };
    case "sub":
    return { count: state.count - 1 };
    default:
    return { ...state };
    }
    }
    export default function UseReducer() {
    // reducer 函数返回值 initialState 初始化值
    const [state, dispatch] = useReducer(reducer, initialState);

    return (
    <div>
    <h1>useReducer</h1>
    <span>{state.count}</span>
    <br />
    <button onClick={() => dispatch({ type: "add" })}>+</button>
    <button onClick={() => dispatch({ type: "sub" })}>-</button>
    </div>
    );
    }
    + +

    惰性初始化

    +
    {17,1-3}
    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
    function init() {
    return initialState;
    }
    const initialState = { count: 0 };
    function reducer(state, action) {
    switch (action.type) {
    case "add":
    return { count: state.count + 1 };
    case "sub":
    return { count: state.count - 1 };
    default:
    return { ...state };
    }
    }
    export default function UseReducer() {
    // reducer 函数返回值 initialState 初始化值
    const [state, dispatch] = useReducer(reducer, initialState, init);

    return (
    <div>
    <h1>useReducer</h1>
    <span>{state.count}</span>
    <br />
    <button onClick={() => dispatch({ type: "add" })}>+</button>
    <button onClick={() => dispatch({ type: "sub" })}>-</button>
    </div>
    );
    }
    + +

    useContext 跨越关系的传值

      +
    • 接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值
    • +
    • 当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider> 的 value prop 决定
    • +
    • 当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染,并使用最新传递给 MyContext provider 的 context value 值
    • +
    • useContext(MyContext) 相当于 class 组件中的 static contextType = MyContext 或者 <MyContext.Consumer>
    • +
    • useContext(MyContext) 只是让你能够读取 context 的值以及订阅 context 的变化。你仍然需要在上层组件树中使用 <MyContext.Provider> 来为下层组件提供 context
    • +
    +
    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
    import React, { useContext } from "react";
    // 1
    const MsgContext = React.createContext("你好");
    export default function UseContext() {
    return (
    <div>
    <h1>useContext</h1>
    {/* 2 */}
    <MsgContext.Provider value={"你好"}>
    <Son></Son>
    </MsgContext.Provider>
    </div>
    );
    }

    function Son() {
    // 3
    const context = useContext(MsgContext);
    return (
    <div>
    <h1>子组件</h1>
    {/* 4 */}
    <span>{context}</span>
    </div>
    );
    }
    + +

    useEffect 模拟生命周期函数

    跟 class 组件中的 componentDidMount、componentDidUpdate 和 componentWillUnmount 具有相同的用途

    +
    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
    import { useState, useEffect } from "react";

    const UseEffect = () => {
    let [count, setCount] = useState(0);

    useEffect(() => {
    // componentDidMont
    console.log("数据渲染了");
    // componentDidUpdate
    console.log("数据更新了");
    // componentWillUmount
    return () => {
    console.log("组件卸载了");
    };
    });
    return (
    <div className="use-state" style={{ border: "1px solid pink" }}>
    <h1>这里是 UseEffect 组件</h1>
    <div>{count}</div>
    <button onClick={() => setCount(count + 1)}>点击累加</button>
    </div>
    );
    };

    export default UseEffect;
    + +

    useEffect 会在每次渲染都执行.默认情况下,它在第一次渲染之后和每次更新之后都会执行。React 保证了每次运行 effect 的同时,DOM 都已经更新完毕。

    +

    useEffect 监听 state 的变化

    如同 vue 里面的 watch 一样 react hooks 也提供了监听变量变化的功能

    +
    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
    import { useState, useEffect } from "react";

    const UseEffect = () => {
    let [count, setCount] = useState(0);

    useEffect(() => {
    // componentDidMont
    console.log("数据渲染了");
    // componentDidUpdate
    console.log("数据更新了");
    // componentWillUmount
    return () => {
    console.log("组件卸载了");
    };
    });
    // 监听 count 更新
    useEffect(() => {
    console.log("count 更新了", count);
    }, [count]);

    return (
    <div className="use-state" style={{ border: "1px solid pink" }}>
    <h1>这里是 UseEffect 组件</h1>
    <div>{count}</div>
    <button onClick={() => setCount(count + 1)}>点击累加</button>
    </div>
    );
    };

    export default UseEffect;
    + +

    useEffect 模拟 componentDidMount

    1
    2
    3
    4
    useEffect(() => {
    console.log("UseEffect.jsx 初始化");
    // 没有监听的 state
    }, []);
    + +

    useEffect 模拟 componentDidUpdate

    1
    2
    3
    4
    5
    6
    useEffect(() => {
    console.log("UseEffect.jsx conut数据变化了");
    }, [count]);
    useEffect(() => {
    console.log("UseEffect.jsx 数据变化了");
    });
    + +

    useEffect 模拟 componentWillUnmount

    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
    import React, { useState, useEffect } from "react";

    export default function UseEffect() {
    let [count, setCount] = useState(0);
    let [flag, setFlag] = useState(true);

    return (
    <div>
    <h1>useEffect</h1>
    <div>{count}</div>
    <button onClick={() => setCount(count + 1)}>点击累加</button>
    <button onClick={() => setFlag(!flag)}>显示/隐藏</button>
    {flag && <Son></Son>}
    </div>
    );
    }

    function Son() {
    useEffect(() => {
    return () => {
    console.log("useEffect.jsx 组件卸载了");
    };
    }, []);
    return (
    <div>
    <h1>子组件</h1>
    </div>
    );
    }
    + +

    useLaoutEffect 在视图更新前执行

    useLayoutEffectuseEffect 两个方法的作用和使用方式都是一样的,都是用来处理副作用代码的,它们之间唯一的区别就是回调函数的执行时机不同。

    +

    qJ9LwV.png

    +

    useEffect 在组件视图更新完成后执行,组件状态发生变化 -> 比较状态差异 -> 视图更新 -> useEffect

    +

    qJ9qe0.png

    +
    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
    import { useLayoutEffect, useRef, useState } from "react";

    function LayoutEffect() {
    const [isShow, setIsShow] = useState(false);
    const divRef = useRef<HTMLDivElement>(null);
    // 此处如果使用 useEffect 就是出现元素闪烁问题
    // 就是元素先出现在原始位置, 再出现在目标位置
    // useEffect 是先渲染DOM 再执行
    // useLayoutEffect 是先执行, 再渲染DOM
    useLayoutEffect(() => {
    if (!divRef.current) return;
    divRef.current.style.top = "100px";
    }, [isShow]);
    return (
    <>
    <h1>useLayoutEffect</h1>
    <button onClick={() => setIsShow(!isShow)}>button</button>
    {isShow ? (
    <div ref={divRef} style={{ position: "relative" }}>
    useLayoutEffect
    </div>
    ) : null}
    </>
    );
    }
    export default LayoutEffect;
    + +

    useRef 获取 Dom 元素

      +
    • useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)
    • +
    • 返回的 ref 对象在组件的整个生命周期内保持不变
    • +
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import React, { useRef } from "react";

    export default function UseRec() {
    const h1Ref = useRef();
    const test = () => {
    console.dir(h1Ref.current);
    h1Ref.current.innerText = "useRef 被修改了";
    };
    return (
    <div>
    <h1 ref={h1Ref}>useRef</h1>
    <button onClick={test}>获取 h1</button>
    </div>
    );
    }
    + +

    ref 转发 让父元素可以使用子元素的 ref

    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
    import React, { forwardRef, useRef } from "react";
    const ForwardRef = () => {
    return (
    <div>
    <h1>ForwardRef</h1>
    <Father></Father>
    </div>
    );
    };
    const Father = () => {
    let inputRef = useRef();
    const changeInputValue = () => {
    inputRef.current.value = "Hello";
    };
    return (
    <div>
    <button onClick={changeInputValue}>我是 Father </button>
    <Son ref={inputRef}></Son>
    </div>
    );
    };
    const Son = forwardRef((props, ref) => {
    // let inputRef = useRef();
    const changeInputValue = () => {
    ref.current.value = "Hello";
    };
    return (
    <div>
    <input type="text" ref={ref} />
    <button onClick={changeInputValue}>我是 Son </button>
    </div>
    );
    });

    export default ForwardRef;
    + +

    memo 优化组件

    父组件更新引起了子组件的不必要更新,因为子组件本身是没有任何变化的是没有必要更新的。

    +
    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
    // src/App.js
    import { useEffect, useState, memo } from "react";

    function ShowName({ name }: any) {
    useEffect(() => {
    console.log("ShowName rendered");
    });
    return <div>{name}</div>;
    }
    // memo 方法内部采用的是浅层比较,比较基本数据类型的值是否相同,比较引用类型是否为相同的引用地址。
    // memo 方法的第二个参数即为比较函数,可以通过它解决以上问题。比较函数的第一个参数为 prevProps,比较函数的第二个参数为 nextProps, 比较函数返回 true 不进行渲染,比较函数返回 false 组件重新渲染。
    function compare(prev: any, cur: any) {
    return prev.obj.sex === cur.obj.sex;
    }

    const MemoShowName = memo(ShowName, compare);

    function Memo() {
    const [index, setIndex] = useState(0);
    const [name] = useState("张三");
    useEffect(() => {
    const timer = setInterval(() => {
    setIndex((prev) => prev + 1);
    }, 1000);
    return () => clearInterval(timer);
    }, []);
    return (
    <>
    <h1>Memo</h1>
    <p>{index}</p>
    <MemoShowName name={name} obj={{ sex: "" }} />
    </>
    );
    }
    export default Memo;
    + +

    useMemo 对值进行缓存

    通过 useMemo 方法可以对组件中的值进行缓存,就是说在每次组件重新渲染时都返回相同的值,也可以指定哪些状态发生改变时重新计算该值。

    +

    useMemo 有助于避免在每个渲染上进行昂贵的计算,提升组件性能。

    +
    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
    import { useEffect, useMemo, useState } from "react";

    function App() {
    const [number, setNumber] = useState(0);
    const [dark, setDark] = useState(false);
    const double = useMemo(() => {
    return slowFunction(number);
    }, [number]);
    const styles = useMemo(() => {
    return {
    background: dark ? "black" : "white",
    color: dark ? "white" : "black",
    };
    }, [dark]);
    useEffect(() => {
    console.log("styles");
    }, [styles]);
    return (
    <div>
    <input
    type="number"
    value={number}
    onChange={(event) => setNumber(event.target.value)}
    />
    <div style={styles} onClick={() => setDark(!dark)}>
    {double}
    </div>
    </div>
    );
    }

    function slowFunction(n) {
    for (let i = 0; i < 1000000000; i++) {}
    return n * 2;
    }

    export default App;
    + +

    useCallback 缓存函数

    通过 useCallback 方法可以缓存函数,使用组件每次重新渲染都返回相同的函数实例,也可以指定当某个状态发生变化后返回新的函数实例。

    +
    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
    import { useCallback, useEffect, useState } from "react";

    export default function UseCallBack() {
    const [number, setNumber] = useState(1);
    const [dark, setDark] = useState(false);
    const styles = {
    background: dark ? "black" : "white",
    color: dark ? "white" : "black",
    };
    // 缓存
    const getItems = useCallback(() => {
    return [number, number + 1, number + 2];
    }, [number]);
    return (
    <div style={styles}>
    <h1>useCallback</h1>
    <input
    type="number"
    value={number}
    onChange={() => setNumber((prev) => prev + 1)}
    />
    <button onClick={() => setDark((dark) => !dark)}>button</button>
    <List getItems={getItems} />
    </div>
    );
    }

    function List({ getItems }) {
    const [items, setItems] = useState([]);

    useEffect(() => {
    setItems(getItems());
    console.log("update items");
    }, [getItems]);

    return (
    <div>
    {items.map((item) => (
    <p key={item}>{item}</p>
    ))}
    </div>
    );
    }
    + +

    useImperativeHandle 子向父传值

    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
    import { useRef, forwardRef, useImperativeHandle, useState } from "react";

    let Message = forwardRef((props: any, ref: any) => {
    const [text, setText] = useState("");
    const inputRef = useRef<HTMLInputElement>(null);
    useImperativeHandle(ref, () => {
    return {
    getText() {
    return text;
    },
    input: inputRef.current,
    };
    });
    return (
    <input
    ref={inputRef}
    type="text"
    value={text}
    onChange={(event) => setText(event.target.value)}
    />
    );
    });
    export default function UseImperativeHandle() {
    const messageRef = useRef<any>(null);
    const onClickHandler = () => {
    console.log(messageRef.current.getText());
    console.log(messageRef.current.input);
    };
    return (
    <>
    <h1>UseImperativeHandle</h1>
    <Message ref={messageRef}></Message>
    <button onClick={onClickHandler}>button</button>
    </>
    );
    }
    + +

    一些小技巧

    手动更新组件

    1
    2
    3
    4
    import { useCallback, useState } from "react";
    let [, updateState] = useState({});
    const forceUpdate = useCallback(() => updateState({}), []);
    <button onClick={() => forceUpdate}>更新组件</button>;
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/06/10/\345\211\215\347\253\257/React/04-React\345\270\270\347\224\250\345\272\223/index.html" "b/2021/06/10/\345\211\215\347\253\257/React/04-React\345\270\270\347\224\250\345\272\223/index.html" new file mode 100644 index 0000000000..0383a2c49b --- /dev/null +++ "b/2021/06/10/\345\211\215\347\253\257/React/04-React\345\270\270\347\224\250\345\272\223/index.html" @@ -0,0 +1,398 @@ +React-常用库 | WaterBoat的博客
    加载头像

    React-常用库

    React-常用库

    5 个用于 React 项目的延迟加载库

    1. react-lazyload

    react-lazyload 可用于延迟加载 React 应用程序中的任何类型的组件。它是 React 社区中最流行的延迟加载库之一,支持装饰器和服务器端渲染。其特点如下:

    +
      +
    • 具有一组属性,使用户能够自定义组件的功能。
    • +
    • 提供诸如 forceCheck 之类的实用程序来显示隐藏的内容,这些内容在没有调整大小或滚动事件的情况下变得可见。
    • +
    • 开箱即用支持水平延迟加载。
    • +
    • 只为所有延迟加载的组件实现两个事件监听器,进一步优化性能。
    • +
    +

    GitHub:github.com/twobin/reac…

    +

    2. react-lazy-load

    react-lazy-load 是一个 React 组件,可用于以可预测的方式延迟加载内容。它相对较快,具有最小的包大小(缩小为 6KB)。其特点如下:

    +
      +
    • 自动检测滚动容器,例如带有滚动条的

      +

      ,因此甚至可以在滚动容器内使用。

      +
    • +
    • 允许用户设置阈值以从视口的任何一侧开始内容加载,使用诸如 offsetVertical、offsetHorizontal、offsetTop、offsetBottom 等属性。

      +
    • +
    • 在 IE8+ 中工作。

      +
    • +
    • 具有对防抖功能的内置支持。

      +
    • +
    +

    但是,与 react-lazyload 库相比,该组件的 props 数量非常有限,因此提供的灵活性较低。主要缺点是它不允许用户为延迟加载的组件应用占位符。

    +

    GitHub:github.com/loktar00/re…

    +

    3. react-lazy-load-image-component

    react-lazy-load-image-component 是一个易于使用的库,用于延迟加载任何类型的组件。它支持 IntersectionObserver,可以确定元素何时离开和进入视口。其特点如下:

    +
      +
    • 这个库最重要的特性是它的 HOC,trackWindowScroll,它允许组件跟踪窗口滚动位置,而无需为每个元素使用滚动或调整大小事件侦听器。
    • +
    • 默认情况下,延迟加载的组件的偏移量为 100 像素。
    • +
    • 内置的可见效果(例如模糊、黑白和不透明过渡)有助于改善用户体验。
    • +
    • 服务器端渲染兼容。
    • +
    • 支持 TypeScript 声明。
    • +
    • 占位符默认提供与图像或组件相同的大小,但可以自定义。
    • +
    +

    Github:github.com/Aljullu/rea…

    +

    4. react-lazy-images

    react-lazy-images 是一个灵活的库,它提供组件和实用程序来延迟加载 React 中的图像。它使用 render props.为调用者提供了完全的表现控制。其特点如下:

    +
      +
    • 使用 IntersectionObserver 和 polyfill 来提高性能。
    • +
    • 为禁用 SEO 和 JavaScript 的环境提供后备策略。
    • +
    • 支持服务器端渲染。
    • +
    • 支持背景图像并与水平滚动一起使用。
    • +
    +

    GitHub:github.com/fpapado/rea…

    +

    5. react-lazy-blur-image

    react-lazy-blur-image 是将图像延迟加载到低分辨率占位符中的理想库。默认情况下,该组件显示一个轻量级的灰色占位符,并在组件即将到达视口时替换为实际占位符。仅当实际图像完全延迟加载时,才会替换此占位符。其特点如下:

    +
      +
    • 它为延迟加载图像提供了一种简约的方法,提供了完美的用户体验和性能平衡。
    • +
    • 该组件只接受两个自定义属性:**src **和 style。
    • +
    • 组件可以使用 **styled-components **从占位符转换图像。
    • +
    +

    GitHub:github.com/meienberger…

    +

    https://juejin.cn/post/7077368722125488141

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/09/29/\345\211\215\347\253\257/Nuxt/01-Nuxt/index.html" "b/2021/09/29/\345\211\215\347\253\257/Nuxt/01-Nuxt/index.html" new file mode 100644 index 0000000000..4bb875e391 --- /dev/null +++ "b/2021/09/29/\345\211\215\347\253\257/Nuxt/01-Nuxt/index.html" @@ -0,0 +1,699 @@ +Nuxt 笔记 | WaterBoat的博客
    加载头像

    Nuxt 笔记

    Nuxt 笔记

    Nuxt 是什么?

    Nuxt.js 是一个基于 Vue.js 的通用应用框架。

    +

    通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染

    +

    我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。

    +

    Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。

    +

    除此之外,我们还提供了一种命令叫:nuxt generate ,为基于 Vue.js 的应用提供生成对应的静态站点的功能。

    +

    我们相信这个命令所提供的功能,是向开发集成各种微服务(Microservices)的 Web 应用迈开的新一步。

    +

    作为框架,Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性,例如异步数据加载、中间件支持、布局支持等。

    +

    目录结构

    Nuxt.js 的默认应用目录架构提供了良好的代码分层结构,适用于开发或大或小的应用。当然,你也可以根据自己的偏好组织应用代码。

    +

    pages 目录

    Nuxt.js 会依据 pages 目录中的所有 *.vue 文件生成应用的路由配置

    +

    资源(assets)目录

    资源目录 assets 用于组织未编译的静态资源如 LESS、SASS 或 JavaScript。

    +
      +
    1. assets 目录,会被 webpack 打包
    2. +
    3. 访问路径,~/assets/路径
    4. +
    5. 最终是使用 require(路径)
    6. +
    +
    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
    <template>
    <div>
    <img src="~assets/img/芭芭拉.gif" alt="" />
    <img src="~/assets/img/芭芭拉.gif" alt="" />
    <div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
    </div>
    <div class="inline" :style="keli"></div>
    </div>
    </template>

    <script>
    const keli = require(`~/assets/img/可莉.gif`);
    export default {
    data() {
    return {
    keli: `background: url(${keli}) no-repeat;`,
    };
    },
    };
    </script>

    <style>
    img {
    width: 200px;
    }
    .box1 {
    display: inline-block;
    width: 200px;
    height: 200px;
    background: url(~assets/img/甘雨.gif) no-repeat;
    background-size: contain;
    }
    .box2 {
    display: inline-block;
    width: 200px;
    height: 200px;
    background: url(~/assets/img/甘雨.gif) no-repeat;
    background-size: contain;
    }
    .inline {
    width: 200px;
    height: 200px;
    background-size: contain !important;
    }
    </style>
    + +

    组件(components)目录

    组件目录 components 用于组织应用的 Vue.js 组件。Nuxt.js 不会扩展增强该目录下 Vue.js 组件,即这些组件不会像页面组件那样有 asyncData 方法的特性。

    +

    布局(layouts)目录

    布局目录 layouts 用于组织应用的布局组件。
    若无额外配置,该目录不能被重命名

    +

    默认的布局文件是 layouts/default.vue

    +

    布局文件中,使用 <Nuxt />可以看成 vue-router 的占位,把路由匹配到页面组件放到的该位置

    +

    404 页面

    +

    中间件目录(middleware)目录

    middleware 目录用于存放应用的中间件。

    +

    插件(plugins)目录

    插件目录 plugins 用于组织那些需要在 根 vue.js 应用 实例化之前需要运行的 Javascript 插件。

    +

    静态文件(static)目录

    静态文件目录 static 用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。服务器启动的时候,该目录下的文件会映射至应用的根路径 / 下。

    +

    举个例子: /static/robots.txt 映射至 /robots.txt

    +
      +
    1. 该目录下的文件,不会被 webpack 打包
    2. +
    3. 访问时直接写 static 目录下的文件路径, (譬如) /imgs/xxx
    4. +
    5. 无论是 assets 还是 static 使用行内样式加载图片资源时,全部统一写法: require(~/静态资源目录/路径)
    6. +
    +
    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
    49
    <template>
    <div>
    <img src="/img/芭芭拉.gif" alt="" />
    <img src="/img/芭芭拉.gif" alt="" />
    <div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
    </div>
    <div class="inline" :style="keli"></div>
    </div>
    </template>

    <script>
    // const keli = require(`~img/可莉.gif`)
    // 尽量使用英文文件名
    const keli = require("~/static/img/1.gif");
    export default {
    data() {
    return {
    keli: `background: url(${keli}) no-repeat;`,
    };
    },
    };
    </script>

    <style>
    img {
    width: 200px;
    }
    .box1 {
    display: inline-block;
    width: 200px;
    height: 200px;
    background: url(/img/甘雨.gif) no-repeat;
    background-size: contain;
    }
    .box2 {
    display: inline-block;
    width: 200px;
    height: 200px;
    background: url(/img/甘雨.gif) no-repeat;
    background-size: contain;
    }
    .inline {
    width: 200px;
    height: 200px;
    background-size: contain !important;
    }
    </style>
    + +

    Store 目录

    store 目录用于组织应用的 Vuex 状态树 文件。 Nuxt.js 框架集成了 Vuex 状态树 的相关功能配置,在 store 目录下创建一个 index.js 文件可激活这些配置。

    +

    nuxt.config.js 文件

    nuxt.config.js 文件用于组织 Nuxt.js 应用的个性化配置,以便覆盖默认配置。

    +

    package.json 文件

    package.json 文件用于描述应用的依赖关系和对外暴露的脚本接口。

    +

    别名

    别名 目录
    ~ 或 @ srcDir
    ~~ 或 @@ rootDir
    默认情况下,srcDir 和 rootDir 相同。

    +

    提示: 在您的 vue 模板中, 如果你需要引入 assets 或者 static 目录, 使用 ~/assets/your_image.png 和 ~/static/your_image.png 方式。

    +

    路由

    Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

    +

    :::tip

    +

    要在页面之间使用路由,我们建议使用nuxt-link 标签。

    +

    :::

    +

    基础路由

    假设 pages 的目录结构如下:

    +
    1
    2
    3
    4
    5
    pages/
    --| user/
    -----| index.vue
    -----| _id.vue
    --| index.vue
    + +

    那么,Nuxt.js 自动生成的路由配置如下:

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    router: {
    routes: [
    {
    name: "index",
    path: "/",
    component: "pages/index.vue",
    },
    {
    name: "user",
    path: "/user",
    component: "pages/user/index.vue",
    },
    {
    name: "user-one",
    path: "/user/?id",
    component: "pages/user/_id.vue",
    },
    ];
    }
    + +

    路由传参

    很多时候我们需要在路由上传参数,路由上的参数有两种

    +
      +
    • 路径参数:/about/100
    • +
    • 查询参数: /about?id=100&name=李四
    • +
    +
    方式 1:查询参数
    + + + + + + + + + + + + + + + + + +
    路径对应文件页面中接受
    /about?hello=100pages/about.vue$route.query.hello
    /about/?hello=123&jack=456pages/about.vue$route.query.hello/$route.query.jack
    +
    方式 2:路径参数
    + + + + + + + + + + + + + + + + + + + + + + +
    路径对应文件页面中接受
    /about/123/goods/_id.vue$route.params.id
    /goods/100/goods/_i.vue$route.params.i
    /goods/100/200/goods/_cid/_gid$route.params.cid/$route.params.gid
    +

    1

    +

    目录结构

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ├─pages
    | ├─index.vue
    | ├─user.vue
    | ├─user
    | | ├─child1.vue
    | | └child2.vue
    | ├─about
    | | ├─_id.vue
    | | ├─_cid
    | | | └_gid.vue
    ├─layouts
    | └default.vue
    + +

    pages/about/_.id.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <template>
    <div>
    <h1>查询参数</h1>
    <h2>{{ $route.query.hello }}</h2>
    <h2>{{ $route.query.jack }}</h2>
    <h1>路径参数</h1>
    <h2>{{ $route.params.id }}</h2>
    </div>
    </template>
    + +

    pages/about/*_cid/_*gid.vue

    +
    1
    2
    3
    4
    5
    6
    7
    <template>
    <div>
    <h1>路径参数</h1>
    <h2>{{ $route.params.cid }}</h2>
    <h2>{{ $route.params.gid }}</h2>
    </div>
    </template>
    + +

    layouts/default.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <template>
    <div>
    <nuxt-link to="/">Home</nuxt-link>
    <nuxt-link to="/user">user</nuxt-link>
    <br />
    <nuxt-link to="/about/123">路径参数/about/123</nuxt-link>
    <nuxt-link to="/about/123/456">路径参数/about/123/456</nuxt-link>
    <nuxt-link to="/about/?hello=123&jack=456"
    >查询参数/about/?hello=123&jack=456</nuxt-link
    >
    <!-- 显示 pages/index.vue -->
    <Nuxt></Nuxt>
    </div>
    </template>
    + +
    总结:

    使用区别:

    +
      +
    • 查询参数? 不利于 SEO, 百度再抓取我们页面时,如果用? 只会抓取一个页面
        +
      • content/?id=1
      • +
      • content/?id=2
      • +
      • content/?id=3
      • +
      +
    • +
    • 推荐使用路径参数
    • +
    +

    路由参数校验

    Nuxt.js 可以让你在动态路由组件中定义参数校验方法。

    +

    pages/users/_id.vue

    +
    1
    2
    3
    4
    5
    6
    export default {
    validate({ params }) {
    // 必须是number类型
    return /^\d+$/.test(params.id);
    },
    };
    + +

    如果校验方法返回的值不为 truePromise中 resolve 解析为false或抛出 Error , Nuxt.js 将自动加载显示 404 错误页面或 500 错误页面。

    +

    页面校验 API

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // pages/index.vue
    <template>
    <div>
    <h1>home</h1>
    <nuxt-link to="/user/123">/user/123</nuxt-link>
    </div>
    </template>

    // pages/user/_id.vue
    <template>
    <div>
    <h1>传过来的参数{{ $route.params.id }}</h1>
    </div>
    </template>
    + +

    嵌套路由

    你可以通过 vue-router 的子路由创建 Nuxt.js 应用的嵌套路由。

    +

    创建内嵌子路由,你需要添加一个 Vue 文件,同时添加一个与该文件同名的目录用来存放子视图组件。

    +

    :::warning

    +

    别忘了在父组件(.vue文件) 内增加 <nuxt-child/> 用于显示子视图内容。

    +

    :::

    +

    一个小案例

    +

    1

    +

    目录结构

    +
    1
    2
    3
    4
    5
    6
    7
    8
    ├─pages
    | ├─index.vue
    | ├─user.vue
    | ├─user
    | | ├─child1.vue
    | | └child2.vue
    ├─layouts
    | └default.vue
    + +

    pages/index.vue

    +
    1
    2
    3
    4
    5
    <template>
    <div>
    <h1>index首页</h1>
    </div>
    </template>
    + +

    pages/user.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <template>
    <div>
    <h1>user</h1>
    <nuxt-link to="/user/child1">child1</nuxt-link>
    <nuxt-link to="/user/child2">child2</nuxt-link>
    <!-- 注意父级 user 写上 nuxt-child 虽然 user/index.vue 也能匹配路由 /user 但是需要 user.vue 在父级才可以使用 nuxt-child -->
    <nuxt-child></nuxt-child>
    </div>
    </template>
    + +

    pages/child1.vue pages/child2.vue

    +
    1
    2
    3
    <template>
    <div><h1>child1</h1></div>
    </template>
    + +

    layouts/default.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <template>
    <div>
    <nuxt-link to="/">Home</nuxt-link>
    <nuxt-link to="/user">user</nuxt-link>
    <!-- 显示 pages/index.vue -->
    <Nuxt></Nuxt>
    </div>
    </template>

    <style>
    html,
    body {
    text-align: center;
    }
    </style>
    + +

    未知嵌套深度的动态嵌套路由

    如果您不知道 URL 结构的深度,您可以使用_.vue动态匹配嵌套路径。这将处理与更具体请求不匹配的情况。

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    路由文件
    /index.vue
    /peoplepeople/index.vue
    /about/132about/_id.vue
    /any_.vue
    /any/woc_.vue
    +

    处理 404 页面,现在符合_.vue页面的逻辑

    +

    脚手架配置

    nuxt.config.js

    +
    1
    components: true; // 自动在页面组件中导入components目录下的组件
    + +

    预处理器配置

    Nuxt - Configuration (nuxtjs.org)

    +

    全局 css 变量

    1
    yarn add @nuxtjs/style-resources
    + +
    1
    2
    3
    4
    5
    6
    7
    8

    buildModules: [
    '@nuxtjs/style-resources',
    ],

    styleResources: {
    less:['~/assets/less/xxx.less'] // 全局变量
    }
    + +

    配置 404 页面

    在 layouts 目录下创建 error.vue 文件即可匹配不存在的路由

    +

    配置 Loading 组件

    components/LoadingBar.vue

    +
    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
    <template lang="html">
    <div class="loading-page" v-if="loading">
    <p>Loading...</p>
    </div>
    </template>

    <script>
    export default {
    data: () => ({
    loading: false,
    }),
    methods: {
    start() {
    this.loading = true;
    },
    finish() {
    this.loading = false;
    },
    },
    };
    </script>

    <style scoped>
    .loading-page {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(255, 255, 255, 0.8);
    text-align: center;
    padding-top: 200px;
    font-size: 30px;
    font-family: sans-serif;
    }
    </style>
    + +

    nuxt.config.js

    +
    1
    2
    3
    export default {
    loading: "~/components/LoadingBar.vue",
    };
    + +

    pages/index.js 使用

    +
    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
    <template>
    <div id="box">
    <h1>index首页</h1>
    </div>
    </template>

    <script>
    export default {
    mounted() {
    // DOM 更新完毕之后调用 loading
    this.$nextTick(() => {
    // 调用 loading 中的方法,记得在 nux.config.js 里面配置
    this.$nuxt.$loading.start();
    setTimeout(() => this.$nuxt.$loading.finish(), 3000);
    });
    },
    };
    </script>

    <style>
    html,
    body {
    height: 100%;
    }

    #box {
    width: 800px;
    height: 500px;
    margin: 0 auto;
    border: 1px solid;
    text-align: center;
    }
    </style>
    + +

    asyncData 处理异步数据

    此方法会在服务端获取并渲染数据

    +

    asyncData 方法会在组件(pages 组件)每次加载之前被调用

    +

    在这个方法被调用的时候,第一个参数被设定为当前页面的上下文对象,你可以利用 asyncData方法来获取数据并返回给当前组件。

    +
    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
    <template>
    <div>
    <h1>{{ip}}</h1>
    <ul>
    <li v-for="item in data" :key="item.id">{{item.title}}</li>
    </ul>
    </div>
    </ul>
    </template>

    <script lang="ts">
    import Vue from 'vue'
    export default Vue.extend({
    async asyncData(context) {
    const ip = await context.$axios.$get('http://icanhazip.com')
    const { data } = await context.$axios.$get('https://cnodejs.org/api/v1/topics', {
    params: {
    page: 1,
    tab: 'ask',
    },
    })
    console.log(context)
    // console.log(data)
    return { ip,data }
    },
    })
    </script>

    <style lang="scss">
    $red: red;
    div {
    color: $red;
    }
    </style>
    + +

    fetch 处理数据

    fetch 方法用于在渲染页面前填充应用的状态树(store)数据, 与 asyncData 方法类似,不同的是它不会设置组件的数据。

    +

    如果页面组件设置了 fetch 方法,它会在组件每次加载前被调用(在服务端或切换至目标路由之前)。

    +

    开发中会经常调用接口,返回的数据需要公共使用,需要把数据存到 vuex 上,可以在 fetch 中完成

    +

    :::warning

    +

    您无法在内部使用this获取组件实例fetch是在组件初始化之前被调用

    +

    :::

    +

    pages/index.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <template>
    <div class="box">
    <h1>index</h1>
    <nuxt-link to="/about">about</nuxt-link>
    <ul v-for="item in list">
    <li>{{ item.title }}</li>
    </ul>
    </div>
    </template>

    <script>
    import { mapState } from "vuex";
    export default {
    async fetch({ $axios, store }) {
    let {
    data: { data: list },
    } = await $axios.get("https://cnodejs.org/api/v1/topics");
    store.commit("update", list);
    },
    computed: {
    ...mapState(["list"]),
    },
    };
    </script>
    + +

    store/index.js

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    export const state = function () {
    return {
    list: [],
    test: "123",
    };
    };

    export const mutations = {
    update(state, payload) {
    state.list = payload;
    },
    };
    + +

    动画 transition

    Nuxt.js 使用 Vue.js 的 transition组件来实现路由切换时的过渡动效。默认类目是.page 开通

    +

    过渡类名

    1
    2
    3
    4
    5
    6
    .page-enter,
    .page-leave-to {
    }
    .page-enter-active,
    .page-leave-active {
    }
    + +

    layouts/default.vue

    +
    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
    <
    <template>
    <div class="box">
    <nuxt-link to="/">home</nuxt-link>
    <nuxt-link to="/about">about</nuxt-link>
    <nuxt-link to="/user">user</nuxt-link>
    <Nuxt></Nuxt>
    </div>
    </template>

    <style>
    html,
    body {
    text-align: center;
    }
    a {
    padding: 0 20px;
    }
    .page-enter,
    .page-leave-to {
    opacity: 0;
    }

    .page-enter-active,
    .page-leave-active {
    transition: opacity 0.8s;
    }
    </style>
    + +

    动画类名

      +
    1. 使用 transtion 属性在页面组件指定自定义动画名称
    2. +
    3. 在布局文件
    4. +
    +
    1
    2
    3
    xxx-enter-active,
    xxx-leave-active {
    }
    + +

    layouts/default.vue

    +
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <
    <template>
    <div class="box">
    <nuxt-link to="/">home</nuxt-link>
    <nuxt-link to="/about">about</nuxt-link>
    <nuxt-link to="/user">user</nuxt-link>
    <Nuxt></Nuxt>
    </div>
    </template>

    <script>
    export default {};
    </script>

    <style>
    html,
    body {
    text-align: center;
    }
    a {
    padding: 0 20px;
    }
    .page-enter,
    .page-leave-to {
    opacity: 0;
    }

    .page-enter-active,
    .page-leave-active {
    transition: opacity 0.8s;
    }

    .bounce-enter-active {
    animation: bounce-in 0.8s;
    }

    .bounce-leave-active {
    animation: bounce-out 0.5s;
    }

    @keyframes bounce-in {
    0% {
    transform: scale(0);
    }

    50% {
    transform: scale(1.25);
    }

    100% {
    transform: scale(1);
    }
    }

    @keyframes bounce-out {
    0% {
    transform: scale(1);
    }

    50% {
    transform: scale(1.25);
    }

    100% {
    transform: scale(0);
    }
    }
    </style>
    + +

    pages/user.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <template>
    <h1>hi user</h1>
    </template>

    <script>
    export default {
    // 使用动画
    transition: "bounce",
    };
    </script>
    + +

    API: transition 属性 - NuxtJS | Nuxt.js 中文网

    +

    中间件 middleware

      +
    1. 中间件就是一个函数, 运行在客户端或者服务端
    2. +
    3. 项目启动或者刷新页面,运行在服务端
    4. +
    5. 切换路由,运行在客户端
    6. +
    7. process.server / process.static 判断执行环境
    8. +
    +

    ​ 执行顺序:

    +
      +
    1. nuxt.config.js

      +
    2. +
    3. 布局文件(layouts)

      +
    4. +
    5. 页面文件(pages)

      +
    6. +
    7. 全局中间件, 整个项目都可以使用

      +
        +
      1. middleware 目录下 xxx.js

        +
      2. +
      3. nuxt.config.js 全局注册

        +
        1
        2
        3
        router: {
        middleware: "全局中间件名称";
        }
        +
      4. +
      5. 整个项目路由切换时或者刷新页面时,全局中间件都会执行

        +
      6. +
      +
    8. +
    +

    全局中间件

    nuxt.config.js

    +
    1
    2
    3
    4
    5
    export default {
    router: {
    middleware: "index1",
    },
    };
    + +

    middleware/index1.js

    +
    1
    2
    3
    export default () => {
    console.log("这里是中间件");
    };
    + +

    局部中间件

    2.布局中的中间件

    +
      +
    1. middleware 目录下 xxx.js
    2. +
    +

    middleware/pagesMiddleware.js

    +
    1
    2
    3
    export default () => {
    console.log("pages 中间件");
    };
    + +
      +
    1. 在布局文件中使用 middleware:’中间件名称’
    2. +
    +

    layouts/default.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <template>
    <div>
    <h1>这里是 layouts</h1>
    <Nuxt></Nuxt>
    </div>
    </template>

    <script>
    export default {
    // 使用中间件
    middleware: "layoutsMiddleware",
    };
    </script>
    + +

    3.页面中的中间件

    +
      +
    1. middleware 目录下 xxx.js
    2. +
    3. 在页面文件中使用 middleware:’中间件名称’
    4. +
    +

    使用方法同上面

    +

    中间件

    +

    插件 plugins

    插件的注册

    插件需要在 nuxt.config.js 内的 plugins 内进行注册才可以调用

    +

    nuxt.config.js

    +
    1
    2
    3
    export default {
    plugins: ["插件的目录/xxx.js", { src: "插件的路径/xx.js" }],
    };
    + +

    默认插件

      +
    1. 就是一个 plugins/js 文件
    2. +
    3. 项目启动时/根目录刷新, 会在客户端和服务端都执行一次,此时要注意区分环境
    4. +
    5. 路由切换时,该插件不执行
    6. +
    +

    客户端/服务端插件

    nuxt.config.js

    +
    1
    2
    3
    4
    5
    6
    plugins:[
    '~/plugins/xxx.js' // 两端都会执行
    {src:'~/plugins/xxx.js', mode:'client'} // 客户端
    {src:'~/plugins/xx.js', mode:'server'} // 服务端
    {src:'~/plugins/xx.js', mode:'both'} // 两端
    ]
    + +

    插件注入

    注入 vue 实例

    plugins/test.js

    +
    1
    2
    3
    4
    5
    6
    7
    import vue from "vue";

    export default function () {
    // 注入 vue 原型
    vue.prototype.$test = "这里是test";
    console.log("插件执行了");
    }
    + +

    pages/index.vue

    +
    1
    2
    3
    4
    5
    6
    7
    <script>
    export default {
    created() {
    console.log(this.$test); // "这里是test"
    },
    };
    </script>
    + +

    注入 context 实例

    asyncDatafetch中可以获取到 context

    +

    plugins/client.js

    +
    1
    2
    3
    4
    export default (context) => {
    context.app.myClient = "这里是客户端";
    console.log("指定在客户端运行");
    };
    + +

    pages/index.vue

    +
    1
    2
    3
    4
    5
    6
    7
    <script>
    export default {
    asyncData(context) {
    console.log(context.app.myClient);
    },
    };
    </script>
    + +

    同时注入

    如果您需要同时在contextVue实例,甚至Vuex中同时注入,您可以使用inject方法,它是 plugin 导出函数的第二个参数。将内容注入 Vue 实例的方式与在 Vue 应用程序中进行注入类似。系统会自动将$添加到方法名的前面。

    +

    plugins/test.js

    +
    1
    2
    3
    4
    5
    6
    export default function (context, inject) {
    inject("myServer", () => {
    return "这里是 server";
    });
    console.log("插件执行了");
    }
    + +

    pages/index.vue

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script>
    export default {
    created(context) {
    let str = this.$myServer();
    console.log(str); //这里是 server
    },
    asyncData(context) {
    console.log(context.app.$myServer()); //这里是 server
    },
    };
    </script>
    + +

    vuex 的使用

    nuxt 内置了 vuex 所以使用的时候不需要再次安装 vuex

    +

    Nuxt.js 会尝试找到 src 目录(默认是应用根目录)下的 store 目录,如果该目录存在,它将做以下的事情:

    +
      +
    1. 引用 vuex 模块
    2. +
    3. vuex 模块 加到 vendors 构建配置中去
    4. +
    5. 设置 Vue 根实例的 store 配置项
    6. +
    +

    Nuxt.js 支持两种使用 store 的方式,你可以择一使用:

    +
      +
    • 模块方式: store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块 (当然,index 是根模块)
    • +
    • Classic(不建议使用): store/index.js返回创建 Vuex.Store 实例的方法。
    • +
    +

    一个案例体验在 nuxt 中使用 vuex

    +

    vuex

    +

    pages/index.vue

    +
    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
    <template>
    <div id="box">
    <h1>index首页</h1>
    <h2>{{ $store.state.count }}</h2>
    <button @click="add">同步增加</button>
    <button @click="asyncAdd">异步增加</button>
    </div>
    </template>

    <script>
    export default {
    methods: {
    add() {
    this.$store.commit("add", 100);
    },
    asyncAdd() {
    this.$store.dispatch("asyncAdd", 200);
    },
    },
    };
    </script>

    <style>
    html,
    body {
    height: 100%;
    }

    #box {
    width: 800px;
    height: 500px;
    margin: 0 auto;
    border: 1px solid;
    text-align: center;
    }
    </style>
    + +

    store/index.js

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    export const state = function () {
    return {
    count: 0,
    };
    };

    export const mutations = {
    add(state, params) {
    state.count += params;
    },
    };

    export const actions = {
    asyncAdd({ commit }, payload) {
    commit("add", payload);
    },
    };
    + +

    模块的使用 module

    您可以将模块文件分解为单独的文件:state.js,actions.js,mutations.jsgetters.js。如果您使用index.js来维护state,getters,actionsmutations,同时具有单个单独的操作文件,那么仍然可以正确识别该文件。

    +

    如果在 store 里面写 xxx.js 那么记住导出 state 等以便外部调用,多个导出的 xxx.js 文件会被识别成为模块

    +

    案例

    +

    vuex2

    +

    pages/about.vue

    +
    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
    <template>
    <div class="about">
    <h1>随机数: {{ random }}</h1>
    <h2>把随机数添加到数组内</h2>
    <div>{{ $store.state.modulesList.list }}</div>
    <!-- 调用 moduleA 里面的数据 -->
    <div>{{ $store.state.moduleA.str }}</div>
    <button type="submit" @click="addList">
    把随机数添加到 modulesList 模块的 list 内
    </button>
    </div>
    </template>

    <script>
    export default {
    data() {
    return {
    random: 0,
    };
    },
    methods: {
    getRandom() {
    let random = Math.floor(Math.random() * 10 - 0 + 0);
    return random;
    },
    addList() {
    let random = this.getRandom();
    this.random = random;
    // 调用 modulesList 模块里面的 addList 方法
    this.$store.commit("modulesList/addList", random);
    },
    },
    };
    </script>
    + +

    store/modulesList.js

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 直接导出 nuxt 会识别 modulesLIst 为模块
    export const state = function () {
    return {
    list: [1, 2, 3, 4],
    };
    };

    export const mutations = {
    addList(state, payload) {
    state.list.push(payload);
    },
    };
    + +

    参考

    Nuxt.js - Vue.js 通用应用框架 | Nuxt.js 中文网 (nuxtjs.cn)

    +

    Nuxt.js 中文教程_w3cschool

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/10/28/\345\211\215\347\253\257/JavaScript/01-JavaScript\345\260\217\346\212\200\345\267\247/index.html" "b/2021/10/28/\345\211\215\347\253\257/JavaScript/01-JavaScript\345\260\217\346\212\200\345\267\247/index.html" new file mode 100644 index 0000000000..5aabf7f0b7 --- /dev/null +++ "b/2021/10/28/\345\211\215\347\253\257/JavaScript/01-JavaScript\345\260\217\346\212\200\345\267\247/index.html" @@ -0,0 +1,371 @@ +JavaScript 小技巧 | WaterBoat的博客
    加载头像

    JavaScript 小技巧

    JavaScript 小技巧

    1.sleep 延迟函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function sleep(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() - start < delay) {
    continue;
    }
    }

    function test() {
    console.log("111");
    sleep(2000);
    console.log("222");
    }

    test();
    + +

    2.获取 URL 参数

    1
    2
    3
    4
    decodeURI("%E5%95%8A%E5%93%88%E5%93%88"); // 解码中文
    // window.location.search 获取 URL 参数
    let params = new URLSearchParams("?project=js&type=1").get("type");
    console.log(params);
    + +

    3.判断简化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    let a = 1;

    if (a == 1 || a == 2) {
    console.log(a);
    }

    if ([1, 2].includes(a)) {
    console.log(a);
    }
    + +

    4.清空数组

    1
    2
    3
    let array = ["A", "B", "C", "D", "E", "F"];
    array.length = 0;
    console.log(array); // []
    + +

    5.计算代码性能

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // web Api
    const startTime = performance.now();
    // 某些程序
    for (let i = 0; i < 1000; i++) {
    console.log(i);
    }
    const endTime = performance.now();
    const totaltime = endTime - startTime;
    console.log(totaltime); // 16.5
    /* ------------------------------------------- */
    const startTime = new Date().getTime();
    // 某些程序
    for (let i = 0; i < 1000; i++) {
    console.log(i);
    }
    const endTime = new Date().getTime();
    const totaltime = endTime - startTime;
    console.log(totaltime); // 16.5
    + +

    6.拼接数组

    1
    2
    3
    4
    5
    6
    7
    8
    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let 合并数组1 = a.concat(b); // [ 1, 2, 3, 4, 5, 6 ]
    let 合并数组2 = [...a, ...b]; // [ 1, 2, 3, 4, 5, 6 ]

    // 但是使用concat()方法时,如果需要合并的数组很大,那么concat() 函数会在创建单独的新数组时消耗大量内存。这时可以使用以下方法来实现数组的合并:
    Array.prototype.push.apply(a, b);
    console.log(a);
    + +

    7.判断 null 和 undefined

    1
    2
    3
    4
    5
    6
    7
    8
    9
    let a;
    if (a == null || a == undefined) {
    console.log("a is null or undefined");
    }
    console.log(`-------------------`);
    let b = undefined;
    // 空值合并操作符
    a ?? console.log("a is null or undefined");
    b ?? console.log("b is null or undefined");
    + +

    8.伪数组转为数组

    1
    2
    3
    Array.prototype.slice.call(arguments);
    // or
    [...arguments];
    + +

    9.对象动态声明属性

    1
    2
    3
    4
    5
    6
    7
    const dynamic = "color";
    var item = {
    brand: "Ford",
    [dynamic]: "Blue",
    };
    console.log(item);
    // { brand: "Ford", color: "Blue" }
    + +

    10.缩短 console.log()

    1
    2
    3
    4
    // Web Api
    const c = console.log.bind(document);
    c(996);
    c("hello world");
    + +

    11.检查对象是否为空

    1
    2
    Object.keys({}).length; // 0
    Object.keys({ key: 1 }).length; // 1
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2021/10/28/\345\211\215\347\253\257/JavaScript/02-JavsScript\351\253\230\347\272\247/index.html" "b/2021/10/28/\345\211\215\347\253\257/JavaScript/02-JavsScript\351\253\230\347\272\247/index.html" new file mode 100644 index 0000000000..3297a89ca9 --- /dev/null +++ "b/2021/10/28/\345\211\215\347\253\257/JavaScript/02-JavsScript\351\253\230\347\272\247/index.html" @@ -0,0 +1,361 @@ +JavaScript 高级 | WaterBoat的博客
    加载头像

    JavaScript 高级

    JavaScript 高级

    01.call, apply 和 bind 的区别

    call 的使用方式:

    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
    //#region call
    // 定义一个对象
    let character = {
    name: "派蒙",
    weapon: [],
    // 得到一把武器
    getWeapon: function (weapon, weapon2) {
    this.weapon = [weapon, weapon2];
    },
    };

    let character2 = {
    name: "行秋",
    weapon: [],
    };

    console.log(character);
    // 调用方法获取了一把护摩
    character.getWeapon("护摩", "薙草之稻光");
    console.log(character);

    // character2也想得到一把武器,但是没有这个方法获得.character1表示可以把得到武器的方法借给character2使用
    console.log(character2);
    // character开始 借给character2
    character.getWeapon.call(character2, "绿剑", "风鹰剑");
    console.log(character2);
    //#endregion
    + +

    apply 的使用方式:

    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
    //#region apply
    // 定义一个对象
    let character = {
    name: "派蒙",
    weapon: [],
    // 得到一把武器
    getWeapon: function (weapon, weapon2) {
    this.weapon = [weapon, weapon2];
    },
    };

    let character2 = {
    name: "行秋",
    weapon: [],
    };

    console.log(character);
    // 调用方法获取了一把护摩
    character.getWeapon("护摩", "薙草之稻光");
    console.log(character);

    // character2也想得到一把武器,但是没有这个方法获得.character1表示可以把得到武器的方法借给character2使用
    console.log(character2);
    // character开始 借给character2
    // call 换成了 apply 不过是后面的参数是一个数组罢了
    character.getWeapon.apply(character2, ["绿剑", "风鹰剑"]);
    console.log(character2);
    //#endregion
    + +

    bind 的使用方式:

    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
    //#region bind
    // 定义一个对象
    let character = {
    name: "派蒙",
    weapon: [],
    // 得到一把武器
    getWeapon: function (weapon, weapon2) {
    this.weapon = [weapon, weapon2];
    },
    };

    let character2 = {
    name: "行秋",
    weapon: [],
    };

    console.log(character);
    // 调用方法获取了一把护摩
    character.getWeapon("护摩", "薙草之稻光");
    console.log(character);

    // character2也想得到一把武器,但是没有这个方法获得.character1表示可以把得到武器的方法借给character2使用
    console.log(character2);
    // character开始 借给character2
    // 不过 character2 不想马上得到武器而是等到有需要的时候再去得到
    let result = character.getWeapon.bind(character2, "绿剑", "风鹰剑");
    // 有需要的时候再去得到
    result();
    console.log(character2);
    //#endregion
    + +

    总结

      +
    • call,apply 和 bind 都有改变 this 指向的作用
    • +
    • call 和 apply 的区别不过是 call() 方法接受的是一个参数列表,apply() 方法接受的是一个包含多个参数的数组
    • +
    • bind 与其他两个的区别是不会立即执行,会返回一个函数在需要的时候再执行
    • +
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2022/02/08/\345\211\215\347\253\257/Vue/04-VueCli/index.html" "b/2022/02/08/\345\211\215\347\253\257/Vue/04-VueCli/index.html" new file mode 100644 index 0000000000..257242a154 --- /dev/null +++ "b/2022/02/08/\345\211\215\347\253\257/Vue/04-VueCli/index.html" @@ -0,0 +1,355 @@ +Vue Cli 配置 | WaterBoat的博客
    加载头像

    Vue Cli 配置

    Vue Cli 配置

    引入 cdn

    vue.config.js

    +
    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
    const isProduction = process.env.NODE_ENV === "production";

    const cdn = {
    // 开发环境
    dev: {
    css: [],
    js: [],
    },
    // 生产环境
    build: {
    css: ["//lib.baomitu.com/swiper/7.4.1/swiper-bundle.css"],
    js: [
    "//lib.baomitu.com/vue/3.2.26/vue.cjs.js",
    "//lib.baomitu.com/vuex/4.0.0/vuex.cjs.min.js",
    "//lib.baomitu.com/vue-router/4.0.0/vue-router.cjs.min.js",
    "//lib.baomitu.com/axios/0.18.0/axios.min.js",
    "//lib.baomitu.com/jquery/3.6.0/jquery.min.js",
    "//lib.baomitu.com/echarts/5.2.2/echarts.common.min.js",
    "//lib.baomitu.com/swiper/7.4.1/swiper-bundle.esm.min.js",
    ],
    },
    };
    chainWebpack: (config) => {
    // 去掉console.log
    config.optimization.minimizer("terser").tap((args) => {
    args[0].terserOptions.compress.drop_console = true;
    return args;
    });
    config.plugin("html").tap((args) => {
    if (isProduction) {
    args[0].cdn = cdn.build;
    } else {
    args[0].cdn = cdn.dev;
    }
    return args;
    });
    },
    + +

    去掉 console.log

    vue.config.js

    +
    1
    2
    3
    4
    5
    6
    7
    8
    chainWebpack: (config) => {
    // 去掉console.log
    config.optimization.minimizer("terser").tap((args) => {
    args[0].terserOptions.compress.drop_console = true;
    return args;
    });
    },

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2022/02/08/\345\211\215\347\253\257/Vue/05-Vu3-Setup\350\257\255\346\263\225\347\263\226/index.html" "b/2022/02/08/\345\211\215\347\253\257/Vue/05-Vu3-Setup\350\257\255\346\263\225\347\263\226/index.html" new file mode 100644 index 0000000000..c287918d54 --- /dev/null +++ "b/2022/02/08/\345\211\215\347\253\257/Vue/05-Vu3-Setup\350\257\255\346\263\225\347\263\226/index.html" @@ -0,0 +1,417 @@ +Vue3-Setup语法糖 | WaterBoat的博客
    加载头像

    Vue3-Setup语法糖

    Vue3-Setup语法糖

    <script setup></script> 是一种编译时语法糖,用于在单文件组件中使用组合式 API,如果你同时使用单文件组件和组合式 API,建议使用该语法。

    +

    它与普通语法相比,代码更加简洁、性能更加强悍、更好的 TS 支持。

    +
    1
    npm install -g @vue/cli
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script setup>
    // 此处代码将会被编译为 setup 函数代码
    // 也就是说此处代码将会在组件每次创建实例时执行
    // 在内部声明的顶级变量和函数都可以在模板中你直接使用
    const msg = "Hello Vue3 setup";

    function log() {
    console.log(msg);
    }
    </script>

    <template>
    <div @click="log">{{ msg }}</div>
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script setup>
    // 在此处可以直接导入外部的辅助方法在模板直接使用
    import { capitalize } from "./helps";

    const msg = "Hello Vue3 setup";
    </script>

    <template>
    {{ capitalize(msg) }}
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script setup>
    import { ref } from "vue";

    const count = ref(0);
    </script>

    <template>
    <div @click="count++">{{ count }}</div>
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    <script setup>
    // 在此处可以直接导入组件在模板中使用, 不再需要手动注册组件
    import HelloWorld from "@/components/HelloWorld";
    </script>

    <template>
    <HelloWorld />
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- src/App.vue -->
    <script setup>
    import HelloWorld from "./components/HelloWorld";
    </script>

    <template>
    <HelloWorld msg="Hello Vue script setup" />
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- src/components/HelloWorld.vue -->
    <script setup>
    // 定义该组件接收的 Props
    // defineProps 在此处可以直接使用无需导入
    defineProps({ msg: String });
    </script>
    <template>
    {{ msg }}
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- src/components/HelloWorld.vue -->
    <script setup>
    // defineEmits 在此处可以直接使用无需导入
    defineEmits(["delete"]);
    </script>
    <template>
    <button @click="$emit('delete')">delete button</button>
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- src/App.vue -->
    <script setup>
    import HelloWorld from "./components/HelloWorld";
    function onDeleteHandler() {
    alert("deleted");
    }
    </script>

    <template>
    <HelloWorld @delete="onDeleteHandler" />
    </template>
    + +
    1
    2
    3
    4
    5
    6
    <!-- src/components/HelloWorld.vue -->
    <script setup>
    const count = 0;
    // 定义当前组件向外暴露的数据
    defineExpose({ count });
    </script>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!-- src/App.vue -->
    <script setup>
    import HelloWorld from "./components/HelloWorld";
    import { ref } from "vue";
    const instance = ref(null);
    function log() {
    console.log(instance.value.count);
    }
    </script>

    <template>
    <HelloWorld ref="instance" />
    <button @click="log">button</button>
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!-- src/components/HelloWorld.vue -->
    <script setup>
    import { useSlots, getCurrentInstance } from "vue";
    // 获取组件实例
    const currentInstance = getCurrentInstance();
    // 获取插槽
    const slots = useSlots();
    // 通过 JSX 渲染模板
    currentInstance.render = () => <div>{slots.default()}</div>;
    </script>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!-- src/App.vue -->
    <script setup>
    import HelloWorld from "./components/HelloWorld";
    </script>

    <template>
    <HelloWorld>
    <h1>Hello World</h1>
    </HelloWorld>
    </template>
    + +
    1
    2
    3
    4
    <!-- src/App.vue -->
    <script setup>
    const post = await fetch(`/api/post/1`).then((r) => r.json());
    </script>
    + +
    1
    2
    yarn add pinia
    npm install pinia
    + +
    1
    2
    3
    import { createPinia } from "pinia";
    // return the root store
    app.use(createPinia());
    + +

    创建 store,存储状态

    +
    1
    2
    3
    4
    5
    6
    // src/stores/user.js
    import { defineStore } from "pinia";

    export const useUser = defineStore("user", {
    state: () => ({ username: "张三" }),
    });
    + +

    使用状态

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    import { storeToRefs } from "pinia";

    const user = useUser();
    // 以下为错误写法,状态丢失响应性
    // const {username, age} = useUser();

    // 以下为正确写法, 保持了数据的响应性
    const { username, age } = storeToRefs(user);
    </script>
    <template>
    <!-- 直接获取并使用不会破坏数据响应性 -->
    <p>{{ user.username }}</p>
    <p>{{ username }}</p>
    </template>
    + +

    更改状态

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // src/stores/user.js
    import { defineStore } from "pinia";

    export const useUser = defineStore("user", {
    state: () => ({ username: "张三", age: 20, hobbies: [] }),
    actions: {
    updateUsername(username) {
    this.username = username;
    },
    },
    });
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>
    {{ user.username }}
    <button @click="user.updateUsername('李四')">updateUsername</button>
    </template>
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>
    {{ user.username }} {{ user.age }}
    <button @click="user.$patch({ username: '王五' })">updateUsername</button>
    <button
    @click="
    user.$patch((state) => {
    state.hobbies.push('足球');
    state.age = 30;
    })
    "
    >
    button
    </button>
    </template>
    + +

    重置状态

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    import { storeToRefs } from "pinia";
    const user = useUser();
    </script>
    <template>
    <button @click="user.$reset">reset</button>
    </template>
    + +

    替换状态

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>
    {{ user.username }} {{ user.age }}
    <button @click="user.$state = { username: '赵六', age: 50 }">
    replace state
    </button>
    </template>
    + +

    getters,getters 就是 store 中的计算属性

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // src/stores/user.js
    import { defineStore } from "pinia";

    // getters 就是 store 中的计算属性
    export const useUser = defineStore("user", {
    state: () => ({ count: 25 }),
    getters: {
    doubleCount(state) {
    // 通过参数 state 获取依赖状态
    return state.count * 2;
    },
    doubleCountPlusOne() {
    console.log(this);
    // 通过 this 获取其他 getter
    return this.doubleCount + 1;
    },
    },
    });
    + +
    1
    2
    3
    4
    5
    6
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>{{ user.doubleCount }} {{ user.doubleCountPlusOne }}</template>
    + +

    Getter 传递参数

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // src/stores/user.js
    import { defineStore } from "pinia";

    // getters 就是 store 中的计算属性
    export const useUser = defineStore("user", {
    state: () => ({ count: 25 }),
    getters: {
    // getter 传递参数, 该方式会失去 getter 缓存特性
    countPlus(state) {
    return (count) => state.count + count;
    },
    },
    });
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>
    {{ user.countPlus(5) }}
    </template>
    + +

    Action

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // src/stores/user.js
    import { defineStore } from "pinia";
    import axios from "axios";

    export const useUser = defineStore("user", {
    state: () => ({ profile: null }),
    actions: {
    async getUserInfo(id) {
    let { data } = await axios.get(
    `https://jsonplaceholder.typicode.com/users/${id}`,
    );
    this.profile = data;
    },
    },
    });
    + +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- src/App.vue -->
    <script setup>
    import { useUser } from "@/stores/user";
    const user = useUser();
    </script>
    <template>
    {{ user.profile }}
    <button @click="user.getUserInfo(1)">getUserInfo</button>
    </template>
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2022/05/10/\345\211\215\347\253\257/JavaScript/JavaScript\350\256\276\350\256\241\346\250\241\345\274\217/08-\345\217\221\345\270\203-\350\256\242\351\230\205\346\250\241\345\274\217/index.html" "b/2022/05/10/\345\211\215\347\253\257/JavaScript/JavaScript\350\256\276\350\256\241\346\250\241\345\274\217/08-\345\217\221\345\270\203-\350\256\242\351\230\205\346\250\241\345\274\217/index.html" new file mode 100644 index 0000000000..1fde769165 --- /dev/null +++ "b/2022/05/10/\345\211\215\347\253\257/JavaScript/JavaScript\350\256\276\350\256\241\346\250\241\345\274\217/08-\345\217\221\345\270\203-\350\256\242\351\230\205\346\250\241\345\274\217/index.html" @@ -0,0 +1,380 @@ +发布-订阅模式 | WaterBoat的博客
    加载头像

    发布-订阅模式

    发布-订阅模式

    什么是发布-订阅模式

    以我们使用过的 documeng.body.addEventListener(“click”,function(){}) 为例,这样的就是发布-订阅模式的具体实现。
    我们订阅了 documeng.body 上的 click 事件,当被点击的时候 body 节点便会向订阅者发布者消息。

    +

    如果用生活中的例子举例,那就是我们订阅微信公众号,公众号发送消息,订阅的用户就会接收到消息。

    +

    基于以上的例子,我们总结出发布订阅模式的三要素:

    +
      +
    • 一个订阅者
    • +
    • 一个发布者
    • +
    • 一个处理 订阅和发布的中间人
    • +
    +

    接下来让我们来实现一个发布-订阅模式。
    我们规定 listen-订阅 trigger-发布 -remove 取消订阅

    +

    一个简单的发布订阅模式

    调用的形式如下:

    +
    1
    2
    3
    4
    5
    6
    salesOffices.listen(function (price) {
    console.log("价格", price);
    });

    salesOffices.trigger(100);
    salesOffices.remove(100);
    + +

    具体实现如下:

    +
    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
    var salesOffices = {}; // 定义售楼处
    salesOffices.clientList = []; // 缓存列表,存放订阅者的回调函数

    salesOffices.listen = function (fn) {
    // 新增订阅者
    this.clientList.push(fn); // 把订阅的消息添加进缓存列表
    };

    salesOffices.trigger = function () {
    //发布消息
    for (let i = 0; i < this.clientList.length; i++) {
    this.clientList[i].apply(this, arguments);
    }
    };
    salesOffices.remove = function () {
    // 移除所有订阅者
    this.clientList.length = 0;
    };

    salesOffices.listen(function (price) {
    console.log("价格", price);
    });

    salesOffices.listen(function (price) {
    console.log("价格", price);
    });

    salesOffices.remove();

    salesOffices.trigger(100);
    salesOffices.trigger(50);
    // 以上有一个文件如果用户 A 订阅了 100 用户 B 订阅了 50,那么 A 和 B都会收到对方的消息,所以我们还需改进一下,给订阅者添加上唯一的标识

    // 也就是把触发的条件改成如下形式

    /*
    salesOffices.listen("A", function(price) {
    console.log("价格", price);
    });

    salesOffices.trigger("A", 100);

    salesOffices.remove("A");
    */
    + +

    带标识(key)的发布订阅

    上一小节中的代码没有订阅标识,一次发布所有用户都会收到,我们改进一下代码让变成谁订阅谁接收

    +

    调用方式改成如下:

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function fn1(price) {
    console.log("A价格", price);
    }

    salesOffices.listen("A", fn1);

    salesOffices.listen("A", function () {
    console.log("第二个 A");
    });

    // salesOffices.remove("A", fn1);
    salesOffices.remove("A");

    salesOffices.listen("B", function (price, area) {
    console.log("B 价格", price);
    console.log("B 面积", area);
    });

    salesOffices.trigger("A", 100);
    salesOffices.trigger("B", 100, 500);
    + +

    具体实现如下:

    +
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    var salesOffices = {}; // 定义售楼处
    salesOffices.clientList = {}; // 缓存列表,存放订阅者的回调函数

    salesOffices.listen = function (key, fn) {
    if (!this.clientList[key]) {
    // 如果 key 不存在,则新增
    this.clientList[key] = [];
    }
    // 新增订阅者
    this.clientList[key].push(fn);
    };

    salesOffices.trigger = function () {
    // 这里获取 key 和 参数
    // 疑问? 为什么调用 trigger 时不能直接传入 key 和 参数呢?
    // 因为 arguments 是一个类数组,无法调用数组的方法
    // 但是如果我们通过 原型链上的方法和改变 this 的指向来调用
    let key = Array.prototype.shift.call(arguments);
    //发布消息
    for (let i = 0; i < this.clientList[key].length; i++) {
    // 因为 shift 会改变原数组 所以这里的 arguments 只剩下了除 key 以外的参数了
    this.clientList[key][i].apply(this, arguments);
    }
    };

    // 参考 removeEventListener 移除的时候也需要传入 移除的函数
    salesOffices.remove = function (key, fn) {
    if (this.clientList[key]) {
    let arr = this.clientList[key];

    if (fn) {
    for (let i = 0; i < arr.length; i++) {
    if (arr[i].name === fn.name) {
    arr.splice(i, 1);
    }
    }
    } else {
    // 如果传入的函数为空,则移除所有的函数
    this.clientList[key] = [];
    }
    }
    };

    function fn1(price) {
    console.log("A价格", price);
    }

    salesOffices.listen("A", fn1);

    salesOffices.listen("A", function () {
    console.log("第二个 A");
    });

    // salesOffices.remove("A", fn1);
    salesOffices.remove("A");

    salesOffices.listen("B", function (price, area) {
    console.log("B 价格", price);
    console.log("B 面积", area);
    });

    salesOffices.trigger("A", 100);
    salesOffices.trigger("B", 100, 500);
    + +

    发布订阅的通用实现

    在上一节中,我们只是实现了一个发布订阅的功能不够通用,所以我们将继续提取出一个通用的实现,这样我们就可以在不同的地方使用这个功能了

    +
    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
    49
    50
    51
    52
    53
    54
    55
    class Observer {
    constructor() {
    this.subscribers = {};
    }

    listen(key, fn) {
    if (!this.subscribers[key]) {
    this.subscribers[key] = [];
    }
    this.subscribers[key].push(fn);
    }
    trigger() {
    const key = Array.prototype.shift.call(arguments);
    for (let i = 0; i < this.subscribers[key].length; i++) {
    this.subscribers[key][i].apply(this, arguments);
    }
    }
    remove(key, fn) {
    if (this.subscribers[key]) {
    let arr = this.subscribers[key];
    // 如果传入了 fn 就移除指定的 fn
    if (fn) {
    for (let index = 0; index < arr.length; index++) {
    if (arr[index].name === fn.name) {
    this.subscribers[key].splice(index, 1);
    }
    }
    } else {
    // 没传入 fn 就移除所有的 fn
    this.subscribers[key] = [];
    }
    }
    }
    }

    let observer = new Observer();

    function fn(price) {
    console.log("fn() A", price);
    }

    observer.listen("A", function (price) {
    console.log("A的价格", price);
    });

    observer.listen("A", fn);

    observer.listen("B", function (price) {
    console.log("B的价格", price);
    });
    observer.remove("A", fn);

    observer.trigger("A", 100);

    observer.trigger("B", 500);
    + +

    思维导图

    发布订阅模式

    +

    参考文章

    《JavaScript 设计模式与开发实践》

    +

    观察者模式 vs 发布订阅模式,千万不要再混淆了

    +

    理解【观察者模式】和【发布订阅】的区别

    +

    JavaScript:发布-订阅模式与观察者模式

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2022/05/20/\345\211\215\347\253\257/01-npm\345\210\253\345\220\215/index.html" "b/2022/05/20/\345\211\215\347\253\257/01-npm\345\210\253\345\220\215/index.html" new file mode 100644 index 0000000000..928a0dfd8f --- /dev/null +++ "b/2022/05/20/\345\211\215\347\253\257/01-npm\345\210\253\345\220\215/index.html" @@ -0,0 +1,351 @@ +npm 别名---让小明变成小红 | WaterBoat的博客
    加载头像

    npm 别名---让小明变成小红

    npm 别名---让小明变成小红

    1
    2
    3
    4
    5
    npm i lodash@npm:wuhu  # 这样就把 lodash 的名称配置成了 wuhu
    # 实际使用一般来说 node-sass 是业界毒瘤,用 dart-sass 就可以替换掉 node-sass
    npm install node-sass@npm:dart-sass
    # 如果你使用的是 yarn
    yarn add node-sass@yarn:dart-sass
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2023/07/10/\345\211\215\347\253\257/WebAssembly/WebAssembly/index.html" "b/2023/07/10/\345\211\215\347\253\257/WebAssembly/WebAssembly/index.html" new file mode 100644 index 0000000000..5177dab8ca --- /dev/null +++ "b/2023/07/10/\345\211\215\347\253\257/WebAssembly/WebAssembly/index.html" @@ -0,0 +1,351 @@ +WebAssembly 简易教程 | WaterBoat的博客
    加载头像

    WebAssembly 简易教程

    WebAssembly 简易教程

    什么是 WebAssembly

    TODO…

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2023/07/11/\345\214\272\345\235\227\351\223\276/template/index.html" "b/2023/07/11/\345\214\272\345\235\227\351\223\276/template/index.html" new file mode 100644 index 0000000000..aaffa1d44b --- /dev/null +++ "b/2023/07/11/\345\214\272\345\235\227\351\223\276/template/index.html" @@ -0,0 +1,350 @@ +模版文件 | WaterBoat的博客
    加载头像

    模版文件

    模版文件

    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2023/07/17/\345\211\215\347\253\257/Cypress/01-Cypress \344\275\277\347\224\250\346\214\207\345\215\227/index.html" "b/2023/07/17/\345\211\215\347\253\257/Cypress/01-Cypress \344\275\277\347\224\250\346\214\207\345\215\227/index.html" new file mode 100644 index 0000000000..b9ae5349db --- /dev/null +++ "b/2023/07/17/\345\211\215\347\253\257/Cypress/01-Cypress \344\275\277\347\224\250\346\214\207\345\215\227/index.html" @@ -0,0 +1,493 @@ +Cypress 使用指南 | WaterBoat的博客
    加载头像

    Cypress 使用指南

    Cypress 使用指南

    什么是 Cypress

    Cypress 是一个现代化的前端端到端(End-to-End,E2E)测试框架。它被设计用于对 Web 应用程序进行自动化测试,可以模拟用户在真实环境中与应用程序的交互行为。

    +

    以下是 Cypress 的一些关键特点和优势:

    +
      +
    1. 简单易用: Cypress 具有简洁而直观的 API,使得编写和维护测试用例非常容易。
    2. +
    3. 强大的调试能力: Cypress 提供了丰富的调试工具,开发人员可以通过断点、控制台日志和实时命令行等方式方便地调试测试用例。
    4. +
    5. 可见即可信: Cypress 在测试过程中会记录并生成视频,可以可视化地查看每个测试用例的执行过程,方便回放和排查问题。
    6. +
    +

    为什么要用 Cypress?

      +
    1. JavaScript 技术栈: Cypress 是以 JavaScript 为技术栈编写的,而我们团队 BCS 端都是使用 JavaScript 技术栈为主,切换为以 JavaScript 为主的自动化测试框架是一件低成本的事情。
    2. +
    3. 简化测试流程: Cypress 提供了一个全面的测试解决方案,可以覆盖从用户界面到后端服务器的整个应用程序。它集成了测试框架、断言库和模拟工具,使得编写和管理测试用例变得更加简单。
    4. +
    5. 可靠性和稳定性: Cypress 在内部运行测试代码,与浏览器直接交互,并可以完全控制应用程序的行为。这种直接集成性能更佳,使得测试更加可靠,能够捕获更多的错误和问题。并且随着”全功能模板”的稳定迭代我们需要一种自动化测试工具进行回归测试以减少测试成本。
    6. +
    7. 易于调试: Cypress 提供了强大的调试工具,包括断点、控制台日志和实时命令行等功能,方便开发人员在测试过程中进行问题排查和调试。
    8. +
    9. 可视化回放: Cypress 会记录并生成视频,可以可视化地查看每个测试用例的执行过程。这对于团队合作、问题复现和审查都非常有价值。
    10. +
    +

    Cypress 为团队带来的价值

      +
    1. 沟通成本:Cypress 提供了实时可视化测试运行状态的功能,你可以在浏览器中实时查看测试的运行情况、命令的执行顺序和元素的状态。此外,Cypress 还可以自动重放失败的测试命令,以帮助你快速调试和修复问题减少沟通成本。
    2. +
    3. 与开发者工具的无缝集成:Cypress 与开发者工具(如 DevTools)无缝集成,使你可以直接在 Cypress 界面中查看应用程序的 DOM、网络请求、响应等详细信息。这极大地简化了调试和排查问题的过程。
    4. +
    5. 自动化测试 : 自动化测试可以大大提高测试过程的效率。相比手动测试,自动化测试可以更快地执行测试用例,并且始终保持一致性
    6. +
    7. 节省时间和成本:自动化测试可以在软件开发周期中节省大量的时间和成本。自动运行的测试套件可以在短时间内执行大量的测试用例,不仅可以及早发现和修复问题,还可以减少重复劳动和人力资源的需求。
    8. +
    +

    使用 Cypress 需要达到的目标

      +
    1. 减少手动测试工作量:Cypress 提供了自动化测试的能力,可以模拟用户与应用程序进行交互的整个过程。这意味着你可以编写一次测试代码,然后反复运行,而不需要手动重复执行相同的测试步骤。这样可以显著减少手动测试的工作量。
    2. +
    +

    以下为”全功能模板”添加的测试用例运行图。对比之前的人工测试,自动化的测试节省了时间和保证测试的一致性和可重复性。

    +

    img

    +
      +
    1. 提高测试的可靠性:Cypress 使用实时重放和监控的方式执行测试,确保测试命令的正确执行顺序和应用程序的正确状态。它还提供了自动等待和重试机制,以处理异步操作和不稳定性。这些功能提高了测试的可靠性,减少了测试失误和漏洞。
    2. +
    3. 提高团队协作效率:Cypress 提供了易于编写和维护的测试代码,具有直观的 API 和丰富的断言库。这使得团队成员可以更轻松地编写、理解和修改测试代码,促进了团队的协作效率和开发速度。
    4. +
    5. 加强测试质量和覆盖度 : 通过 Cypress 的提供的测试 API 提升”全功能模板”的测试质量并将覆盖度提升到 90 %以上。
    6. +
    +

    Cypress 的使用

    创建一个项目

    1
    pnpm create vite
    + +

    image-20230717160123500

    +

    安装 Cypress

    1
    pnpm add cypress -D
    + +

    在 package.json 中添加如下命令:

    +
    1
    2
    3
    4
    "scripts": {
    "cypress:open": "cypress open",
    "cypress:run-ci": "cypress run"
    }
    + +

    随后运行命令启动项目

    +
    1
    2
    pnpm dev;
    pnpm cypress:open;
    + +

    选择E2E

    +

    image-20230717155513987

    +

    第一次进入 Cypress 会基于我们一些实例代码

    +

    image-20230717155559769

    +

    选择 Chrome 进行测试

    +

    image-20230717160359726

    +

    然后我们点击 Scaffold example specs 生成一些示例代码

    +

    image-20230717160713367

    +

    我们点击对应的文件进入即可执行需要的文件

    +

    image-20230717161020353

    +

    image-20230717161038174

    +

    进入对应的代码我们发现一片爆红那是因为创建的项目默认集成了 eslint,

    +

    image-20230717161425009

    +

    我们需要安装如下插件

    +

    eslint-plugin-cypress

    +

    配置完毕如下图

    +

    image-20230717161710208

    +

    常用的 API 介绍

      +
    1. 获取元素
    2. +
    +
    1
    cy.get("HTMLElement") // jQuery 式
    + +
      +
    1. 获取包含特定文本的元素
    2. +
    +
    1
    cy.contains("文字")
    + +
      +
    1. 断言特定条件是否成立
    2. +
    +
    1
    cy.get(body).should("exist") // 验证 body 是否存在
    + +
      +
    1. 切换路由
    2. +
    +
    1
    cy.visit("/home")
    + +
      +
    1. 拦截和处理网络请求
    2. +
    +
    1
    cy.intercept(route, handler)
    + +
      +
    1. 等待一段时间
    2. +
    +
    1
    cy.wait(ms)
    + +
      +
    1. 输入文本
    2. +
    +
    1
    cy.type(text)
    + +
      +
    1. 图片上传
    2. +
    +
    1
    2
    npm i cypress-file-upload -D
    cy.get(dom).attachFile(imgPath);
    + +

    更多 API 请查看官方文档

    +

    实践

    在阅读了以上的 API 我们来自行编写一个 E2E 测试

    +

    要求

    +
    1
    2
    3
    4
    5
    1. 访问 https://preview.pro.ant.design/user/login/
    2. 输入账号密码登录 admin ant.design
    3. 切换路由到 https://preview.pro.ant.design/form/basic-form
    4. 填写表单
    5. 验证提交成功
    + +

    完整代码如下

    +
    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
    const username = "admin";
    const passworld = "ant.design";

    describe("Antd", () => {
    beforeEach(() => {
    login();
    });

    afterEach(() => {
    // eslint-disable-next-line cypress/no-unnecessary-waiting
    cy.wait(1000);
    });

    it("应该填写表单完毕", () => {
    cy.visit("https://preview.pro.ant.design/form/basic-form/");
    cy.get("#basic_title").type("标题");
    // 日期框
    cy.get("#basic_date").click();
    cy.get(".ant-picker-cell-inner").contains("15").click();
    cy.get(".ant-picker-cell-inner").contains("16").click();
    cy.get("#basic_goal").type("目标描述");
    cy.get("#basic_standard").type("衡量标准");
    cy.get("#basic_publicType > :nth-child(1) > :nth-child(2)").click();
    cy.get(".ant-space > :nth-child(1) > .ant-btn").click();
    cy.contains("提交成功").should("exist");
    });
    });

    function login() {
    cy.visit("https://preview.pro.ant.design/user/login/");
    cy.get("#username").type(username);
    cy.get("#password").type(passworld);
    cy.get(".ant-btn").click();
    cy.contains("登录成功").should("exist");
    }
    + +

    可优化的点,登录功能是每一个 it 都需要的,所以可以注册到全局命令

    +

    cypress/support/commands.js

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Cypress.Commands.add("login", () => {
    const username = "admin";
    const passworld = "ant.design";
    cy.visit("https://preview.pro.ant.design/user/login/");
    cy.get("#username").type(username);
    cy.get("#password").type(passworld);
    cy.get(".ant-btn").click();
    cy.contains("登录成功").should("exist");
    });

    // 之后在任意的 cy 文件中直接调用 cy.login() 即可登录
    + +

    编写规范

      +
    1. 原则:单元测试的目标是测试每一个功能在特定输入下,输出结果和预期结果的一致性。
    2. +
    3. 单一性:一个单元测试只应该关注一个功能点,单元测试不是用来覆盖复杂复合用例,不能杂糅这样的目标到单元测试中。
    4. +
    5. 可维护性:尽可能简单,清晰,易懂,任何单元测试都不应该包含复杂的逻辑。
    6. +
    7. 边界测试:单元测试应该考虑一些不以达到的边界条件。
    8. +
    9. 测试隔离:除了系列测试之外,应该尽量保持测试例之间的逻辑和测试环境隔离,也就是说测试后有必要的话应该清理测试例对环境造成的污染。
    10. +
    11. 保持维护:这可能是单元测试中最重要的一条铁律,任何功能的修改和增删都会对单元测试造成影响,应该持续对单元测试进行更新和维护。
    12. +
    13. 数据: 新增的数据名以 cypress 开头在执行完毕之后需要删除以维护测试环境的数据。
    14. +
    +

    云效流水线集成

    流水线环境采用自定义构建的 Docker 镜像文件上传至阿里云镜像站下载使用,当创建 PR 的时候就会执行流水线进行 E2E 测试,只有通过才能合并代码以保证代码的稳定性和健壮性。

    +

    常见问题处理办法

      +
    1. 在命令行中运行单个测试用例
    2. +
    +
    1
    cypress run -s cypress/e2e/Activity/04-Task.cy.js
    + +
      +
    1. 获取不到非可视区的元素
    2. +
    +

    当 Cypress 在 CI/CD 环境中运行时,经常会出现 Cypress 调用 scrollTo() 滚动后又回到原位的情况。这是因为 CI/CD 环境中通常以无头模式运行 Cypress(即无可视化界面),而滚动操作通常依赖于页面的可视区域。

    +

    无头模式下的浏览器可能会对滚动操作做出一些优化或默认行为,在滚动之后自动恢复到初始状态。这种行为不符合我们在网页上手动滚动的预期效果。

    +

    为了解决这个问题,可以尝试使用 Cypress 的 scrollTo() 方法的 timeout 参数,增加滚动操作的持续时间,以确保滚动操作生效。

    +

    例如:

    +
    1
    cy.scrollTo('bottom', { duration: 2000 });
    + +

    这样会将滚动操作的持续时间延长到 2 秒钟,让滚动更充分地发生。你可以根据需要调整持续时间。

    +

    此外,还可以尝试在滚动操作后添加一些额外的断言,例如检查滚动位置是否正确或检查滚动后的元素是否可见,以确保滚动操作生效并且不会回到原位。

    +
    1
    cy.scrollTo('bottom').should('have.prop', 'scrollTop', 1000);
    + +
      +
    1. 移除 cy.wait(someTime)
    2. +
    +

    在使用Cypress时,使用cy.wait()命令确实存在过度依赖网络环境和测试机器性能的问题。为了更好地控制等待时间,推荐使用cy.intercept()命令与cy.wait()结合使用,以明确指定需要等待的网络资源。

    +
    1
    2
    cy.intercept('https://baidu.com/').as('fetchURL');
    cy.wait('@fetchURL');
    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2024/01/01/\345\214\272\345\235\227\351\223\276/Solidity/01-Solidity \345\205\245\351\227\250\346\225\231\347\250\213/index.html" "b/2024/01/01/\345\214\272\345\235\227\351\223\276/Solidity/01-Solidity \345\205\245\351\227\250\346\225\231\347\250\213/index.html" new file mode 100644 index 0000000000..f7bbd8e37f --- /dev/null +++ "b/2024/01/01/\345\214\272\345\235\227\351\223\276/Solidity/01-Solidity \345\205\245\351\227\250\346\225\231\347\250\213/index.html" @@ -0,0 +1,390 @@ +Solidity 龟速入门教程 | WaterBoat的博客
    加载头像

    Solidity 龟速入门教程

    Solidity 龟速入门教程

    Solidity 入门教程

    Solidity 是什么

    Solidity logo + +

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。

    +

    Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。

    +

    开发工具

    Remix

    remix是以太坊官方推荐的智能合约开发IDE(集成开发环境),适合新手,可以在浏览器中快速部署测试智能合约,你不需要在本地安装任何程序。

    +

    网址:remix.ethereum.org

    +

    进入remix,我们可以看到最左边的菜单有三个按钮,分别对应文件(写代码的地方),编译(跑代码),部署(部署到链上)。我们点新建(Create New File)按钮,就可以创建一个空白的solidity合约

    +

    image-20240425151055605

    +

    我们来编写一段代码

    +
    1
    2
    3
    4
    5
    6
    7
    // SPDX-License-Identifier: MIT // 不写这个编辑器会警告,但是不影响运行
    pragma solidity ^0.8.0; // 指定编译器版本 不允许小于 0.8.0 或大于 0.9.0的编译器编译

    contract HelloWorld { // 创建合约(contract) 名字为 HelloWorld
    // 定义变量类型为 string 变量名威 _string 赋值为 HelloWorld
    string public _string = "HelloWorld!";
    }
    + +

    编写好代码之后我们点击左侧的编译

    +

    image-20240426152253142

    +

    然后点击部署

    +

    image-20240426152534440

    +

    点击即可查看到值

    +

    VSCode

    如果你不喜欢在线的编译工具我们可以使用本地环境来进行编译代码

    +

    在 VScode 中搜索插件 Solidity 进行安装,作用是让代码进行高亮和补充一些代码提示

    +

    image-20240425151435575

    +

    接下来我们打开 remix

    +

    来到首页点击Access File System

    +

    image-20240426153232491

    +

    出现提示让我们安装一个 npm 包,我们根据文档的说明进行一下安装

    +
    1
    npm install -g @remix-project/remixd
    + +

    然后我们创建一个 sol 文件并在终端中找到他的文件夹所在地输入命令 remixd

    +

    image-20240426153643076

    +

    并在网页上点击content进行连接即可完成

    +

    image-20240426153811790

    +

    总结

    这一讲,我们介绍了 solidity 、开发工具 remix 并且介绍了一下 vscode 和 remix 如何进行联动编写 HelloWorld。

    +

    参考资料

    Solidity 中文文档

    +

    decert

    +

    WTF

    +

    阮一峰区块链入门教程

    +

    崔棉大师solidity教程

    + + +

    数据类型

    基本数据类型

    布尔类型(bool):true 或 false。
    整数类型(int / uint):有符号整数和无符号整数,可以指定位数(如 uint8、int256)。
    固定大小的字节数组(bytesN):不可变长度的字节数组,N 可以是 1 到 32 之间的任意整数。
    动态大小的字节数组(bytes):不固定长度的字节数组。
    固定大小的字符串(stringN):不可变长度的字符串,N 可以是 1 到 32 之间的任意整数。
    动态大小的字符串(string):不固定长度的字符串。

    +

    复合数据类型

    数组(array):可以是固定长度的数组(如 uint[5])或动态长度的数组(如 uint[])。
    结构体(struct):自定义的数据结构,可以包含多个不同类型的数据成员。
    枚举(enum):用于声明一组命名的常量值序列的用户定义类型。

    +

    地址和地址相关类型

    地址(address):存储 20 字节的 Ethereum 地址。
    地址数组(address[]):地址的动态数组。
    地址映射(mapping):键值对的映射结构,其中键是地址类型,值可以是任意数据类型。

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git "a/2024/12/19/\345\211\215\347\253\257/TypeScript/02.\344\270\264\346\227\266\347\254\224\350\256\260/index.html" "b/2024/12/19/\345\211\215\347\253\257/TypeScript/02.\344\270\264\346\227\266\347\254\224\350\256\260/index.html" new file mode 100644 index 0000000000..60f81a9fab --- /dev/null +++ "b/2024/12/19/\345\211\215\347\253\257/TypeScript/02.\344\270\264\346\227\266\347\254\224\350\256\260/index.html" @@ -0,0 +1,369 @@ +临时笔记 | WaterBoat的博客
    加载头像

    临时笔记

    临时笔记

    typescript

    Object.defineProperty(obj, prop, descriptor)

      +
    • 作用: 可以用来精确添加或修改对象的属性,只需要在 descriptor 对象中将属性特性描述清楚
    • +
    +
      +
    1. 数据描述符,它拥有四个属性配置
    2. +
    3. configurable:数据是否可删除,可配置
    4. +
    5. enumerable:属性是否可枚举
    6. +
    7. value:属性值,默认为 undefined
    8. +
    9. writable:属性是否可读写
    10. +
    11. get:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。
    12. +
    13. set:一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。
    14. +
    +

    1—-4 案例

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    let obj = { name: "123", age: 18 };
    Object.defineProperty(obj, "name", {
    configurable: false, // name 不可删除
    enumerable: false, // name 不可便利出来
    writable: false, // name 的值无法改写
    });
    for (const key in obj) {
    console.log(key, obj[key]); // 18
    }
    delete obj.name;
    obj.name = "李四"; // 无法改写
    console.log(obj); // { name: "123", age: 18 }
    Object.defineProperty(obj, "age", {
    value: "age的值被修改了",
    });
    console.log(obj); // {age: "age的值被修改了", name: "123"}
    + +

    6—7 案例

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let obj2 = { name: "李四", age: 20 };
    let value = "张三";
    Object.defineProperty(obj2, "name", {
    get() {
    console.log("get 我被执行了");
    return value; // 设置了 name 的值
    },
    set(newvalue) {
    console.log("set 我被执行了");
    },
    });
    console.log(obj2.name); // 张三
    obj2.name = "王五"; // 设置值调用 19 行
    + +

    https://shanyue.tech/

    +
    头像头像
    WaterBoat
    正因你我生于繁华,弥足之花方显珍贵
    本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WaterBoat的博客
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000000..6660963d97 --- /dev/null +++ b/404.html @@ -0,0 +1,341 @@ +页面没有找到 | WaterBoat的博客
    加载头像

    404

    请尝试站内搜索寻找文章
    回到主页
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000000..51e0d2e03a --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +blog.yichengloong.cn \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000000..8e3eb3e3b6 --- /dev/null +++ b/about/index.html @@ -0,0 +1,485 @@ +about | WaterBoat的博客
    加载头像

    about

    avatar

    正因你我生于繁华,弥足之花方显珍贵✨

    你好,很高兴认识你👋
    我叫 易成龙
    是一名 前端工程师、独立开发者
    追求

    源于
    热爱而去 感受
    学习生活程序 体验

    Hello there!

    技能
    开启创造力
    生涯
    无限进步
    生涯
    我现在住在中国,深圳市
    生于 庚辰年
    社会大学 软件工程
    现在职业 打工人👷🏻
    性格
    执政官
    ESFJ-A
    16personalities 了解更多关于 执政官
    人格
    自拍
    座右铭
    正因你我生于繁华, 弥足之花方显珍贵。
    特长
    编程 专注 负责 中二病晚期 ACG 指数 MAX
    爱好游戏
    原神
    UID: 生成中...
    爱好番剧
    追番
    约定的梦幻岛
    咒术回战
    紫罗兰永恒花园
    鬼灭之刃
    JOJO的奇妙冒险 黄金之风
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/album/index.html b/album/index.html new file mode 100644 index 0000000000..10bb6a778f --- /dev/null +++ b/album/index.html @@ -0,0 +1,341 @@ +相册集 | WaterBoat的博客
    加载头像

    相册集

    相册集
    这里是我的相册集哦😯
    每一张照片都是一次美好的记忆。

    世界各地夕阳与风景

    因为到不了世界各地,所以请网友们发来了各地的夕阳与风景🌇。

    我的日常

    这里存放的是有关我自己的一些沙雕生活与有趣的事情。

    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/anzhiyu/random.js b/anzhiyu/random.js new file mode 100644 index 0000000000..8c8fa8eaad --- /dev/null +++ b/anzhiyu/random.js @@ -0,0 +1,3 @@ +var posts=["2021/06/08/信安工具/01-工具下载链接/","2022/05/20/前端/01-npm别名/","2020/05/20/原神/原神抽卡记录抓取/","2021/05/01/后端/01-Sql基础/","2021/05/01/后端/03-MySQL踩坑/","2023/07/17/前端/Cypress/01-Cypress 使用指南/","2021/05/14/前端/JavaScript/01-Effective JavaScript 编写高质量JavaScript代码的68个有效方法/","2021/10/28/前端/JavaScript/01-JavaScript小技巧/","2021/10/28/前端/JavaScript/02-JavsScript高级/","2021/05/20/前端/JavaScript/02-hash 和 history 路由的区别/","2021/05/02/前端/JavaScript/03-实现防抖和节流/","2021/09/29/前端/Nuxt/01-Nuxt/","2021/05/07/前端/React/01-React笔记/","2021/05/07/前端/React/02-Redux笔记/","2021/06/10/前端/React/03-React-hooks/","2021/06/10/前端/React/04-React常用库/","2021/05/07/前端/React/React总结笔记/","2021/03/08/前端/TypeScript/01.TypeScript笔记/","2021/03/08/前端/Vue/01-Vue2/","2020/05/08/前端/Vue/02-Vue3/","2022/02/08/前端/Vue/04-VueCli/","2020/05/08/前端/Vue/03-Vue3-组合式 API/","2022/02/08/前端/Vue/05-Vu3-Setup语法糖/","2021/06/08/前端/shell/01-windows-powerline/","2024/01/01/区块链/Solidity/01-Solidity 入门教程/","2022/05/10/前端/JavaScript/JavaScript设计模式/08-发布-订阅模式/"];function toRandomPost(){ + pjax.loadUrl('/'+posts[Math.floor(Math.random() * posts.length)]); + }; \ No newline at end of file diff --git a/archives/2020/05/index.html b/archives/2020/05/index.html new file mode 100644 index 0000000000..9422de548d --- /dev/null +++ b/archives/2020/05/index.html @@ -0,0 +1,342 @@ +五月 2020 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2020/index.html b/archives/2020/index.html new file mode 100644 index 0000000000..ca5232075d --- /dev/null +++ b/archives/2020/index.html @@ -0,0 +1,342 @@ +2020 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/03/index.html b/archives/2021/03/index.html new file mode 100644 index 0000000000..0b909d6160 --- /dev/null +++ b/archives/2021/03/index.html @@ -0,0 +1,342 @@ +三月 2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/05/index.html b/archives/2021/05/index.html new file mode 100644 index 0000000000..53c9188e44 --- /dev/null +++ b/archives/2021/05/index.html @@ -0,0 +1,342 @@ +五月 2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/06/index.html b/archives/2021/06/index.html new file mode 100644 index 0000000000..244086773b --- /dev/null +++ b/archives/2021/06/index.html @@ -0,0 +1,342 @@ +六月 2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/09/index.html b/archives/2021/09/index.html new file mode 100644 index 0000000000..0ee299ab5d --- /dev/null +++ b/archives/2021/09/index.html @@ -0,0 +1,342 @@ +九月 2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/10/index.html b/archives/2021/10/index.html new file mode 100644 index 0000000000..55fd07cb7f --- /dev/null +++ b/archives/2021/10/index.html @@ -0,0 +1,342 @@ +十月 2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/index.html b/archives/2021/index.html new file mode 100644 index 0000000000..d43b8baf9e --- /dev/null +++ b/archives/2021/index.html @@ -0,0 +1,342 @@ +2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2021/page/2/index.html b/archives/2021/page/2/index.html new file mode 100644 index 0000000000..a2c61762c9 --- /dev/null +++ b/archives/2021/page/2/index.html @@ -0,0 +1,342 @@ +2021 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2022/02/index.html b/archives/2022/02/index.html new file mode 100644 index 0000000000..d37e9f9c4e --- /dev/null +++ b/archives/2022/02/index.html @@ -0,0 +1,342 @@ +二月 2022 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2022/05/index.html b/archives/2022/05/index.html new file mode 100644 index 0000000000..c200616d1f --- /dev/null +++ b/archives/2022/05/index.html @@ -0,0 +1,342 @@ +五月 2022 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2022/index.html b/archives/2022/index.html new file mode 100644 index 0000000000..dc8047d381 --- /dev/null +++ b/archives/2022/index.html @@ -0,0 +1,342 @@ +2022 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html new file mode 100644 index 0000000000..ca80809de3 --- /dev/null +++ b/archives/2023/07/index.html @@ -0,0 +1,342 @@ +七月 2023 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 0000000000..4926b118ca --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,342 @@ +2023 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html new file mode 100644 index 0000000000..6760f81708 --- /dev/null +++ b/archives/2024/01/index.html @@ -0,0 +1,342 @@ +一月 2024 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 0000000000..bd586864f1 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,342 @@ +2024 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000000..fc3ea3b380 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,342 @@ +归档 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000000..3059f02233 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,342 @@ +归档 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 0000000000..b9acedccb6 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1,342 @@ +归档 | WaterBoat的博客
    加载头像
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體
    \ No newline at end of file diff --git a/assets/algolia/algoliasearch.js b/assets/algolia/algoliasearch.js new file mode 100644 index 0000000000..7707138f15 --- /dev/null +++ b/assets/algolia/algoliasearch.js @@ -0,0 +1,7190 @@ +/*! algoliasearch 3.35.1 | © 2014, 2015 Algolia SAS | github.com/algolia/algoliasearch-client-js */ +(function(f){var g;if(typeof window!=='undefined'){g=window}else if(typeof self!=='undefined'){g=self}g.ALGOLIA_MIGRATION_LAYER=f()})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;owindow.ALGOLIA_SUPPORTS_DOCWRITE = true\x3C/script>'); + + if (window.ALGOLIA_SUPPORTS_DOCWRITE === true) { + document.write('\x3Cscript src="' + v2ScriptUrl + '">\x3C/script>'); + scriptLoaded('document.write')(); + } else { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } + } catch (e) { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } +} + +function scriptLoaded(method) { + return function log() { + var message = 'AlgoliaSearch: loaded V2 script using ' + method; + + if (window.console && window.console.log) { + window.console.log(message); + } + }; +} + +},{"1":1}],4:[function(require,module,exports){ +'use strict'; + +/* eslint no-unused-vars: [2, {"vars": "local"}] */ + +module.exports = oldGlobals; + +// put old window.AlgoliaSearch.. into window. again so that +// users upgrading to V3 without changing their code, will be warned +function oldGlobals() { + var message = '-- AlgoliaSearch V2 => V3 error --\n' + + 'You are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\n' + + 'Please read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n' + + '-- /AlgoliaSearch V2 => V3 error --'; + + window.AlgoliaSearch = function() { + throw new Error(message); + }; + + window.AlgoliaSearchHelper = function() { + throw new Error(message); + }; + + window.AlgoliaExplainResults = function() { + throw new Error(message); + }; +} + +},{}],5:[function(require,module,exports){ +'use strict'; + +// This script will be browserified and prepended to the normal build +// directly in window, not wrapped in any module definition +// To avoid cases where we are loaded with /latest/ along with +migrationLayer("algoliasearch"); + +// Now onto the V2 related code: +// If the client is using /latest/$BUILDNAME.min.js, load V2 of the library +// +// Otherwise, setup a migration layer that will throw on old constructors like +// new AlgoliaSearch(). +// So that users upgrading from v2 to v3 will have a clear information +// message on what to do if they did not read the migration guide +function migrationLayer(buildName) { + var isUsingLatest = require(2); + var loadV2 = require(3); + var oldGlobals = require(4); + + if (isUsingLatest(buildName)) { + loadV2(buildName); + } else { + oldGlobals(); + } +} + +},{"2":2,"3":3,"4":4}]},{},[5])(5) +});(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.algoliasearch = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + +}).call(this,require(12)) +},{"12":12,"2":2}],2:[function(require,module,exports){ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require(9); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +},{"9":9}],3:[function(require,module,exports){ +(function (process,global){ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version 4.1.1 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.ES6Promise = factory()); +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} + +function isFunction(x) { + return typeof x === 'function'; +} + +var _isArray = undefined; +if (Array.isArray) { + _isArray = Array.isArray; +} else { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = undefined; +var customSchedulerFn = undefined; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var r = require; + var vertx = r('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = undefined; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && typeof require === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var _arguments = arguments; + + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + if (_state) { + (function () { + var callback = _arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + })(); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve$1(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(16); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var GET_THEN_ERROR = new ErrorObject(); + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + GET_THEN_ERROR.error = error; + return GET_THEN_ERROR; + } +} + +function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { + try { + then$$1.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then$$1) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then$$1, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return resolve(promise, value); + }, function (reason) { + return reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$1) { + if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$1 === GET_THEN_ERROR) { + reject(promise, GET_THEN_ERROR.error); + GET_THEN_ERROR.error = null; + } else if (then$$1 === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$1)) { + handleForeignThenable(promise, maybeThenable, then$$1); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function resolve(promise, value) { + if (promise === value) { + reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = undefined, + callback = undefined, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function ErrorObject() { + this.error = null; +} + +var TRY_CATCH_ERROR = new ErrorObject(); + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = undefined, + error = undefined, + succeeded = undefined, + failed = undefined; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value.error = null; + } else { + succeeded = true; + } + + if (promise === value) { + reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + resolve(promise, value); + } else if (failed) { + reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + resolve(promise, value); + }, function rejectPromise(reason) { + reject(promise, reason); + }); + } catch (e) { + reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function Enumerator$1(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(input); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + reject(this.promise, validationError()); + } +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +} + +Enumerator$1.prototype._enumerate = function (input) { + for (var i = 0; this._state === PENDING && i < input.length; i++) { + this._eachEntry(input[i], i); + } +}; + +Enumerator$1.prototype._eachEntry = function (entry, i) { + var c = this._instanceConstructor; + var resolve$$1 = c.resolve; + + if (resolve$$1 === resolve$1) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise$2) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$1) { + return resolve$$1(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$1(entry), i); + } +}; + +Enumerator$1.prototype._settledAt = function (state, i, value) { + var promise = this.promise; + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } +}; + +Enumerator$1.prototype._willSettleAt = function (promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); +}; + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all$1(entries) { + return new Enumerator$1(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race$1(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject$1(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise$2(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise$2.all = all$1; +Promise$2.race = race$1; +Promise$2.resolve = resolve$1; +Promise$2.reject = reject$1; +Promise$2._setScheduler = setScheduler; +Promise$2._setAsap = setAsap; +Promise$2._asap = asap; + +Promise$2.prototype = { + constructor: Promise$2, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +/*global self*/ +function polyfill$1() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$2; +} + +// Strange compat.. +Promise$2.polyfill = polyfill$1; +Promise$2.Promise = Promise$2; + +return Promise$2; + +}))); + + + +}).call(this,require(12),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"12":12}],4:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],5:[function(require,module,exports){ + +var hasOwn = Object.prototype.hasOwnProperty; +var toString = Object.prototype.toString; + +module.exports = function forEach (obj, fn, ctx) { + if (toString.call(fn) !== '[object Function]') { + throw new TypeError('iterator must be a function'); + } + var l = obj.length; + if (l === +l) { + for (var i = 0; i < l; i++) { + fn.call(ctx, obj[i], i, obj); + } + } else { + for (var k in obj) { + if (hasOwn.call(obj, k)) { + fn.call(ctx, obj[k], k, obj); + } + } + } +}; + + +},{}],6:[function(require,module,exports){ +(function (global){ +var win; + +if (typeof window !== "undefined") { + win = window; +} else if (typeof global !== "undefined") { + win = global; +} else if (typeof self !== "undefined"){ + win = self; +} else { + win = {}; +} + +module.exports = win; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],8:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],9:[function(require,module,exports){ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + +},{}],10:[function(require,module,exports){ +'use strict'; + +// modified from https://github.com/es-shims/es5-shim +var has = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var slice = Array.prototype.slice; +var isArgs = require(11); +var isEnumerable = Object.prototype.propertyIsEnumerable; +var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); +var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); +var dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' +]; +var equalsConstructorPrototype = function (o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; +}; +var excludedKeys = { + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true +}; +var hasAutomationEqualityBug = (function () { + /* global window */ + if (typeof window === 'undefined') { return false; } + for (var k in window) { + try { + if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; +}()); +var equalsConstructorPrototypeIfNotBuggy = function (o) { + /* global window */ + if (typeof window === 'undefined' || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } +}; + +var keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object'; + var isFunction = toStr.call(object) === '[object Function]'; + var isArguments = isArgs(object); + var isString = isObject && toStr.call(object) === '[object String]'; + var theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError('Object.keys called on a non-object'); + } + + var skipProto = hasProtoEnumBug && isFunction; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; +}; + +keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = (function () { + // Safari 5.0 bug + return (Object.keys(arguments) || '').length === 2; + }(1, 2)); + if (!keysWorksWithArguments) { + var originalKeys = Object.keys; + Object.keys = function keys(object) { + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } else { + return originalKeys(object); + } + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; +}; + +module.exports = keysShim; + +},{"11":11}],11:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === '[object Arguments]'; + if (!isArgs) { + isArgs = str !== '[object Array]' && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + toStr.call(value.callee) === '[object Function]'; + } + return isArgs; +}; + +},{}],12:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],13:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],15:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require(13); +exports.encode = exports.stringify = require(14); + +},{"13":13,"14":14}],16:[function(require,module,exports){ +module.exports = AlgoliaSearch; + +var Index = require(18); +var deprecate = require(28); +var deprecatedMessage = require(29); +var AlgoliaSearchCore = require(17); +var inherits = require(7); +var errors = require(30); + +function AlgoliaSearch() { + AlgoliaSearchCore.apply(this, arguments); +} + +inherits(AlgoliaSearch, AlgoliaSearchCore); + +/* + * Delete an index + * + * @param indexName the name of index to delete + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.deleteIndex = function(indexName, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexName), + hostType: 'write', + callback: callback + }); +}; + +/** + * Move an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy of + * srcIndexName (destination will be overriten if it already exist). + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.moveIndex = function(srcIndexName, dstIndexName, callback) { + var postObj = { + operation: 'move', destination: dstIndexName + }; + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Copy an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy + * of srcIndexName (destination will be overriten if it already exist). + * @param scope an array of scopes to copy: ['settings', 'synonyms', 'rules'] + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.copyIndex = function(srcIndexName, dstIndexName, scopeOrCallback, _callback) { + var postObj = { + operation: 'copy', + destination: dstIndexName + }; + var callback = _callback; + if (typeof scopeOrCallback === 'function') { + // oops, old behaviour of third argument being a function + callback = scopeOrCallback; + } else if (Array.isArray(scopeOrCallback) && scopeOrCallback.length > 0) { + postObj.scope = scopeOrCallback; + } else if (typeof scopeOrCallback !== 'undefined') { + throw new Error('the scope given to `copyIndex` was not an array with settings, synonyms or rules'); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Return last log entries. + * @param offset Specify the first entry to retrieve (0-based, 0 is the most recent log entry). + * @param length Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param type Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.getLogs = function(offset, length, callback) { + var clone = require(26); + var params = {}; + if (typeof offset === 'object') { + // getLogs(params) + params = clone(offset); + callback = length; + } else if (arguments.length === 0 || typeof offset === 'function') { + // getLogs([cb]) + callback = offset; + } else if (arguments.length === 1 || typeof length === 'function') { + // getLogs(1, [cb)] + callback = length; + params.offset = offset; + } else { + // getLogs(1, 2, [cb]) + params.offset = offset; + params.length = length; + } + + if (params.offset === undefined) params.offset = 0; + if (params.length === undefined) params.length = 10; + + return this._jsonRequest({ + method: 'GET', + url: '/1/logs?' + this._getSearchParams(params, ''), + hostType: 'read', + callback: callback + }); +}; + +/* + * List all existing indexes (paginated) + * + * @param page The page to retrieve, starting at 0. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with index list + */ +AlgoliaSearch.prototype.listIndexes = function(page, callback) { + var params = ''; + + if (page === undefined || typeof page === 'function') { + callback = page; + } else { + params = '?page=' + page; + } + + return this._jsonRequest({ + method: 'GET', + url: '/1/indexes' + params, + hostType: 'read', + callback: callback + }); +}; + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearch.prototype.initIndex = function(indexName) { + return new Index(this, indexName); +}; + +AlgoliaSearch.prototype.initAnalytics = function(opts) { + // the actual require must be inside the function, when put outside then you have a cyclic dependency + // not well resolved that ends up making the main "./index.js" (main module, the agloliasearch function) + // export an object instead of a function + // Other workarounds: + // - rewrite the lib in ES6, cyclic dependencies may be better supported + // - move initAnalytics to a property on the main module (algoliasearch.initAnalytics), + // same as places. + // The current API was made mostly to mimic the one made in PHP + var createAnalyticsClient = require(27); + return createAnalyticsClient(this.applicationID, this.apiKey, opts); +}; + +/* + * @deprecated use client.listApiKeys + */ +AlgoliaSearch.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('client.listUserKeys()', 'client.listApiKeys()')); + +/* + * List all existing api keys with their associated ACLs + * + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with api keys list + */ +AlgoliaSearch.prototype.listApiKeys = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys', + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.getApiKey + */ +AlgoliaSearch.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('client.getUserKeyACL()', 'client.getApiKey()')); + +/* + * Get an API key + * + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the right API key + */ +AlgoliaSearch.prototype.getApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys/' + key, + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.deleteApiKey + */ +AlgoliaSearch.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('client.deleteUserKey()', 'client.deleteApiKey()')); + +/* + * Delete an existing API key + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the date of deletion + */ +AlgoliaSearch.prototype.deleteApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/keys/' + key, + hostType: 'write', + callback: callback + }); +}; + +/** + * Restore a deleted API key + * + * @param {String} key - The key to restore + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the restored API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.restoreApiKey('APIKEY') + * @see {@link https://www.algolia.com/doc/rest-api/search/#restore-api-key|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.restoreApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/keys/' + key + '/restore', + hostType: 'write', + callback: callback + }); +}; + +/* + @deprecated see client.addApiKey + */ +AlgoliaSearch.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKey()', 'client.addApiKey()')); + +/* + * Add a new global API key + * + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the added API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.addApiKey(['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#AddKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.addApiKey = function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.indexes = params.indexes; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * @deprecated Please use client.addApiKey() + */ +AlgoliaSearch.prototype.addUserKeyWithValidity = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKeyWithValidity()', 'client.addApiKey()')); + +/** + * @deprecated Please use client.updateApiKey() + */ +AlgoliaSearch.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('client.updateUserKey()', 'client.updateApiKey()')); + +/** + * Update an existing API key + * @param {string} key - The key to update + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the modified API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.updateApiKey('APIKEY', ['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.updateApiKey = function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.indexes = params.indexes; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'PUT', + url: '/1/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Initialize a new batch of search queries + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.startQueriesBatch = deprecate(function startQueriesBatchDeprecated() { + this._batch = []; +}, deprecatedMessage('client.startQueriesBatch()', 'client.search()')); + +/** + * Add a search query in the batch + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.addQueryInBatch = deprecate(function addQueryInBatchDeprecated(indexName, query, args) { + this._batch.push({ + indexName: indexName, + query: query, + params: args + }); +}, deprecatedMessage('client.addQueryInBatch()', 'client.search()')); + +/** + * Launch the batch of queries using XMLHttpRequest. + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.sendQueriesBatch = deprecate(function sendQueriesBatchDeprecated(callback) { + return this.search(this._batch, callback); +}, deprecatedMessage('client.sendQueriesBatch()', 'client.search()')); + +/** + * Perform write operations across multiple indexes. + * + * To reduce the amount of time spent on network round trips, + * you can create, update, or delete several objects in one call, + * using the batch endpoint (all operations are done in the given order). + * + * Available actions: + * - addObject + * - updateObject + * - partialUpdateObject + * - partialUpdateObjectNoCreate + * - deleteObject + * + * https://www.algolia.com/doc/rest_api#Indexes + * @param {Object[]} operations An array of operations to perform + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.batch([{ + * action: 'addObject', + * indexName: 'clients', + * body: { + * name: 'Bill' + * } + * }, { + * action: 'udpateObject', + * indexName: 'fruits', + * body: { + * objectID: '29138', + * name: 'banana' + * } + * }], cb) + */ +AlgoliaSearch.prototype.batch = function(operations, callback) { + var isArray = require(8); + var usage = 'Usage: client.batch(operations[, callback])'; + + if (!isArray(operations)) { + throw new Error(usage); + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/batch', + body: { + requests: operations + }, + hostType: 'write', + callback: callback + }); +}; + +/** + * Assign or Move a userID to a cluster + * + * @param {string} data.userID The userID to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserID({ cluster: 'c1-test', userID: 'some-user' }); + */ +AlgoliaSearch.prototype.assignUserID = function(data, callback) { + if (!data.userID || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both a userID and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping', + hostType: 'write', + body: {cluster: data.cluster}, + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Assign a array of userIDs to a cluster. + * + * @param {Array} data.userIDs The array of userIDs to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserIDs({ cluster: 'c1-test', userIDs: ['some-user-1', 'some-user-2'] }); + */ +AlgoliaSearch.prototype.assignUserIDs = function(data, callback) { + if (!data.userIDs || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both an array of userIDs and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/batch', + hostType: 'write', + body: { + cluster: data.cluster, + users: data.userIDs + }, + callback: callback + }); +}; + +/** + * Get the top userIDs + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getTopUserID(); + */ +AlgoliaSearch.prototype.getTopUserID = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/top', + hostType: 'read', + callback: callback + }); +}; + +/** + * Get userID + * + * @param {string} data.userID The userID to get info about + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.getUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/' + data.userID, + hostType: 'read', + callback: callback + }); +}; + +/** + * List all the clusters + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + */ +AlgoliaSearch.prototype.listClusters = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters', + hostType: 'read', + callback: callback + }); +}; + +/** + * List the userIDs + * + * (the callback is the second argument) + * + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + * client.listClusters({ page: 3, hitsPerPage: 30}); + */ +AlgoliaSearch.prototype.listUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Remove an userID + * + * @param {string} data.userID The userID to assign to a new cluster + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.removeUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.removeUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'DELETE', + url: '/1/clusters/mapping', + hostType: 'write', + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Search for userIDs + * + * @param {string} data.cluster The cluster to target + * @param {string} data.query The query to execute + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.searchUserIDs({ cluster: 'c1-test', query: 'some-user' }); + * client.searchUserIDs({ + * cluster: "c1-test", + * query: "some-user", + * page: 3, + * hitsPerPage: 2 + * }); + */ +AlgoliaSearch.prototype.searchUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/search', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Set strategy for personalization + * + * @param {Object} data + * @param {Object} data.eventsScoring Associate a score to an event + * @param {Object} data.eventsScoring. The name of the event + * @param {Number} data.eventsScoring..score The score to associate to + * @param {String} data.eventsScoring..type Either "click", "conversion" or "view" + * @param {Object} data.facetsScoring Associate a score to a facet + * @param {Object} data.facetsScoring. The name of the facet + * @param {Number} data.facetsScoring..score The score to associate to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.setPersonalizationStrategy({ + * eventsScoring: { + * "Add to cart": { score: 50, type: "conversion" }, + * Purchase: { score: 100, type: "conversion" } + * }, + * facetsScoring: { + * brand: { score: 100 }, + * categories: { score: 10 } + * } + * }); + */ +AlgoliaSearch.prototype.setPersonalizationStrategy = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/recommendation/personalization/strategy', + body: data, + hostType: 'write', + callback: callback + }); +}; + +/** + * Get strategy for personalization + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getPersonalizationStrategy(); + */ + +AlgoliaSearch.prototype.getPersonalizationStrategy = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/recommendation/personalization/strategy', + hostType: 'read', + callback: callback + }); +}; + +// environment specific methods +AlgoliaSearch.prototype.destroy = notImplemented; +AlgoliaSearch.prototype.enableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.disableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.useSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.disableSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.generateSecuredApiKey = notImplemented; +AlgoliaSearch.prototype.getSecuredApiKeyRemainingValidity = notImplemented; + +function notImplemented() { + var message = 'Not implemented in this environment.\n' + + 'If you feel this is a mistake, write to support@algolia.com'; + + throw new errors.AlgoliaSearchError(message); +} + +},{"17":17,"18":18,"26":26,"27":27,"28":28,"29":29,"30":30,"7":7,"8":8}],17:[function(require,module,exports){ +(function (process){ +module.exports = AlgoliaSearchCore; + +var errors = require(30); +var exitPromise = require(31); +var IndexCore = require(20); +var store = require(36); + +// We will always put the API KEY in the JSON body in case of too long API KEY, +// to avoid query string being too long and failing in various conditions (our server limit, browser limit, +// proxies limit) +var MAX_API_KEY_LENGTH = 500; +var RESET_APP_DATA_TIMER = + process.env.RESET_APP_DATA_TIMER && parseInt(process.env.RESET_APP_DATA_TIMER, 10) || + 60 * 2 * 1000; // after 2 minutes reset to first host + +/* + * Algolia Search library initialization + * https://www.algolia.com/ + * + * @param {string} applicationID - Your applicationID, found in your dashboard + * @param {string} apiKey - Your API key, found in your dashboard + * @param {Object} [opts] + * @param {number} [opts.timeout=2000] - The request timeout set in milliseconds, + * another request will be issued after this timeout + * @param {string} [opts.protocol='https:'] - The protocol used to query Algolia Search API. + * Set to 'http:' to force using http. + * @param {Object|Array} [opts.hosts={ + * read: [this.applicationID + '-dsn.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]), + * write: [this.applicationID + '.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]) - The hosts to use for Algolia Search API. + * If you provide them, you will less benefit from our HA implementation + */ +function AlgoliaSearchCore(applicationID, apiKey, opts) { + var debug = require(1)('algoliasearch'); + + var clone = require(26); + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: algoliasearch(applicationID, apiKey, opts)'; + + if (opts._allowEmptyCredentials !== true && !applicationID) { + throw new errors.AlgoliaSearchError('Please provide an application ID. ' + usage); + } + + if (opts._allowEmptyCredentials !== true && !apiKey) { + throw new errors.AlgoliaSearchError('Please provide an API key. ' + usage); + } + + this.applicationID = applicationID; + this.apiKey = apiKey; + + this.hosts = { + read: [], + write: [] + }; + + opts = opts || {}; + + this._timeouts = opts.timeouts || { + connect: 1 * 1000, // 500ms connect is GPRS latency + read: 2 * 1000, + write: 30 * 1000 + }; + + // backward compat, if opts.timeout is passed, we use it to configure all timeouts like before + if (opts.timeout) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = opts.timeout; + } + + var protocol = opts.protocol || 'https:'; + // while we advocate for colon-at-the-end values: 'http:' for `opts.protocol` + // we also accept `http` and `https`. It's a common error. + if (!/:$/.test(protocol)) { + protocol = protocol + ':'; + } + + if (protocol !== 'http:' && protocol !== 'https:') { + throw new errors.AlgoliaSearchError('protocol must be `http:` or `https:` (was `' + opts.protocol + '`)'); + } + + this._checkAppIdData(); + + if (!opts.hosts) { + var defaultHosts = map(this._shuffleResult, function(hostNumber) { + return applicationID + '-' + hostNumber + '.algolianet.com'; + }); + + // no hosts given, compute defaults + var mainSuffix = (opts.dsn === false ? '' : '-dsn') + '.algolia.net'; + this.hosts.read = [this.applicationID + mainSuffix].concat(defaultHosts); + this.hosts.write = [this.applicationID + '.algolia.net'].concat(defaultHosts); + } else if (isArray(opts.hosts)) { + // when passing custom hosts, we need to have a different host index if the number + // of write/read hosts are different. + this.hosts.read = clone(opts.hosts); + this.hosts.write = clone(opts.hosts); + } else { + this.hosts.read = clone(opts.hosts.read); + this.hosts.write = clone(opts.hosts.write); + } + + // add protocol and lowercase hosts + this.hosts.read = map(this.hosts.read, prepareHost(protocol)); + this.hosts.write = map(this.hosts.write, prepareHost(protocol)); + + this.extraHeaders = {}; + + // In some situations you might want to warm the cache + this.cache = opts._cache || {}; + + this._ua = opts._ua; + this._useCache = opts._useCache === undefined || opts._cache ? true : opts._useCache; + this._useRequestCache = this._useCache && opts._useRequestCache; + this._useFallback = opts.useFallback === undefined ? true : opts.useFallback; + + this._setTimeout = opts._setTimeout; + + debug('init done, %j', this); +} + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearchCore.prototype.initIndex = function(indexName) { + return new IndexCore(this, indexName); +}; + +/** +* Add an extra field to the HTTP request +* +* @param name the header field name +* @param value the header field value +*/ +AlgoliaSearchCore.prototype.setExtraHeader = function(name, value) { + this.extraHeaders[name.toLowerCase()] = value; +}; + +/** +* Get the value of an extra HTTP header +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.getExtraHeader = function(name) { + return this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Remove an extra field from the HTTP request +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.unsetExtraHeader = function(name) { + delete this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Augment sent x-algolia-agent with more data, each agent part +* is automatically separated from the others by a semicolon; +* +* @param algoliaAgent the agent to add +*/ +AlgoliaSearchCore.prototype.addAlgoliaAgent = function(algoliaAgent) { + var algoliaAgentWithDelimiter = '; ' + algoliaAgent; + + if (this._ua.indexOf(algoliaAgentWithDelimiter) === -1) { + this._ua += algoliaAgentWithDelimiter; + } +}; + +/* + * Wrapper that try all hosts to maximize the quality of service + */ +AlgoliaSearchCore.prototype._jsonRequest = function(initialOpts) { + this._checkAppIdData(); + + var requestDebug = require(1)('algoliasearch:' + initialOpts.url); + + + var body; + var cacheID; + var additionalUA = initialOpts.additionalUA || ''; + var cache = initialOpts.cache; + var client = this; + var tries = 0; + var usingFallback = false; + var hasFallback = client._useFallback && client._request.fallback && initialOpts.fallback; + var headers; + + if ( + this.apiKey.length > MAX_API_KEY_LENGTH && + initialOpts.body !== undefined && + (initialOpts.body.params !== undefined || // index.search() + initialOpts.body.requests !== undefined) // client.search() + ) { + initialOpts.body.apiKey = this.apiKey; + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + withApiKey: false, + headers: initialOpts.headers + }); + } else { + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + } + + if (initialOpts.body !== undefined) { + body = safeJSONStringify(initialOpts.body); + } + + requestDebug('request start'); + var debugData = []; + + + function doRequest(requester, reqOpts) { + client._checkAppIdData(); + + var startTime = new Date(); + + if (client._useCache && !client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && !client._useRequestCache && body) { + cacheID += '_body_' + reqOpts.body; + } + + // handle cache existence + if (isCacheValidWithCurrentID(!client._useRequestCache, cache, cacheID)) { + requestDebug('serving response from cache'); + + var responseText = cache[cacheID]; + + // Cache response must match the type of the original one + return client._promise.resolve({ + body: JSON.parse(responseText), + responseText: responseText + }); + } + + // if we reached max tries + if (tries >= client.hosts[initialOpts.hostType].length) { + if (!hasFallback || usingFallback) { + requestDebug('could not get any response'); + // then stop + return client._promise.reject(new errors.AlgoliaSearchError( + 'Cannot connect to the AlgoliaSearch API.' + + ' Send an email to support@algolia.com to report and resolve the issue.' + + ' Application id was: ' + client.applicationID, {debugData: debugData} + )); + } + + requestDebug('switching to fallback'); + + // let's try the fallback starting from here + tries = 0; + + // method, url and body are fallback dependent + reqOpts.method = initialOpts.fallback.method; + reqOpts.url = initialOpts.fallback.url; + reqOpts.jsonBody = initialOpts.fallback.body; + if (reqOpts.jsonBody) { + reqOpts.body = safeJSONStringify(reqOpts.jsonBody); + } + // re-compute headers, they could be omitting the API KEY + headers = client._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + client._setHostIndexByType(0, initialOpts.hostType); + usingFallback = true; // the current request is now using fallback + return doRequest(client._request.fallback, reqOpts); + } + + var currentHost = client._getHostByType(initialOpts.hostType); + + var url = currentHost + reqOpts.url; + var options = { + body: reqOpts.body, + jsonBody: reqOpts.jsonBody, + method: reqOpts.method, + headers: headers, + timeouts: reqOpts.timeouts, + debug: requestDebug, + forceAuthHeaders: reqOpts.forceAuthHeaders + }; + + requestDebug('method: %s, url: %s, headers: %j, timeouts: %d', + options.method, url, options.headers, options.timeouts); + + if (requester === client._request.fallback) { + requestDebug('using fallback'); + } + + // `requester` is any of this._request or this._request.fallback + // thus it needs to be called using the client as context + return requester.call(client, url, options).then(success, tryFallback); + + function success(httpResponse) { + // compute the status of the response, + // + // When in browser mode, using XDR or JSONP, we have no statusCode available + // So we rely on our API response `status` property. + // But `waitTask` can set a `status` property which is not the statusCode (it's the task status) + // So we check if there's a `message` along `status` and it means it's an error + // + // That's the only case where we have a response.status that's not the http statusCode + var status = httpResponse && httpResponse.body && httpResponse.body.message && httpResponse.body.status || + + // this is important to check the request statusCode AFTER the body eventual + // statusCode because some implementations (jQuery XDomainRequest transport) may + // send statusCode 200 while we had an error + httpResponse.statusCode || + + // When in browser mode, using XDR or JSONP + // we default to success when no error (no response.status && response.message) + // If there was a JSON.parse() error then body is null and it fails + httpResponse && httpResponse.body && 200; + + requestDebug('received response: statusCode: %s, computed statusCode: %d, headers: %j', + httpResponse.statusCode, status, httpResponse.headers); + + var httpResponseOk = Math.floor(status / 100) === 2; + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime, + statusCode: status + }); + + if (httpResponseOk) { + if (client._useCache && !client._useRequestCache && cache) { + cache[cacheID] = httpResponse.responseText; + } + + return { + responseText: httpResponse.responseText, + body: httpResponse.body + }; + } + + var shouldRetry = Math.floor(status / 100) !== 4; + + if (shouldRetry) { + tries += 1; + return retryRequest(); + } + + requestDebug('unrecoverable error'); + + // no success and no retry => fail + var unrecoverableError = new errors.AlgoliaSearchError( + httpResponse.body && httpResponse.body.message, {debugData: debugData, statusCode: status} + ); + + return client._promise.reject(unrecoverableError); + } + + function tryFallback(err) { + // error cases: + // While not in fallback mode: + // - CORS not supported + // - network error + // While in fallback mode: + // - timeout + // - network error + // - badly formatted JSONP (script loaded, did not call our callback) + // In both cases: + // - uncaught exception occurs (TypeError) + requestDebug('error: %s, stack: %s', err.message, err.stack); + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime + }); + + if (!(err instanceof errors.AlgoliaSearchError)) { + err = new errors.Unknown(err && err.message, err); + } + + tries += 1; + + // stop the request implementation when: + if ( + // we did not generate this error, + // it comes from a throw in some other piece of code + err instanceof errors.Unknown || + + // server sent unparsable JSON + err instanceof errors.UnparsableJSON || + + // max tries and already using fallback or no fallback + tries >= client.hosts[initialOpts.hostType].length && + (usingFallback || !hasFallback)) { + // stop request implementation for this command + err.debugData = debugData; + return client._promise.reject(err); + } + + // When a timeout occurred, retry by raising timeout + if (err instanceof errors.RequestTimeout) { + return retryRequestWithHigherTimeout(); + } + + return retryRequest(); + } + + function retryRequest() { + requestDebug('retrying request'); + client._incrementHostIndex(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + + function retryRequestWithHigherTimeout() { + requestDebug('retrying request with higher timeout'); + client._incrementHostIndex(initialOpts.hostType); + client._incrementTimeoutMultipler(); + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + } + + function isCacheValidWithCurrentID( + useRequestCache, + currentCache, + currentCacheID + ) { + return ( + client._useCache && + useRequestCache && + currentCache && + currentCache[currentCacheID] !== undefined + ); + } + + + function interopCallbackReturn(request, callback) { + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + request.catch(function() { + // Release the cache on error + delete cache[cacheID]; + }); + } + + if (typeof initialOpts.callback === 'function') { + // either we have a callback + request.then(function okCb(content) { + exitPromise(function() { + initialOpts.callback(null, callback(content)); + }, client._setTimeout || setTimeout); + }, function nookCb(err) { + exitPromise(function() { + initialOpts.callback(err); + }, client._setTimeout || setTimeout); + }); + } else { + // either we are using promises + return request.then(callback); + } + } + + if (client._useCache && client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && client._useRequestCache && body) { + cacheID += '_body_' + body; + } + + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + requestDebug('serving request from cache'); + + var maybePromiseForCache = cache[cacheID]; + + // In case the cache is warmup with value that is not a promise + var promiseForCache = typeof maybePromiseForCache.then !== 'function' + ? client._promise.resolve({responseText: maybePromiseForCache}) + : maybePromiseForCache; + + return interopCallbackReturn(promiseForCache, function(content) { + // In case of the cache request, return the original value + return JSON.parse(content.responseText); + }); + } + + var request = doRequest( + client._request, { + url: initialOpts.url, + method: initialOpts.method, + body: body, + jsonBody: initialOpts.body, + timeouts: client._getTimeoutsForRequest(initialOpts.hostType), + forceAuthHeaders: initialOpts.forceAuthHeaders + } + ); + + if (client._useCache && client._useRequestCache && cache) { + cache[cacheID] = request; + } + + return interopCallbackReturn(request, function(content) { + // In case of the first request, return the JSON value + return content.body; + }); +}; + +/* +* Transform search param object in query string +* @param {object} args arguments to add to the current query string +* @param {string} params current query string +* @return {string} the final query string +*/ +AlgoliaSearchCore.prototype._getSearchParams = function(args, params) { + if (args === undefined || args === null) { + return params; + } + for (var key in args) { + if (key !== null && args[key] !== undefined && args.hasOwnProperty(key)) { + params += params === '' ? '' : '&'; + params += key + '=' + encodeURIComponent(Object.prototype.toString.call(args[key]) === '[object Array]' ? safeJSONStringify(args[key]) : args[key]); + } + } + return params; +}; + +/** + * Compute the headers for a request + * + * @param [string] options.additionalUA semi-colon separated string with other user agents to add + * @param [boolean=true] options.withApiKey Send the api key as a header + * @param [Object] options.headers Extra headers to send + */ +AlgoliaSearchCore.prototype._computeRequestHeaders = function(options) { + var forEach = require(5); + + var ua = options.additionalUA ? + this._ua + '; ' + options.additionalUA : + this._ua; + + var requestHeaders = { + 'x-algolia-agent': ua, + 'x-algolia-application-id': this.applicationID + }; + + // browser will inline headers in the url, node.js will use http headers + // but in some situations, the API KEY will be too long (big secured API keys) + // so if the request is a POST and the KEY is very long, we will be asked to not put + // it into headers but in the JSON body + if (options.withApiKey !== false) { + requestHeaders['x-algolia-api-key'] = this.apiKey; + } + + if (this.userToken) { + requestHeaders['x-algolia-usertoken'] = this.userToken; + } + + if (this.securityTags) { + requestHeaders['x-algolia-tagfilters'] = this.securityTags; + } + + forEach(this.extraHeaders, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + + if (options.headers) { + forEach(options.headers, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + } + + return requestHeaders; +}; + +/** + * Search through multiple indices at the same time + * @param {Object[]} queries An array of queries you want to run. + * @param {string} queries[].indexName The index name you want to target + * @param {string} [queries[].query] The query to issue on this index. Can also be passed into `params` + * @param {Object} queries[].params Any search param like hitsPerPage, .. + * @param {Function} callback Callback to be called + * @return {Promise|undefined} Returns a promise if no callback given + */ +AlgoliaSearchCore.prototype.search = function(queries, opts, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.search(arrayOfQueries[, callback])'; + + if (!isArray(queries)) { + throw new Error(usage); + } + + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var client = this; + + var postObj = { + requests: map(queries, function prepareRequest(query) { + var params = ''; + + // allow query.query + // so we are mimicing the index.search(query, params) method + // {indexName:, query:, params:} + if (query.query !== undefined) { + params += 'query=' + encodeURIComponent(query.query); + } + + return { + indexName: query.indexName, + params: client._getSearchParams(query.params, params) + }; + }) + }; + + var JSONPParams = map(postObj.requests, function prepareJSONPParams(request, requestId) { + return requestId + '=' + + encodeURIComponent( + '/1/indexes/' + encodeURIComponent(request.indexName) + '?' + + request.params + ); + }).join('&'); + + var url = '/1/indexes/*/queries'; + + if (opts.strategy !== undefined) { + postObj.strategy = opts.strategy; + } + + return this._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url, + body: postObj, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/*', + body: { + params: JSONPParams + } + }, + callback: callback + }); +}; + +/** +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* This is the top-level API for SFFV. +* +* @param {object[]} queries An array of queries to run. +* @param {string} queries[].indexName Index name, name of the index to search. +* @param {object} queries[].params Query parameters. +* @param {string} queries[].params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} queries[].params.facetQuery Query for the facet search +* @param {string} [queries[].params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +*/ +AlgoliaSearchCore.prototype.searchForFacetValues = function(queries) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])'; // eslint-disable-line max-len + + if (!isArray(queries)) { + throw new Error(usage); + } + + var client = this; + + return client._promise.all(map(queries, function performQuery(query) { + if ( + !query || + query.indexName === undefined || + query.params.facetName === undefined || + query.params.facetQuery === undefined + ) { + throw new Error(usage); + } + + var clone = require(26); + var omit = require(34); + + var indexName = query.indexName; + var params = query.params; + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = client._getSearchParams(filteredParams, ''); + + return client._jsonRequest({ + cache: client.cache, + method: 'POST', + url: + '/1/indexes/' + + encodeURIComponent(indexName) + + '/facets/' + + encodeURIComponent(facetName) + + '/query', + hostType: 'read', + body: {params: searchParameters} + }); + })); +}; + +/** + * Set the extra security tagFilters header + * @param {string|array} tags The list of tags defining the current security filters + */ +AlgoliaSearchCore.prototype.setSecurityTags = function(tags) { + if (Object.prototype.toString.call(tags) === '[object Array]') { + var strTags = []; + for (var i = 0; i < tags.length; ++i) { + if (Object.prototype.toString.call(tags[i]) === '[object Array]') { + var oredTags = []; + for (var j = 0; j < tags[i].length; ++j) { + oredTags.push(tags[i][j]); + } + strTags.push('(' + oredTags.join(',') + ')'); + } else { + strTags.push(tags[i]); + } + } + tags = strTags.join(','); + } + + this.securityTags = tags; +}; + +/** + * Set the extra user token header + * @param {string} userToken The token identifying a uniq user (used to apply rate limits) + */ +AlgoliaSearchCore.prototype.setUserToken = function(userToken) { + this.userToken = userToken; +}; + +/** + * Clear all queries in client's cache + * @return undefined + */ +AlgoliaSearchCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/** +* Set the number of milliseconds a request can take before automatically being terminated. +* @deprecated +* @param {Number} milliseconds +*/ +AlgoliaSearchCore.prototype.setRequestTimeout = function(milliseconds) { + if (milliseconds) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = milliseconds; + } +}; + +/** +* Set the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.setTimeouts = function(timeouts) { + this._timeouts = timeouts; +}; + +/** +* Get the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.getTimeouts = function() { + return this._timeouts; +}; + +AlgoliaSearchCore.prototype._getAppIdData = function() { + var data = store.get(this.applicationID); + if (data !== null) this._cacheAppIdData(data); + return data; +}; + +AlgoliaSearchCore.prototype._setAppIdData = function(data) { + data.lastChange = (new Date()).getTime(); + this._cacheAppIdData(data); + return store.set(this.applicationID, data); +}; + +AlgoliaSearchCore.prototype._checkAppIdData = function() { + var data = this._getAppIdData(); + var now = (new Date()).getTime(); + if (data === null || now - data.lastChange > RESET_APP_DATA_TIMER) { + return this._resetInitialAppIdData(data); + } + + return data; +}; + +AlgoliaSearchCore.prototype._resetInitialAppIdData = function(data) { + var newData = data || {}; + newData.hostIndexes = {read: 0, write: 0}; + newData.timeoutMultiplier = 1; + newData.shuffleResult = newData.shuffleResult || shuffle([1, 2, 3]); + return this._setAppIdData(newData); +}; + +AlgoliaSearchCore.prototype._cacheAppIdData = function(data) { + this._hostIndexes = data.hostIndexes; + this._timeoutMultiplier = data.timeoutMultiplier; + this._shuffleResult = data.shuffleResult; +}; + +AlgoliaSearchCore.prototype._partialAppIdDataUpdate = function(newData) { + var foreach = require(5); + var currentData = this._getAppIdData(); + foreach(newData, function(value, key) { + currentData[key] = value; + }); + + return this._setAppIdData(currentData); +}; + +AlgoliaSearchCore.prototype._getHostByType = function(hostType) { + return this.hosts[hostType][this._getHostIndexByType(hostType)]; +}; + +AlgoliaSearchCore.prototype._getTimeoutMultiplier = function() { + return this._timeoutMultiplier; +}; + +AlgoliaSearchCore.prototype._getHostIndexByType = function(hostType) { + return this._hostIndexes[hostType]; +}; + +AlgoliaSearchCore.prototype._setHostIndexByType = function(hostIndex, hostType) { + var clone = require(26); + var newHostIndexes = clone(this._hostIndexes); + newHostIndexes[hostType] = hostIndex; + this._partialAppIdDataUpdate({hostIndexes: newHostIndexes}); + return hostIndex; +}; + +AlgoliaSearchCore.prototype._incrementHostIndex = function(hostType) { + return this._setHostIndexByType( + (this._getHostIndexByType(hostType) + 1) % this.hosts[hostType].length, hostType + ); +}; + +AlgoliaSearchCore.prototype._incrementTimeoutMultipler = function() { + var timeoutMultiplier = Math.max(this._timeoutMultiplier + 1, 4); + return this._partialAppIdDataUpdate({timeoutMultiplier: timeoutMultiplier}); +}; + +AlgoliaSearchCore.prototype._getTimeoutsForRequest = function(hostType) { + return { + connect: this._timeouts.connect * this._timeoutMultiplier, + complete: this._timeouts[hostType] * this._timeoutMultiplier + }; +}; + +function prepareHost(protocol) { + return function prepare(host) { + return protocol + '//' + host.toLowerCase(); + }; +} + +// Prototype.js < 1.7, a widely used library, defines a weird +// Array.prototype.toJSON function that will fail to stringify our content +// appropriately +// refs: +// - https://groups.google.com/forum/#!topic/prototype-core/E-SAVvV_V9Q +// - https://github.com/sstephenson/prototype/commit/038a2985a70593c1a86c230fadbdfe2e4898a48c +// - http://stackoverflow.com/a/3148441/147079 +function safeJSONStringify(obj) { + /* eslint no-extend-native:0 */ + + if (Array.prototype.toJSON === undefined) { + return JSON.stringify(obj); + } + + var toJSON = Array.prototype.toJSON; + delete Array.prototype.toJSON; + var out = JSON.stringify(obj); + Array.prototype.toJSON = toJSON; + + return out; +} + +function shuffle(array) { + var currentIndex = array.length; + var temporaryValue; + var randomIndex; + + // While there remain elements to shuffle... + while (currentIndex !== 0) { + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +function removeCredentials(headers) { + var newHeaders = {}; + + for (var headerName in headers) { + if (Object.prototype.hasOwnProperty.call(headers, headerName)) { + var value; + + if (headerName === 'x-algolia-api-key' || headerName === 'x-algolia-application-id') { + value = '**hidden for security purposes**'; + } else { + value = headers[headerName]; + } + + newHeaders[headerName] = value; + } + } + + return newHeaders; +} + +}).call(this,require(12)) +},{"1":1,"12":12,"20":20,"26":26,"30":30,"31":31,"32":32,"34":34,"36":36,"5":5,"8":8}],18:[function(require,module,exports){ +var inherits = require(7); +var IndexCore = require(20); +var deprecate = require(28); +var deprecatedMessage = require(29); +var exitPromise = require(31); +var errors = require(30); + +var deprecateForwardToSlaves = deprecate( + function() {}, + deprecatedMessage('forwardToSlaves', 'forwardToReplicas') +); + +module.exports = Index; + +function Index() { + IndexCore.apply(this, arguments); +} + +inherits(Index, IndexCore); + +/* +* Add an object in this index +* +* @param content contains the javascript object to add inside the index +* @param objectID (optional) an objectID you want to attribute to this object +* (if the attribute already exist the old object will be overwrite) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.addObject = function(content, objectID, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof objectID === 'function') { + callback = objectID; + objectID = undefined; + } + + return this.as._jsonRequest({ + method: objectID !== undefined ? + 'PUT' : // update or create + 'POST', // create (API generates an objectID) + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + // create + (objectID !== undefined ? '/' + encodeURIComponent(objectID) : ''), // update or create + body: content, + hostType: 'write', + callback: callback + }); +}; + +/* +* Add several objects +* +* @param objects contains an array of objects to add +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.addObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.addObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'addObject', + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Update partially an object (only update attributes passed in argument) +* +* @param partialObject contains the javascript attributes to override, the +* object must contains an objectID attribute +* @param createIfNotExists (optional) if false, avoid an automatic creation of the object +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.partialUpdateObject = function(partialObject, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = undefined; + } + + var indexObj = this; + var url = '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(partialObject.objectID) + '/partial'; + if (createIfNotExists === false) { + url += '?createIfNotExists=false'; + } + + return this.as._jsonRequest({ + method: 'POST', + url: url, + body: partialObject, + hostType: 'write', + callback: callback + }); +}; + +/* +* Partially Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.partialUpdateObjects = function(objects, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = true; + } + + var isArray = require(8); + var usage = 'Usage: index.partialUpdateObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: createIfNotExists === true ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of object +* +* @param object contains the javascript object to save, the object must contains an objectID attribute +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObject = function(object, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(object.objectID), + body: object, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.saveObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'updateObject', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete an object from the index +* +* @param objectID the unique identifier of object to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObject = function(objectID, callback) { + if (typeof objectID === 'function' || typeof objectID !== 'string' && typeof objectID !== 'number') { + var err = new errors.AlgoliaSearchError( + objectID && typeof objectID !== 'function' + ? 'ObjectID must be a string' + : 'Cannot delete an object without an objectID' + ); + callback = objectID; + if (typeof callback === 'function') { + return callback(err); + } + + return this.as._promise.reject(err); + } + + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID), + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete several objects from an index +* +* @param objectIDs contains an array of objectID to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObjects = function(objectIDs, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.deleteObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: map(objectIDs, function prepareRequest(objectID) { + return { + action: 'deleteObject', + objectID: objectID, + body: { + objectID: objectID + } + }; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete all objects matching a query +* +* @param query the query string +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +* @deprecated see index.deleteBy +*/ +Index.prototype.deleteByQuery = deprecate(function(query, params, callback) { + var clone = require(26); + var map = require(32); + + var indexObj = this; + var client = indexObj.as; + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = {}; + } else { + params = clone(params); + } + + params.attributesToRetrieve = 'objectID'; + params.hitsPerPage = 1000; + params.distinct = false; + + // when deleting, we should never use cache to get the + // search results + this.clearCache(); + + // there's a problem in how we use the promise chain, + // see how waitTask is done + var promise = this + .search(query, params) + .then(stopOrDelete); + + function stopOrDelete(searchContent) { + // stop here + if (searchContent.nbHits === 0) { + // return indexObj.as._request.resolve(); + return searchContent; + } + + // continue and do a recursive call + var objectIDs = map(searchContent.hits, function getObjectID(object) { + return object.objectID; + }); + + return indexObj + .deleteObjects(objectIDs) + .then(waitTask) + .then(doDeleteByQuery); + } + + function waitTask(deleteObjectsContent) { + return indexObj.waitTask(deleteObjectsContent.taskID); + } + + function doDeleteByQuery() { + return indexObj.deleteByQuery(query, params); + } + + if (!callback) { + return promise; + } + + promise.then(success, failure); + + function success() { + exitPromise(function exit() { + callback(null); + }, client._setTimeout || setTimeout); + } + + function failure(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}, deprecatedMessage('index.deleteByQuery()', 'index.deleteBy()')); + +/** +* Delete all objects matching a query +* +* the query parameters that can be used are: +* - filters (numeric, facet, tag) +* - geo +* +* you can not send an empty query or filters +* +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +*/ +Index.prototype.deleteBy = function(params, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/deleteByQuery', + body: {params: indexObj.as._getSearchParams(params, '')}, + hostType: 'write', + callback: callback + }); +}; + +/* +* Browse all content from an index using events. Basically this will do +* .browse() -> .browseFrom -> .browseFrom -> .. until all the results are returned +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @return {EventEmitter} +* @example +* var browser = index.browseAll('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }); +* +* browser.on('result', function resultCallback(content) { +* console.log(content.hits); +* }); +* +* // if any error occurs, you get it +* browser.on('error', function(err) { +* throw err; +* }); +* +* // when you have browsed the whole index, you get this event +* browser.on('end', function() { +* console.log('finished'); +* }); +* +* // at any point if you want to stop the browsing process, you can stop it manually +* // otherwise it will go on and on +* browser.stop(); +* +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +Index.prototype.browseAll = function(query, queryParameters) { + if (typeof query === 'object') { + queryParameters = query; + query = undefined; + } + + var merge = require(33); + + var IndexBrowser = require(19); + + var browser = new IndexBrowser(); + var client = this.as; + var index = this; + var params = client._getSearchParams( + merge({}, queryParameters || {}, { + query: query + }), '' + ); + + // start browsing + browseLoop(); + + function browseLoop(cursor) { + if (browser._stopped) { + return; + } + + var body; + + if (cursor !== undefined) { + body = { + cursor: cursor + }; + } else { + body = { + params: params + }; + } + + client._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(index.indexName) + '/browse', + hostType: 'read', + body: body, + callback: browseCallback + }); + } + + function browseCallback(err, content) { + if (browser._stopped) { + return; + } + + if (err) { + browser._error(err); + return; + } + + browser._result(content); + + // no cursor means we are finished browsing + if (content.cursor === undefined) { + browser._end(); + return; + } + + browseLoop(content.cursor); + } + + return browser; +}; + +/* +* Get a Typeahead.js adapter +* @param searchParams contains an object with query parameters (see search for details) +*/ +Index.prototype.ttAdapter = deprecate(function(params) { + var self = this; + return function ttAdapter(query, syncCb, asyncCb) { + var cb; + + if (typeof asyncCb === 'function') { + // typeahead 0.11 + cb = asyncCb; + } else { + // pre typeahead 0.11 + cb = syncCb; + } + + self.search(query, params, function searchDone(err, content) { + if (err) { + cb(err); + return; + } + + cb(content.hits); + }); + }; +}, +'ttAdapter is not necessary anymore and will be removed in the next version,\n' + +'have a look at autocomplete.js (https://github.com/algolia/autocomplete.js)'); + +/* +* Wait the publication of a task on the server. +* All server task are asynchronous and you can check with this method that the task is published. +* +* @param taskID the id of the task returned by server +* @param callback the result callback with with two arguments: +* error: null or Error('message') +* content: the server answer that contains the list of results +*/ +Index.prototype.waitTask = function(taskID, callback) { + // wait minimum 100ms before retrying + var baseDelay = 100; + // wait maximum 5s before retrying + var maxDelay = 5000; + var loop = 0; + + // waitTask() must be handled differently from other methods, + // it's a recursive method using a timeout + var indexObj = this; + var client = indexObj.as; + + var promise = retryLoop(); + + function retryLoop() { + return client._jsonRequest({ + method: 'GET', + hostType: 'read', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/task/' + taskID + }).then(function success(content) { + loop++; + var delay = baseDelay * loop * loop; + if (delay > maxDelay) { + delay = maxDelay; + } + + if (content.status !== 'published') { + return client._promise.delay(delay).then(retryLoop); + } + + return content; + }); + } + + if (!callback) { + return promise; + } + + promise.then(successCb, failureCb); + + function successCb(content) { + exitPromise(function exit() { + callback(null, content); + }, client._setTimeout || setTimeout); + } + + function failureCb(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}; + +/* +* This function deletes the index content. Settings and index specific API keys are kept untouched. +* +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.clearIndex = function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/clear', + hostType: 'write', + callback: callback + }); +}; + +/* +* Get settings of this index +* +* @param opts an object of options to add +* @param opts.advanced get more settings like nbShards (useful for Enterprise) +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.getSettings = function(opts, callback) { + if (arguments.length === 1 && typeof opts === 'function') { + callback = opts; + opts = {}; + } + opts = opts || {}; + + var indexName = encodeURIComponent(this.indexName); + return this.as._jsonRequest({ + method: 'GET', + url: + '/1/indexes/' + + indexName + + '/settings?getVersion=2' + + (opts.advanced ? '&advanced=' + opts.advanced : ''), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.searchSynonyms = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/search', + body: params, + hostType: 'read', + callback: callback + }); +}; + +function exportData(method, _hitsPerPage, callback) { + function search(page, _previous) { + var options = { + page: page || 0, + hitsPerPage: _hitsPerPage || 100 + }; + var previous = _previous || []; + + return method(options).then(function(result) { + var hits = result.hits; + var nbHits = result.nbHits; + var current = hits.map(function(s) { + delete s._highlightResult; + return s; + }); + var synonyms = previous.concat(current); + if (synonyms.length < nbHits) { + return search(options.page + 1, synonyms); + } + return synonyms; + }); + } + return search().then(function(data) { + if (typeof callback === 'function') { + callback(data); + return undefined; + } + return data; + }); +} + +/** + * Retrieve all the synonyms in an index + * @param [number=100] hitsPerPage The amount of synonyms to retrieve per batch + * @param [function] callback will be called after all synonyms are retrieved + */ +Index.prototype.exportSynonyms = function(hitsPerPage, callback) { + return exportData(this.searchSynonyms.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveSynonym = function(synonym, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(synonym.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: synonym, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getSynonym = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteSynonym = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearSynonyms = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchSynonyms = function(synonyms, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&replaceExistingSynonyms=' + (opts.replaceExistingSynonyms ? 'true' : 'false'), + hostType: 'write', + body: synonyms, + callback: callback + }); +}; + +Index.prototype.searchRules = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/search', + body: params, + hostType: 'read', + callback: callback + }); +}; +/** + * Retrieve all the query rules in an index + * @param [number=100] hitsPerPage The amount of query rules to retrieve per batch + * @param [function] callback will be called after all query rules are retrieved + * error: null or Error('message') + */ +Index.prototype.exportRules = function(hitsPerPage, callback) { + return exportData(this.searchRules.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveRule = function(rule, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (!rule.objectID) { + throw new errors.AlgoliaSearchError('Missing or empty objectID field for rule'); + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(rule.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: rule, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getRule = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteRule = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearRules = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchRules = function(rules, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&clearExistingRules=' + (opts.clearExistingRules === true ? 'true' : 'false'), + hostType: 'write', + body: rules, + callback: callback + }); +}; + +Index.prototype.exists = function(callback) { + var result = this.getSettings().then(function() { + return true; + }).catch(function(err) { + if (err instanceof errors.AlgoliaSearchError && err.statusCode === 404) { + return false; + } + + throw err; + }); + + if (typeof callback !== 'function') { + return result; + } + + result.then(function(res) { + callback(null, res); + }).catch(function(err) { + callback(err); + }); +}; + +Index.prototype.findObject = function(findCallback, requestOptions, callback) { + requestOptions = requestOptions === undefined ? {} : requestOptions; + var paginate = requestOptions.paginate !== undefined ? requestOptions.paginate : true; + var query = requestOptions.query !== undefined ? requestOptions.query : ''; + + var that = this; + var page = 0; + + var paginateLoop = function() { + requestOptions.page = page; + + return that.search(query, requestOptions).then(function(result) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + var hit = hits[position]; + if (findCallback(hit)) { + return { + object: hit, + position: position, + page: page + }; + } + } + + page += 1; + + // paginate if option was set and has next page + if (!paginate || page >= result.nbPages) { + throw new errors.ObjectNotFound('Object not found'); + } + + return paginateLoop(); + }); + }; + + var promise = paginateLoop(page); + + if (callback === undefined) { + return promise; + } + + promise + .then(function(res) { + callback(null, res); + }) + .catch(function(err) { + callback(err); + }); +}; + +Index.prototype.getObjectPosition = function(result, objectID) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + if (hits[position].objectID === objectID) { + return position; + } + } + + return -1; +}; + +/* +* Set settings for this index +* +* @param settings the settings object that can contains : +* - minWordSizefor1Typo: (integer) the minimum number of characters to accept one typo (default = 3). +* - minWordSizefor2Typos: (integer) the minimum number of characters to accept two typos (default = 7). +* - hitsPerPage: (integer) the number of hits per page (default = 10). +* - attributesToRetrieve: (array of strings) default list of attributes to retrieve in objects. +* If set to null, all attributes are retrieved. +* - attributesToHighlight: (array of strings) default list of attributes to highlight. +* If set to null, all indexed attributes are highlighted. +* - attributesToSnippet**: (array of strings) default list of attributes to snippet alongside the number +* of words to return (syntax is attributeName:nbWords). +* By default no snippet is computed. If set to null, no snippet is computed. +* - attributesToIndex: (array of strings) the list of fields you want to index. +* If set to null, all textual and numerical attributes of your objects are indexed, +* but you should update it to get optimal results. +* This parameter has two important uses: +* - Limit the attributes to index: For example if you store a binary image in base64, +* you want to store it and be able to +* retrieve it but you don't want to search in the base64 string. +* - Control part of the ranking*: (see the ranking parameter for full explanation) +* Matches in attributes at the beginning of +* the list will be considered more important than matches in attributes further down the list. +* In one attribute, matching text at the beginning of the attribute will be +* considered more important than text after, you can disable +* this behavior if you add your attribute inside `unordered(AttributeName)`, +* for example attributesToIndex: ["title", "unordered(text)"]. +* - attributesForFaceting: (array of strings) The list of fields you want to use for faceting. +* All strings in the attribute selected for faceting are extracted and added as a facet. +* If set to null, no attribute is used for faceting. +* - attributeForDistinct: (string) The attribute name used for the Distinct feature. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in query with the distinct=1 parameter, all hits containing a duplicate +* value for this attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best one is kept and others are removed. +* - ranking: (array of strings) controls the way results are sorted. +* We have six available criteria: +* - typo: sort according to number of typos, +* - geo: sort according to decreassing distance when performing a geo-location based search, +* - proximity: sort according to the proximity of query words in hits, +* - attribute: sort according to the order of attributes defined by attributesToIndex, +* - exact: +* - if the user query contains one word: sort objects having an attribute +* that is exactly the query word before others. +* For example if you search for the "V" TV show, you want to find it +* with the "V" query and avoid to have all popular TV +* show starting by the v letter before it. +* - if the user query contains multiple words: sort according to the +* number of words that matched exactly (and not as a prefix). +* - custom: sort according to a user defined formula set in **customRanking** attribute. +* The standard order is ["typo", "geo", "proximity", "attribute", "exact", "custom"] +* - customRanking: (array of strings) lets you specify part of the ranking. +* The syntax of this condition is an array of strings containing attributes +* prefixed by asc (ascending order) or desc (descending order) operator. +* For example `"customRanking" => ["desc(population)", "asc(name)"]` +* - queryType: Select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - highlightPreTag: (string) Specify the string that is inserted before +* the highlighted parts in the query result (default to ""). +* - highlightPostTag: (string) Specify the string that is inserted after +* the highlighted parts in the query result (default to ""). +* - optionalWords: (array of strings) Specify a list of words that should +* be considered as optional when found in the query. +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the server answer or the error message if a failure occurred +*/ +Index.prototype.setSettings = function(settings, opts, callback) { + if (arguments.length === 1 || typeof opts === 'function') { + callback = opts; + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/settings?forwardToReplicas=' + + forwardToReplicas, + hostType: 'write', + body: settings, + callback: callback + }); +}; + +/* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('index.listUserKeys()', 'client.listApiKeys()')); + +/* +* List all existing API keys to this index +* +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with API keys belonging to the index +* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listApiKeys = deprecate(function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys', + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.listApiKeys()', 'client.listApiKeys()')); + +/* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('index.getUserKeyACL()', 'client.getApiKey()')); + + +/* +* Get an API key from this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the right API key +* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.getApiKey()', 'client.getApiKey()')); + +/* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('index.deleteUserKey()', 'client.deleteApiKey()')); + +/* +* Delete an existing API key associated to this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the deletion date +* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.deleteApiKey()', 'client.deleteApiKey()')); + +/* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKey()', 'client.addApiKey()')); + +/* +* Add a new API key to this index +* +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the added API key +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.addUserKey(['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#AddIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addApiKey = deprecate(function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.addApiKey()', 'client.addApiKey()')); + +/** +* @deprecated use client.addApiKey() +*/ +Index.prototype.addUserKeyWithValidity = deprecate(function deprecatedAddUserKeyWithValidity(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKeyWithValidity()', 'client.addApiKey()')); + +/* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('index.updateUserKey()', 'client.updateApiKey()')); + +/** +* Update an existing API key of this index +* @param {string} key - The key to update +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with user keys list +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.updateApiKey('APIKEY', ['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateApiKey = deprecate(function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.updateApiKey()', 'client.updateApiKey()')); + +},{"19":19,"20":20,"26":26,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"7":7,"8":8}],19:[function(require,module,exports){ +'use strict'; + +// This is the object returned by the `index.browseAll()` method + +module.exports = IndexBrowser; + +var inherits = require(7); +var EventEmitter = require(4).EventEmitter; + +function IndexBrowser() { +} + +inherits(IndexBrowser, EventEmitter); + +IndexBrowser.prototype.stop = function() { + this._stopped = true; + this._clean(); +}; + +IndexBrowser.prototype._end = function() { + this.emit('end'); + this._clean(); +}; + +IndexBrowser.prototype._error = function(err) { + this.emit('error', err); + this._clean(); +}; + +IndexBrowser.prototype._result = function(content) { + this.emit('result', content); +}; + +IndexBrowser.prototype._clean = function() { + this.removeAllListeners('stop'); + this.removeAllListeners('end'); + this.removeAllListeners('error'); + this.removeAllListeners('result'); +}; + +},{"4":4,"7":7}],20:[function(require,module,exports){ +var buildSearchMethod = require(25); +var deprecate = require(28); +var deprecatedMessage = require(29); + +module.exports = IndexCore; + +/* +* Index class constructor. +* You should not use this method directly but use initIndex() function +*/ +function IndexCore(algoliasearch, indexName) { + this.indexName = indexName; + this.as = algoliasearch; + this.typeAheadArgs = null; + this.typeAheadValueOption = null; + + // make sure every index instance has it's own cache + this.cache = {}; +} + +/* +* Clear all queries in cache +*/ +IndexCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/* +* Search inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the full text query +* @param {object} [args] (optional) if set, contains an object with query parameters: +* - page: (integer) Pagination parameter used to select the page to retrieve. +* Page is zero-based and defaults to 0. Thus, +* to retrieve the 10th page you need to set page=9 +* - hitsPerPage: (integer) Pagination parameter used to select the number of hits per page. Defaults to 20. +* - attributesToRetrieve: a string that contains the list of object attributes +* you want to retrieve (let you minimize the answer size). +* Attributes are separated with a comma (for example "name,address"). +* You can also use an array (for example ["name","address"]). +* By default, all attributes are retrieved. You can also use '*' to retrieve all +* values when an attributesToRetrieve setting is specified for your index. +* - attributesToHighlight: a string that contains the list of attributes you +* want to highlight according to the query. +* Attributes are separated by a comma. You can also use an array (for example ["name","address"]). +* If an attribute has no match for the query, the raw value is returned. +* By default all indexed text attributes are highlighted. +* You can use `*` if you want to highlight all textual attributes. +* Numerical attributes are not highlighted. +* A matchLevel is returned for each highlighted attribute and can contain: +* - full: if all the query terms were found in the attribute, +* - partial: if only some of the query terms were found, +* - none: if none of the query terms were found. +* - attributesToSnippet: a string that contains the list of attributes to snippet alongside +* the number of words to return (syntax is `attributeName:nbWords`). +* Attributes are separated by a comma (Example: attributesToSnippet=name:10,content:10). +* You can also use an array (Example: attributesToSnippet: ['name:10','content:10']). +* By default no snippet is computed. +* - minWordSizefor1Typo: the minimum number of characters in a query word to accept one typo in this word. +* Defaults to 3. +* - minWordSizefor2Typos: the minimum number of characters in a query word +* to accept two typos in this word. Defaults to 7. +* - getRankingInfo: if set to 1, the result hits will contain ranking +* information in _rankingInfo attribute. +* - aroundLatLng: search for entries around a given +* latitude/longitude (specified as two floats separated by a comma). +* For example aroundLatLng=47.316669,5.016670). +* You can specify the maximum distance in meters with the aroundRadius parameter (in meters) +* and the precision for ranking with aroundPrecision +* (for example if you set aroundPrecision=100, two objects that are distant of +* less than 100m will be considered as identical for "geo" ranking parameter). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - insideBoundingBox: search entries inside a given area defined by the two extreme points +* of a rectangle (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng). +* For example insideBoundingBox=47.3165,4.9665,47.3424,5.0201). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - numericFilters: a string that contains the list of numeric filters you want to +* apply separated by a comma. +* The syntax of one filter is `attributeName` followed by `operand` followed by `value`. +* Supported operands are `<`, `<=`, `=`, `>` and `>=`. +* You can have multiple conditions on one attribute like for example numericFilters=price>100,price<1000. +* You can also use an array (for example numericFilters: ["price>100","price<1000"]). +* - tagFilters: filter the query by a set of tags. You can AND tags by separating them by commas. +* To OR tags, you must add parentheses. For example, tags=tag1,(tag2,tag3) means tag1 AND (tag2 OR tag3). +* You can also use an array, for example tagFilters: ["tag1",["tag2","tag3"]] +* means tag1 AND (tag2 OR tag3). +* At indexing, tags should be added in the _tags** attribute +* of objects (for example {"_tags":["tag1","tag2"]}). +* - facetFilters: filter the query by a list of facets. +* Facets are separated by commas and each facet is encoded as `attributeName:value`. +* For example: `facetFilters=category:Book,author:John%20Doe`. +* You can also use an array (for example `["category:Book","author:John%20Doe"]`). +* - facets: List of object attributes that you want to use for faceting. +* Comma separated list: `"category,author"` or array `['category','author']` +* Only attributes that have been added in **attributesForFaceting** index setting +* can be used in this parameter. +* You can also use `*` to perform faceting on all attributes specified in **attributesForFaceting**. +* - queryType: select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - optionalWords: a string that contains the list of words that should +* be considered as optional when found in the query. +* Comma separated and array are accepted. +* - distinct: If set to 1, enable the distinct feature (disabled by default) +* if the attributeForDistinct index setting is set. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in a query with the distinct=1 parameter, +* all hits containing a duplicate value for the attributeForDistinct attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best +* one is kept and others are removed. +* - restrictSearchableAttributes: List of attributes you want to use for +* textual search (must be a subset of the attributesToIndex index setting) +* either comma separated or as an array +* @param {function} [callback] the result callback called with two arguments: +* error: null or Error('message'). If false, the content contains the error. +* content: the server answer that contains the list of results. +*/ +IndexCore.prototype.search = buildSearchMethod('query'); + +/* +* -- BETA -- +* Search a record similar to the query inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the similar query +* @param {object} [args] (optional) if set, contains an object with query parameters. +* All search parameters are supported (see search function), restrictSearchableAttributes and facetFilters +* are the two most useful to restrict the similar results and get more relevant content +*/ +IndexCore.prototype.similarSearch = deprecate( + buildSearchMethod('similarQuery'), + deprecatedMessage( + 'index.similarSearch(query[, callback])', + 'index.search({ similarQuery: query }[, callback])' + ) +); + +/* +* Browse index content. The response content will have a `cursor` property that you can use +* to browse subsequent pages for this query. Use `index.browseFrom(cursor)` when you want. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browse('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }, callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browse = function(query, queryParameters, callback) { + var merge = require(33); + + var indexObj = this; + + var page; + var hitsPerPage; + + // we check variadic calls that are not the one defined + // .browse()/.browse(fn) + // => page = 0 + if (arguments.length === 0 || arguments.length === 1 && typeof arguments[0] === 'function') { + page = 0; + callback = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'number') { + // .browse(2)/.browse(2, 10)/.browse(2, fn)/.browse(2, 10, fn) + page = arguments[0]; + if (typeof arguments[1] === 'number') { + hitsPerPage = arguments[1]; + } else if (typeof arguments[1] === 'function') { + callback = arguments[1]; + hitsPerPage = undefined; + } + query = undefined; + queryParameters = undefined; + } else if (typeof arguments[0] === 'object') { + // .browse(queryParameters)/.browse(queryParameters, cb) + if (typeof arguments[1] === 'function') { + callback = arguments[1]; + } + queryParameters = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'string' && typeof arguments[1] === 'function') { + // .browse(query, cb) + callback = arguments[1]; + queryParameters = undefined; + } + + // otherwise it's a .browse(query)/.browse(query, queryParameters)/.browse(query, queryParameters, cb) + + // get search query parameters combining various possible calls + // to .browse(); + queryParameters = merge({}, queryParameters || {}, { + page: page, + hitsPerPage: hitsPerPage, + query: query + }); + + var params = this.as._getSearchParams(queryParameters, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/browse', + body: {params: params}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Continue browsing from a previous position (cursor), obtained via a call to `.browse()`. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browseFrom('14lkfsakl32', callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browseFrom = function(cursor, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/browse', + body: {cursor: cursor}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* +* @param {string} params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} params.facetQuery Query for the facet search +* @param {string} [params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +* @param callback (optional) +*/ +IndexCore.prototype.searchForFacetValues = function(params, callback) { + var clone = require(26); + var omit = require(34); + var usage = 'Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])'; + + if (params.facetName === undefined || params.facetQuery === undefined) { + throw new Error(usage); + } + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = this.as._getSearchParams(filteredParams, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + + encodeURIComponent(this.indexName) + '/facets/' + encodeURIComponent(facetName) + '/query', + hostType: 'read', + body: {params: searchParameters}, + callback: callback + }); +}; + +IndexCore.prototype.searchFacet = deprecate(function(params, callback) { + return this.searchForFacetValues(params, callback); +}, deprecatedMessage( + 'index.searchFacet(params[, callback])', + 'index.searchForFacetValues(params[, callback])' +)); + +IndexCore.prototype._search = function(params, url, callback, additionalUA) { + return this.as._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url || '/1/indexes/' + encodeURIComponent(this.indexName) + '/query', + body: {params: params}, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName), + body: {params: params} + }, + callback: callback, + additionalUA: additionalUA + }); +}; + +/* +* Get an object from this index +* +* @param objectID the unique identifier of the object to retrieve +* @param attrs (optional) if set, contains the array of attribute names to retrieve +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the object to retrieve or the error message if a failure occurred +*/ +IndexCore.prototype.getObject = function(objectID, attrs, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof attrs === 'function') { + callback = attrs; + attrs = undefined; + } + + var params = ''; + if (attrs !== undefined) { + params = '?attributes='; + for (var i = 0; i < attrs.length; ++i) { + if (i !== 0) { + params += ','; + } + params += attrs[i]; + } + } + + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID) + params, + hostType: 'read', + callback: callback + }); +}; + +/* +* Get several objects from this index +* +* @param objectIDs the array of unique identifier of objects to retrieve +*/ +IndexCore.prototype.getObjects = function(objectIDs, attributesToRetrieve, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.getObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + + if (arguments.length === 1 || typeof attributesToRetrieve === 'function') { + callback = attributesToRetrieve; + attributesToRetrieve = undefined; + } + + var body = { + requests: map(objectIDs, function prepareRequest(objectID) { + var request = { + indexName: indexObj.indexName, + objectID: objectID + }; + + if (attributesToRetrieve) { + request.attributesToRetrieve = attributesToRetrieve.join(','); + } + + return request; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/objects', + hostType: 'read', + body: body, + callback: callback + }); +}; + +IndexCore.prototype.as = null; +IndexCore.prototype.indexName = null; +IndexCore.prototype.typeAheadArgs = null; +IndexCore.prototype.typeAheadValueOption = null; + +},{"25":25,"26":26,"28":28,"29":29,"32":32,"33":33,"34":34,"8":8}],21:[function(require,module,exports){ +'use strict'; + +var AlgoliaSearch = require(16); +var createAlgoliasearch = require(22); + +module.exports = createAlgoliasearch(AlgoliaSearch, 'Browser'); + +},{"16":16,"22":22}],22:[function(require,module,exports){ +(function (process){ +'use strict'; + +var global = require(6); +var Promise = global.Promise || require(3).Promise; + +// This is the standalone browser build entry point +// Browser implementation of the Algolia Search JavaScript client, +// using XMLHttpRequest, XDomainRequest and JSONP as fallback +module.exports = function createAlgoliasearch(AlgoliaSearch, uaSuffix) { + var inherits = require(7); + var errors = require(30); + var inlineHeaders = require(23); + var jsonpRequest = require(24); + var places = require(35); + uaSuffix = uaSuffix || ''; + + if (process.env.NODE_ENV === 'debug') { + require(1).enable('algoliasearch*'); + } + + function algoliasearch(applicationID, apiKey, opts) { + var cloneDeep = require(26); + + opts = cloneDeep(opts || {}); + + opts._ua = opts._ua || algoliasearch.ua; + + return new AlgoliaSearchBrowser(applicationID, apiKey, opts); + } + + algoliasearch.version = require(37); + + algoliasearch.ua = + 'Algolia for JavaScript (' + algoliasearch.version + '); ' + uaSuffix; + + algoliasearch.initPlaces = places(algoliasearch); + + // we expose into window no matter how we are used, this will allow + // us to easily debug any website running algolia + global.__algolia = { + debug: require(1), + algoliasearch: algoliasearch + }; + + var support = { + hasXMLHttpRequest: 'XMLHttpRequest' in global, + hasXDomainRequest: 'XDomainRequest' in global + }; + + if (support.hasXMLHttpRequest) { + support.cors = 'withCredentials' in new XMLHttpRequest(); + } + + function AlgoliaSearchBrowser() { + // call AlgoliaSearch constructor + AlgoliaSearch.apply(this, arguments); + } + + inherits(AlgoliaSearchBrowser, AlgoliaSearch); + + AlgoliaSearchBrowser.prototype._request = function request(url, opts) { + return new Promise(function wrapRequest(resolve, reject) { + // no cors or XDomainRequest, no request + if (!support.cors && !support.hasXDomainRequest) { + // very old browser, not supported + reject(new errors.Network('CORS not supported')); + return; + } + + url = inlineHeaders(url, opts.headers); + + var body = opts.body; + var req = support.cors ? new XMLHttpRequest() : new XDomainRequest(); + var reqTimeout; + var timedOut; + var connected = false; + + reqTimeout = setTimeout(onTimeout, opts.timeouts.connect); + // we set an empty onprogress listener + // so that XDomainRequest on IE9 is not aborted + // refs: + // - https://github.com/algolia/algoliasearch-client-js/issues/76 + // - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment + req.onprogress = onProgress; + if ('onreadystatechange' in req) req.onreadystatechange = onReadyStateChange; + req.onload = onLoad; + req.onerror = onError; + + // do not rely on default XHR async flag, as some analytics code like hotjar + // breaks it and set it to false by default + if (req instanceof XMLHttpRequest) { + req.open(opts.method, url, true); + + // The Analytics API never accepts Auth headers as query string + // this option exists specifically for them. + if (opts.forceAuthHeaders) { + req.setRequestHeader( + 'x-algolia-application-id', + opts.headers['x-algolia-application-id'] + ); + req.setRequestHeader( + 'x-algolia-api-key', + opts.headers['x-algolia-api-key'] + ); + } + } else { + req.open(opts.method, url); + } + + // headers are meant to be sent after open + if (support.cors) { + if (body) { + if (opts.method === 'POST') { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Simple_requests + req.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); + } else { + req.setRequestHeader('content-type', 'application/json'); + } + } + req.setRequestHeader('accept', 'application/json'); + } + + if (body) { + req.send(body); + } else { + req.send(); + } + + // event object not received in IE8, at least + // but we do not use it, still important to note + function onLoad(/* event */) { + // When browser does not supports req.timeout, we can + // have both a load and timeout event, since handled by a dumb setTimeout + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + var out; + + try { + out = { + body: JSON.parse(req.responseText), + responseText: req.responseText, + statusCode: req.status, + // XDomainRequest does not have any response headers + headers: req.getAllResponseHeaders && req.getAllResponseHeaders() || {} + }; + } catch (e) { + out = new errors.UnparsableJSON({ + more: req.responseText + }); + } + + if (out instanceof errors.UnparsableJSON) { + reject(out); + } else { + resolve(out); + } + } + + function onError(event) { + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + // error event is trigerred both with XDR/XHR on: + // - DNS error + // - unallowed cross domain request + reject( + new errors.Network({ + more: event + }) + ); + } + + function onTimeout() { + timedOut = true; + req.abort(); + + reject(new errors.RequestTimeout()); + } + + function onConnect() { + connected = true; + clearTimeout(reqTimeout); + reqTimeout = setTimeout(onTimeout, opts.timeouts.complete); + } + + function onProgress() { + if (!connected) onConnect(); + } + + function onReadyStateChange() { + if (!connected && req.readyState > 1) onConnect(); + } + }); + }; + + AlgoliaSearchBrowser.prototype._request.fallback = function requestFallback(url, opts) { + url = inlineHeaders(url, opts.headers); + + return new Promise(function wrapJsonpRequest(resolve, reject) { + jsonpRequest(url, opts, function jsonpRequestDone(err, content) { + if (err) { + reject(err); + return; + } + + resolve(content); + }); + }); + }; + + AlgoliaSearchBrowser.prototype._promise = { + reject: function rejectPromise(val) { + return Promise.reject(val); + }, + resolve: function resolvePromise(val) { + return Promise.resolve(val); + }, + delay: function delayPromise(ms) { + return new Promise(function resolveOnTimeout(resolve/* , reject*/) { + setTimeout(resolve, ms); + }); + }, + all: function all(promises) { + return Promise.all(promises); + } + }; + + return algoliasearch; +}; + +}).call(this,require(12)) +},{"1":1,"12":12,"23":23,"24":24,"26":26,"3":3,"30":30,"35":35,"37":37,"6":6,"7":7}],23:[function(require,module,exports){ +'use strict'; + +module.exports = inlineHeaders; + +var encode = require(14); + +function inlineHeaders(url, headers) { + if (/\?/.test(url)) { + url += '&'; + } else { + url += '?'; + } + + return url + encode(headers); +} + +},{"14":14}],24:[function(require,module,exports){ +'use strict'; + +module.exports = jsonpRequest; + +var errors = require(30); + +var JSONPCounter = 0; + +function jsonpRequest(url, opts, cb) { + if (opts.method !== 'GET') { + cb(new Error('Method ' + opts.method + ' ' + url + ' is not supported by JSONP.')); + return; + } + + opts.debug('JSONP: start'); + + var cbCalled = false; + var timedOut = false; + + JSONPCounter += 1; + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + var cbName = 'algoliaJSONP_' + JSONPCounter; + var done = false; + + window[cbName] = function(data) { + removeGlobals(); + + if (timedOut) { + opts.debug('JSONP: Late answer, ignoring'); + return; + } + + cbCalled = true; + + clean(); + + cb(null, { + body: data, + responseText: JSON.stringify(data)/* , + // We do not send the statusCode, there's no statusCode in JSONP, it will be + // computed using data.status && data.message like with XDR + statusCode*/ + }); + }; + + // add callback by hand + url += '&callback=' + cbName; + + // add body params manually + if (opts.jsonBody && opts.jsonBody.params) { + url += '&' + opts.jsonBody.params; + } + + var ontimeout = setTimeout(timeout, opts.timeouts.complete); + + // script onreadystatechange needed only for + // <= IE8 + // https://github.com/angular/angular.js/issues/4523 + script.onreadystatechange = readystatechange; + script.onload = success; + script.onerror = error; + + script.async = true; + script.defer = true; + script.src = url; + head.appendChild(script); + + function success() { + opts.debug('JSONP: success'); + + if (done || timedOut) { + return; + } + + done = true; + + // script loaded but did not call the fn => script loading error + if (!cbCalled) { + opts.debug('JSONP: Fail. Script loaded but did not call the callback'); + clean(); + cb(new errors.JSONPScriptFail()); + } + } + + function readystatechange() { + if (this.readyState === 'loaded' || this.readyState === 'complete') { + success(); + } + } + + function clean() { + clearTimeout(ontimeout); + script.onload = null; + script.onreadystatechange = null; + script.onerror = null; + head.removeChild(script); + } + + function removeGlobals() { + try { + delete window[cbName]; + delete window[cbName + '_loaded']; + } catch (e) { + window[cbName] = window[cbName + '_loaded'] = undefined; + } + } + + function timeout() { + opts.debug('JSONP: Script timeout'); + timedOut = true; + clean(); + cb(new errors.RequestTimeout()); + } + + function error() { + opts.debug('JSONP: Script error'); + + if (done || timedOut) { + return; + } + + clean(); + cb(new errors.JSONPScriptError()); + } +} + +},{"30":30}],25:[function(require,module,exports){ +module.exports = buildSearchMethod; + +var errors = require(30); + +/** + * Creates a search method to be used in clients + * @param {string} queryParam the name of the attribute used for the query + * @param {string} url the url + * @return {function} the search method + */ +function buildSearchMethod(queryParam, url) { + /** + * The search method. Prepares the data and send the query to Algolia. + * @param {string} query the string used for query search + * @param {object} args additional parameters to send with the search + * @param {function} [callback] the callback to be called with the client gets the answer + * @return {undefined|Promise} If the callback is not provided then this methods returns a Promise + */ + return function search(query, args, callback) { + // warn V2 users on how to search + if (typeof query === 'function' && typeof args === 'object' || + typeof callback === 'object') { + // .search(query, params, cb) + // .search(cb, params) + throw new errors.AlgoliaSearchError('index.search usage is index.search(query, params, cb)'); + } + + // Normalizing the function signature + if (arguments.length === 0 || typeof query === 'function') { + // Usage : .search(), .search(cb) + callback = query; + query = ''; + } else if (arguments.length === 1 || typeof args === 'function') { + // Usage : .search(query/args), .search(query, cb) + callback = args; + args = undefined; + } + // At this point we have 3 arguments with values + + // Usage : .search(args) // careful: typeof null === 'object' + if (typeof query === 'object' && query !== null) { + args = query; + query = undefined; + } else if (query === undefined || query === null) { // .search(undefined/null) + query = ''; + } + + var params = ''; + + if (query !== undefined) { + params += queryParam + '=' + encodeURIComponent(query); + } + + var additionalUA; + if (args !== undefined) { + if (args.additionalUA) { + additionalUA = args.additionalUA; + delete args.additionalUA; + } + // `_getSearchParams` will augment params, do not be fooled by the = versus += from previous if + params = this.as._getSearchParams(args, params); + } + + + return this._search(params, url, callback, additionalUA); + }; +} + +},{"30":30}],26:[function(require,module,exports){ +module.exports = function clone(obj) { + return JSON.parse(JSON.stringify(obj)); +}; + +},{}],27:[function(require,module,exports){ +module.exports = createAnalyticsClient; + +var algoliasearch = require(21); + +function createAnalyticsClient(appId, apiKey, opts) { + var analytics = {}; + + opts = opts || {}; + // there need to be 4 hosts, like on the client, since if requests fail, + // the counter goes up by 1, so we need to have the same amount of hosts + // 4 because: -dsn, -1, -2, -3 + // This is done because the APPID used for search will be the same for the analytics client created, + // and since the state of available hosts is shared by APPID globally for the module, we had issues + // where the hostIndex would be 1 while the array was only one entry (you got an empty host) + opts.hosts = opts.hosts || [ + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com' + ]; + opts.protocol = opts.protocol || 'https:'; + + analytics.as = algoliasearch(appId, apiKey, opts); + + analytics.getABTests = function(_params, callback) { + var params = params || {}; + var offset = params.offset || 0; + var limit = params.limit || 10; + + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests?offset=' + encodeURIComponent(offset) + '&limit=' + encodeURIComponent(limit), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.getABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.addABTest = function(abTest, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests', + body: abTest, + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.stopABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests/' + encodeURIComponent(abTestID) + '/stop', + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.deleteABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'DELETE', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'write', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.waitTask = function(indexName, taskID, callback) { + return this.as.initIndex(indexName).waitTask(taskID, callback); + }; + + return analytics; +} + +},{"21":21}],28:[function(require,module,exports){ +module.exports = function deprecate(fn, message) { + var warned = false; + + function deprecated() { + if (!warned) { + /* eslint no-console:0 */ + console.warn(message); + warned = true; + } + + return fn.apply(this, arguments); + } + + return deprecated; +}; + +},{}],29:[function(require,module,exports){ +module.exports = function deprecatedMessage(previousUsage, newUsage) { + var githubAnchorLink = previousUsage.toLowerCase() + .replace(/[\.\(\)]/g, ''); + + return 'algoliasearch: `' + previousUsage + '` was replaced by `' + newUsage + + '`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#' + githubAnchorLink; +}; + +},{}],30:[function(require,module,exports){ +'use strict'; + +// This file hosts our error definitions +// We use custom error "types" so that we can act on them when we need it +// e.g.: if error instanceof errors.UnparsableJSON then.. + +var inherits = require(7); + +function AlgoliaSearchError(message, extraProperties) { + var forEach = require(5); + + var error = this; + + // try to get a stacktrace + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + error.stack = (new Error()).stack || 'Cannot get a stacktrace, browser is too old'; + } + + this.name = 'AlgoliaSearchError'; + this.message = message || 'Unknown error'; + + if (extraProperties) { + forEach(extraProperties, function addToErrorObject(value, key) { + error[key] = value; + }); + } +} + +inherits(AlgoliaSearchError, Error); + +function createCustomError(name, message) { + function AlgoliaSearchCustomError() { + var args = Array.prototype.slice.call(arguments, 0); + + // custom message not set, use default + if (typeof args[0] !== 'string') { + args.unshift(message); + } + + AlgoliaSearchError.apply(this, args); + this.name = 'AlgoliaSearch' + name + 'Error'; + } + + inherits(AlgoliaSearchCustomError, AlgoliaSearchError); + + return AlgoliaSearchCustomError; +} + +// late exports to let various fn defs and inherits take place +module.exports = { + AlgoliaSearchError: AlgoliaSearchError, + UnparsableJSON: createCustomError( + 'UnparsableJSON', + 'Could not parse the incoming response as JSON, see err.more for details' + ), + RequestTimeout: createCustomError( + 'RequestTimeout', + 'Request timed out before getting a response' + ), + Network: createCustomError( + 'Network', + 'Network issue, see err.more for details' + ), + JSONPScriptFail: createCustomError( + 'JSONPScriptFail', + '"),window.ALGOLIA_SUPPORTS_DOCWRITE===!0?(document.write(''),n("document.write")()):r(o,n("DOMElement"))}catch(s){r(o,n("DOMElement"))}}function n(e){return function(){var t="AlgoliaSearch: loaded V2 script using "+e;window.console&&window.console.log&&window.console.log(t)}}t.exports=o},{1:1}],4:[function(e,t,r){"use strict";function o(){var e="-- AlgoliaSearch V2 => V3 error --\nYou are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\nPlease read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n-- /AlgoliaSearch V2 => V3 error --";window.AlgoliaSearch=function(){throw new Error(e)},window.AlgoliaSearchHelper=function(){throw new Error(e)},window.AlgoliaExplainResults=function(){throw new Error(e)}}t.exports=o},{}],5:[function(e,t,r){"use strict";function o(t){var r=e(2),o=e(3),n=e(4);r(t)?o(t):n()}o("algoliasearch")},{2:2,3:3,4:4}]},{},[5])(5)}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.algoliasearch=e()}}(function(){var e;return function t(e,r,o){function n(s,a){if(!r[s]){if(!e[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(i)return i(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};e[s][0].call(l.exports,function(t){var r=e[s][1][t];return n(r?r:t)},l,l.exports,t,e,r,o)}return r[s].exports}for(var i="function"==typeof require&&require,s=0;s=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(i=n))}),e.splice(i,0,o)}}function s(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(t){}}function c(){var e;try{e=r.storage.debug}catch(t){}return!e&&"undefined"!=typeof o&&"env"in o&&(e=o.env.DEBUG),e}function u(){try{return window.localStorage}catch(e){}}r=t.exports=e(2),r.log=s,r.formatArgs=i,r.save=a,r.load=c,r.useColors=n,r.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},r.enable(c())}).call(this,e(12))},{12:12,2:2}],2:[function(e,t,r){function o(e){var t,o=0;for(t in e)o=(o<<5)-o+e.charCodeAt(t),o|=0;return r.colors[Math.abs(o)%r.colors.length]}function n(e){function t(){if(t.enabled){var e=t,o=+new Date,n=o-(u||o);e.diff=n,e.prev=u,e.curr=o,u=o;for(var i=new Array(arguments.length),s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},o.prototype.on=o.prototype.addListener,o.prototype.once=function(e,t){function r(){this.removeListener(e,r),o||(o=!0,t.apply(this,arguments))}if(!n(t))throw TypeError("listener must be a function");var o=!1;return r.listener=t,this.on(e,r),this},o.prototype.removeListener=function(e,t){var r,o,i,a;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],i=r.length,o=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(a=i;a-- >0;)if(r[a]===t||r[a].listener&&r[a].listener===t){o=a;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},o.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],n(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},o.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},o.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},o.listenerCount=function(e,t){return e.listenerCount(t)}},{}],5:[function(e,t,r){var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString;t.exports=function(e,t,r){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var s=0;s100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*l;case"hours":case"hour":case"hrs":case"hr":case"h":return r*u;case"minutes":case"minute":case"mins":case"min":case"m":return r*c;case"seconds":case"second":case"secs":case"sec":case"s":return r*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=l?Math.round(e/l)+"d":e>=u?Math.round(e/u)+"h":e>=c?Math.round(e/c)+"m":e>=a?Math.round(e/a)+"s":e+"ms"}function i(e){return s(e,l,"day")||s(e,u,"hour")||s(e,c,"minute")||s(e,a,"second")||e+" ms"}function s(e,t,r){if(!(e0)return o(e);if("number"===r&&isNaN(e)===!1)return t["long"]?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],10:[function(e,t,r){"use strict";var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Array.prototype.slice,s=e(11),a=Object.prototype.propertyIsEnumerable,c=!a.call({toString:null},"toString"),u=a.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},d={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),f=function(e){if("undefined"==typeof window||!h)return p(e);try{return p(e)}catch(t){return!1}},y=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===n.call(e),i=s(e),a=t&&"[object String]"===n.call(e),p=[];if(!t&&!r&&!i)throw new TypeError("Object.keys called on a non-object");var d=u&&r;if(a&&e.length>0&&!o.call(e,0))for(var h=0;h0)for(var y=0;y=0&&"[object Function]"===o.call(e.callee)),r}},{}],12:[function(e,t,r){function o(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(p===setTimeout)return setTimeout(e,0);if((p===o||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function s(e){if(d===clearTimeout)return clearTimeout(e);if((d===n||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function a(){m&&f&&(m=!1,f.length?y=f.concat(y):v=-1,y.length&&c())}function c(){if(!m){var e=i(a);m=!0;for(var t=y.length;t;){for(f=y,y=[];++v1)for(var r=1;r0&&u>c&&(u=c);for(var l=0;l=0?(p=y.substr(0,m),d=y.substr(m+1)):(p=y,d=""),h=decodeURIComponent(p),f=decodeURIComponent(d),o(s,h)?n(s[h])?s[h].push(f):s[h]=[s[h],f]:s[h]=f}return s};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],14:[function(e,t,r){"use strict";function o(e,t){if(e.map)return e.map(t);for(var r=[],o=0;o0)n.scope=r;else if("undefined"!=typeof r)throw new Error("the scope given to `copyIndex` was not an array with settings, synonyms or rules");return this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(e)+"/operation",body:n,hostType:"write",callback:i})},o.prototype.getLogs=function(t,r,o){var n=e(26),i={};return"object"==typeof t?(i=n(t),o=r):0===arguments.length||"function"==typeof t?o=t:1===arguments.length||"function"==typeof r?(o=r,i.offset=t):(i.offset=t,i.length=r),void 0===i.offset&&(i.offset=0),void 0===i.length&&(i.length=10),this._jsonRequest({method:"GET",url:"/1/logs?"+this._getSearchParams(i,""),hostType:"read",callback:o})},o.prototype.listIndexes=function(e,t){var r="";return void 0===e||"function"==typeof e?t=e:r="?page="+e,this._jsonRequest({method:"GET",url:"/1/indexes"+r,hostType:"read",callback:t})},o.prototype.initIndex=function(e){return new i(this,e)},o.prototype.initAnalytics=function(t){var r=e(27);return r(this.applicationID,this.apiKey,t)},o.prototype.listUserKeys=s(function(e){return this.listApiKeys(e)},a("client.listUserKeys()","client.listApiKeys()")),o.prototype.listApiKeys=function(e){return this._jsonRequest({method:"GET",url:"/1/keys",hostType:"read",callback:e})},o.prototype.getUserKeyACL=s(function(e,t){return this.getApiKey(e,t)},a("client.getUserKeyACL()","client.getApiKey()")),o.prototype.getApiKey=function(e,t){return this._jsonRequest({method:"GET",url:"/1/keys/"+e,hostType:"read",callback:t})},o.prototype.deleteUserKey=s(function(e,t){return this.deleteApiKey(e,t)},a("client.deleteUserKey()","client.deleteApiKey()")),o.prototype.deleteApiKey=function(e,t){return this._jsonRequest({method:"DELETE",url:"/1/keys/"+e,hostType:"write",callback:t})},o.prototype.restoreApiKey=function(e,t){return this._jsonRequest({method:"POST",url:"/1/keys/"+e+"/restore",hostType:"write",callback:t})},o.prototype.addUserKey=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKey()","client.addApiKey()")),o.prototype.addApiKey=function(t,r,o){var n=e(8),i="Usage: client.addApiKey(arrayOfAcls[, params, callback])";if(!n(t))throw new Error(i);1!==arguments.length&&"function"!=typeof r||(o=r,r=null);var s={acl:t};return r&&(s.validity=r.validity,s.maxQueriesPerIPPerHour=r.maxQueriesPerIPPerHour,s.maxHitsPerQuery=r.maxHitsPerQuery,s.indexes=r.indexes,s.description=r.description,r.queryParameters&&(s.queryParameters=this._getSearchParams(r.queryParameters,"")),s.referers=r.referers),this._jsonRequest({method:"POST",url:"/1/keys",body:s,hostType:"write",callback:o})},o.prototype.addUserKeyWithValidity=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKeyWithValidity()","client.addApiKey()")),o.prototype.updateUserKey=s(function(e,t,r,o){return this.updateApiKey(e,t,r,o)},a("client.updateUserKey()","client.updateApiKey()")),o.prototype.updateApiKey=function(t,r,o,n){var i=e(8),s="Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])";if(!i(r))throw new Error(s);2!==arguments.length&&"function"!=typeof o||(n=o,o=null);var a={acl:r};return o&&(a.validity=o.validity,a.maxQueriesPerIPPerHour=o.maxQueriesPerIPPerHour,a.maxHitsPerQuery=o.maxHitsPerQuery,a.indexes=o.indexes,a.description=o.description,o.queryParameters&&(a.queryParameters=this._getSearchParams(o.queryParameters,"")),a.referers=o.referers),this._jsonRequest({method:"PUT",url:"/1/keys/"+t,body:a,hostType:"write",callback:n})},o.prototype.startQueriesBatch=s(function(){this._batch=[]},a("client.startQueriesBatch()","client.search()")),o.prototype.addQueryInBatch=s(function(e,t,r){this._batch.push({indexName:e,query:t,params:r})},a("client.addQueryInBatch()","client.search()")),o.prototype.sendQueriesBatch=s(function(e){return this.search(this._batch,e)},a("client.sendQueriesBatch()","client.search()")),o.prototype.batch=function(t,r){var o=e(8),n="Usage: client.batch(operations[, callback])";if(!o(t))throw new Error(n);return this._jsonRequest({method:"POST",url:"/1/indexes/*/batch",body:{requests:t},hostType:"write",callback:r})},o.prototype.assignUserID=function(e,t){if(!e.userID||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both a userID and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping",hostType:"write",body:{cluster:e.cluster},callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.assignUserIDs=function(e,t){if(!e.userIDs||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both an array of userIDs and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/batch",hostType:"write",body:{cluster:e.cluster,users:e.userIDs},callback:t})},o.prototype.getTopUserID=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/top",hostType:"read",callback:e})},o.prototype.getUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/"+e.userID,hostType:"read",callback:t})},o.prototype.listClusters=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters",hostType:"read",callback:e})},o.prototype.listUserIDs=function(e,t){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping",body:e,hostType:"read",callback:t})},o.prototype.removeUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"DELETE",url:"/1/clusters/mapping",hostType:"write",callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.searchUserIDs=function(e,t){return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/search",body:e,hostType:"read",callback:t})},o.prototype.setPersonalizationStrategy=function(e,t){return this._jsonRequest({method:"POST",url:"/1/recommendation/personalization/strategy",body:e,hostType:"write",callback:t})},o.prototype.getPersonalizationStrategy=function(e){return this._jsonRequest({method:"GET",url:"/1/recommendation/personalization/strategy",hostType:"read",callback:e})},o.prototype.destroy=n,o.prototype.enableRateLimitForward=n,o.prototype.disableRateLimitForward=n,o.prototype.useSecuredAPIKey=n,o.prototype.disableSecuredAPIKey=n,o.prototype.generateSecuredApiKey=n,o.prototype.getSecuredApiKeyRemainingValidity=n},{17:17,18:18,26:26,27:27,28:28,29:29,30:30,7:7,8:8}],17:[function(e,t,r){ +(function(r){function o(t,r,o){var i=e(1)("algoliasearch"),s=e(26),a=e(8),u=e(32),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(o._allowEmptyCredentials!==!0&&!t)throw new c.AlgoliaSearchError("Please provide an application ID. "+l);if(o._allowEmptyCredentials!==!0&&!r)throw new c.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=r,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new c.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)a(o.hosts)?(this.hosts.read=s(o.hosts),this.hosts.write=s(o.hosts)):(this.hosts.read=s(o.hosts.read),this.hosts.write=s(o.hosts.write));else{var d=u(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"}),h=(o.dsn===!1?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+h].concat(d),this.hosts.write=[this.applicationID+".algolia.net"].concat(d)}this.hosts.read=u(this.hosts.read,n(p)),this.hosts.write=u(this.hosts.write,n(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i("init done, %j",this)}function n(e){return function(t){return e+"//"+t.toLowerCase()}}function i(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function s(e){for(var t,r,o=e.length;0!==o;)r=Math.floor(Math.random()*o),o-=1,t=e[o],e[o]=e[r],e[r]=t;return e}function a(e){var t={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var o;o="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=o}return t}t.exports=o;var c=e(30),u=e(31),l=e(20),p=e(36),d=500,h=r.env.RESET_APP_DATA_TIMER&&parseInt(r.env.RESET_APP_DATA_TIMER,10)||12e4;o.prototype.initIndex=function(e){return new l(this,e)},o.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},o.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},o.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},o.prototype.addAlgoliaAgent=function(e){var t="; "+e;this._ua.indexOf(t)===-1&&(this._ua+=t)},o.prototype._jsonRequest=function(t){function r(e,n){function u(e){var t=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;h("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,t,e.headers);var r=2===Math.floor(t/100),o=new Date;if(w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:o,duration:o-x,statusCode:t}),r)return m._useCache&&!m._useRequestCache&&y&&(y[l]=e.responseText),{responseText:e.responseText,body:e.body};var i=4!==Math.floor(t/100);if(i)return v+=1,_();h("unrecoverable error");var u=new c.AlgoliaSearchError(e.body&&e.body.message,{debugData:w,statusCode:t});return m._promise.reject(u)}function d(e){h("error: %s, stack: %s",e.message,e.stack);var r=new Date;return w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:r,duration:r-x}),e instanceof c.AlgoliaSearchError||(e=new c.Unknown(e&&e.message,e)),v+=1,e instanceof c.Unknown||e instanceof c.UnparsableJSON||v>=m.hosts[t.hostType].length&&(g||!b)?(e.debugData=w,m._promise.reject(e)):e instanceof c.RequestTimeout?T():_()}function _(){return h("retrying request"),m._incrementHostIndex(t.hostType),r(e,n)}function T(){return h("retrying request with higher timeout"),m._incrementHostIndex(t.hostType),m._incrementTimeoutMultipler(),n.timeouts=m._getTimeoutsForRequest(t.hostType),r(e,n)}m._checkAppIdData();var x=new Date;if(m._useCache&&!m._useRequestCache&&(l=t.url),m._useCache&&!m._useRequestCache&&s&&(l+="_body_"+n.body),o(!m._useRequestCache,y,l)){h("serving response from cache");var R=y[l];return m._promise.resolve({body:JSON.parse(R),responseText:R})}if(v>=m.hosts[t.hostType].length)return!b||g?(h("could not get any response"),m._promise.reject(new c.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+m.applicationID,{debugData:w}))):(h("switching to fallback"),v=0,n.method=t.fallback.method,n.url=t.fallback.url,n.jsonBody=t.fallback.body,n.jsonBody&&(n.body=i(n.jsonBody)),p=m._computeRequestHeaders({additionalUA:f,headers:t.headers}),n.timeouts=m._getTimeoutsForRequest(t.hostType),m._setHostIndexByType(0,t.hostType),g=!0,r(m._request.fallback,n));var A=m._getHostByType(t.hostType),j=A+n.url,S={body:n.body,jsonBody:n.jsonBody,method:n.method,headers:p,timeouts:n.timeouts,debug:h,forceAuthHeaders:n.forceAuthHeaders};return h("method: %s, url: %s, headers: %j, timeouts: %d",S.method,j,S.headers,S.timeouts),e===m._request.fallback&&h("using fallback"),e.call(m,j,S).then(u,d)}function o(e,t,r){return m._useCache&&e&&t&&void 0!==t[r]}function n(e,r){return o(m._useRequestCache,y,l)&&e["catch"](function(){delete y[l]}),"function"!=typeof t.callback?e.then(r):void e.then(function(e){u(function(){t.callback(null,r(e))},m._setTimeout||setTimeout)},function(e){u(function(){t.callback(e)},m._setTimeout||setTimeout)})}this._checkAppIdData();var s,l,p,h=e(1)("algoliasearch:"+t.url),f=t.additionalUA||"",y=t.cache,m=this,v=0,g=!1,b=m._useFallback&&m._request.fallback&&t.fallback;this.apiKey.length>d&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,p=this._computeRequestHeaders({additionalUA:f,withApiKey:!1,headers:t.headers})):p=this._computeRequestHeaders({additionalUA:f,headers:t.headers}),void 0!==t.body&&(s=i(t.body)),h("request start");var w=[];if(m._useCache&&m._useRequestCache&&(l=t.url),m._useCache&&m._useRequestCache&&s&&(l+="_body_"+s),o(m._useRequestCache,y,l)){h("serving request from cache");var _=y[l],T="function"!=typeof _.then?m._promise.resolve({responseText:_}):_;return n(T,function(e){return JSON.parse(e.responseText)})}var x=r(m._request,{url:t.url,method:t.method,body:s,jsonBody:t.body,timeouts:m._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return m._useCache&&m._useRequestCache&&y&&(y[l]=x),n(x,function(e){return e.body})},o.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?i(e[r]):e[r]));return t},o.prototype._computeRequestHeaders=function(t){var r=e(5),o=t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,n={"x-algolia-agent":o,"x-algolia-application-id":this.applicationID};return t.withApiKey!==!1&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),r(this.extraHeaders,function(e,t){n[t]=e}),t.headers&&r(t.headers,function(e,t){n[t]=e}),n},o.prototype.search=function(t,r,o){var n=e(8),i=e(32),s="Usage: client.search(arrayOfQueries[, callback])";if(!n(t))throw new Error(s);"function"==typeof r?(o=r,r={}):void 0===r&&(r={});var a=this,c={requests:i(t,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:a._getSearchParams(e.params,t)}})},u=i(c.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),l="/1/indexes/*/queries";return void 0!==r.strategy&&(c.strategy=r.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:l,body:c,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:o})},o.prototype.searchForFacetValues=function(t){var r=e(8),o=e(32),n="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!r(t))throw new Error(n);var i=this;return i._promise.all(o(t,function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(n);var r=e(26),o=e(34),s=t.indexName,a=t.params,c=a.facetName,u=o(r(a),function(e){return"facetName"===e}),l=i._getSearchParams(u,"");return i._jsonRequest({cache:i.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(c)+"/query",hostType:"read",body:{params:l}})}))},o.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;rh?this._resetInitialAppIdData(e):e},o.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||s([1,2,3]),this._setAppIdData(t)},o.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},o.prototype._partialAppIdDataUpdate=function(t){var r=e(5),o=this._getAppIdData();return r(t,function(e,t){o[t]=e}),this._setAppIdData(o)},o.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},o.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},o.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},o.prototype._setHostIndexByType=function(t,r){var o=e(26),n=o(this._hostIndexes);return n[r]=t,this._partialAppIdDataUpdate({hostIndexes:n}),t},o.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},o.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},o.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,e(12))},{1:1,12:12,20:20,26:26,30:30,31:31,32:32,34:34,36:36,5:5,8:8}],18:[function(e,t,r){function o(){s.apply(this,arguments)}function n(e,t,r){function o(r,n){var i={page:r||0,hitsPerPage:t||100},s=n||[];return e(i).then(function(e){var t=e.hits,r=e.nbHits,n=t.map(function(e){return delete e._highlightResult,e}),a=s.concat(n);return a.lengths&&(t=s),"published"!==e.status?l._promise.delay(t).then(r):e})}function o(e){u(function(){t(null,e)},l._setTimeout||setTimeout)}function n(e){u(function(){t(e)},l._setTimeout||setTimeout)}var i=100,s=5e3,a=0,c=this,l=c.as,p=r();return t?void p.then(o,n):p},o.prototype.clearIndex=function(e){var t=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/clear",hostType:"write",callback:e})},o.prototype.getSettings=function(e,t){1===arguments.length&&"function"==typeof e&&(t=e,e={}),e=e||{};var r=encodeURIComponent(this.indexName);return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+r+"/settings?getVersion=2"+(e.advanced?"&advanced="+e.advanced:""),hostType:"read",callback:t})},o.prototype.searchSynonyms=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/search",body:e,hostType:"read",callback:t})},o.prototype.exportSynonyms=function(e,t){return n(this.searchSynonyms.bind(this),e,t)},o.prototype.saveSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getSynonym=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearSynonyms=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),void 0!==e.forwardToSlaves&&p();var r=e.forwardToSlaves||e.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchSynonyms=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/batch?forwardToReplicas="+o+"&replaceExistingSynonyms="+(t.replaceExistingSynonyms?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.searchRules=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/search",body:e,hostType:"read",callback:t})},o.prototype.exportRules=function(e,t){return n(this.searchRules.bind(this),e,t)},o.prototype.saveRule=function(e,t,r){if("function"==typeof t?(r=t,t={}):void 0===t&&(t={}),!e.objectID)throw new l.AlgoliaSearchError("Missing or empty objectID field for rule");var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getRule=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteRule=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearRules=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={});var r=e.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchRules=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/batch?forwardToReplicas="+o+"&clearExistingRules="+(t.clearExistingRules===!0?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.exists=function(e){var t=this.getSettings().then(function(){return!0})["catch"](function(e){if(e instanceof l.AlgoliaSearchError&&404===e.statusCode)return!1;throw e});return"function"!=typeof e?t:void t.then(function(t){e(null,t)})["catch"](function(t){e(t)})},o.prototype.findObject=function(e,t,r){t=void 0===t?{}:t;var o=void 0===t.paginate||t.paginate,n=void 0!==t.query?t.query:"",i=this,s=0,a=function(){return t.page=s,i.search(n,t).then(function(t){for(var r=t.hits,n=0;n=t.nbPages)throw new l.ObjectNotFound("Object not found");return a()})},c=a(s);return void 0===r?c:void c.then(function(e){r(null,e)})["catch"](function(e){r(e)})},o.prototype.getObjectPosition=function(e,t){for(var r=e.hits,o=0;o1&&a()}if(!h.cors&&!h.hasXDomainRequest)return void o(new u.Network("CORS not supported"));e=l(e,t.headers);var d,f,y=t.body,m=h.cors?new XMLHttpRequest:new XDomainRequest,v=!1;d=setTimeout(s,t.timeouts.connect),m.onprogress=c,"onreadystatechange"in m&&(m.onreadystatechange=p),m.onload=n,m.onerror=i,m instanceof XMLHttpRequest?(m.open(t.method,e,!0),t.forceAuthHeaders&&(m.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),m.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):m.open(t.method,e),h.cors&&(y&&("POST"===t.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),y?m.send(y):m.send()})},a.prototype._request.fallback=function(e,t){return e=l(e,t.headers),new n(function(r,o){p(e,t,function(e,t){return e?void o(e):void r(t)})})},a.prototype._promise={reject:function(e){return n.reject(e)},resolve:function(e){return n.resolve(e)},delay:function(e){return new n(function(t){setTimeout(t,e)})},all:function(e){return n.all(e)}},s}}).call(this,e(12))},{1:1,12:12,23:23,24:24,26:26,3:3,30:30,35:35,37:37,6:6,7:7}],23:[function(e,t,r){"use strict";function o(e,t){return e+=/\?/.test(e)?"&":"?",e+n(t)}t.exports=o;var n=e(14)},{14:14}],24:[function(e,t,r){"use strict";function o(e,t,r){function o(){t.debug("JSONP: success"),m||d||(m=!0,p||(t.debug("JSONP: Fail. Script loaded but did not call the callback"), +a(),r(new n.JSONPScriptFail)))}function s(){"loaded"!==this.readyState&&"complete"!==this.readyState||o()}function a(){clearTimeout(v),f.onload=null,f.onreadystatechange=null,f.onerror=null,h.removeChild(f)}function c(){try{delete window[y],delete window[y+"_loaded"]}catch(e){window[y]=window[y+"_loaded"]=void 0}}function u(){t.debug("JSONP: Script timeout"),d=!0,a(),r(new n.RequestTimeout)}function l(){t.debug("JSONP: Script error"),m||d||(a(),r(new n.JSONPScriptError))}if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var p=!1,d=!1;i+=1;var h=document.getElementsByTagName("head")[0],f=document.createElement("script"),y="algoliaJSONP_"+i,m=!1;window[y]=function(e){return c(),d?void t.debug("JSONP: Late answer, ignoring"):(p=!0,a(),void r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+y,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var v=setTimeout(u,t.timeouts.complete);f.onreadystatechange=s,f.onload=o,f.onerror=l,f.async=!0,f.defer=!0,f.src=e,h.appendChild(f)}t.exports=o;var n=e(30),i=0},{30:30}],25:[function(e,t,r){function o(e,t){return function(r,o,i){if("function"==typeof r&&"object"==typeof o||"object"==typeof i)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(i=r,r=""):1!==arguments.length&&"function"!=typeof o||(i=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):void 0!==r&&null!==r||(r="");var s="";void 0!==r&&(s+=e+"="+encodeURIComponent(r));var a;return void 0!==o&&(o.additionalUA&&(a=o.additionalUA,delete o.additionalUA),s=this.as._getSearchParams(o,s)),this._search(s,t,i,a)}}t.exports=o;var n=e(30)},{30:30}],26:[function(e,t,r){t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],27:[function(e,t,r){function o(e,t,r){var o={};return r=r||{},r.hosts=r.hosts||["analytics.algolia.com","analytics.algolia.com","analytics.algolia.com","analytics.algolia.com"],r.protocol=r.protocol||"https:",o.as=n(e,t,r),o.getABTests=function(e,t){var r=r||{},o=r.offset||0,n=r.limit||10;return this.as._jsonRequest({method:"GET",url:"/2/abtests?offset="+encodeURIComponent(o)+"&limit="+encodeURIComponent(n),hostType:"read",forceAuthHeaders:!0,callback:t})},o.getABTest=function(e,t){return this.as._jsonRequest({method:"GET",url:"/2/abtests/"+encodeURIComponent(e),hostType:"read",forceAuthHeaders:!0,callback:t})},o.addABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests",body:e,hostType:"read",forceAuthHeaders:!0,callback:t})},o.stopABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests/"+encodeURIComponent(e)+"/stop",hostType:"read",forceAuthHeaders:!0,callback:t})},o.deleteABTest=function(e,t){return this.as._jsonRequest({method:"DELETE",url:"/2/abtests/"+encodeURIComponent(e),hostType:"write",forceAuthHeaders:!0,callback:t})},o.waitTask=function(e,t,r){return this.as.initIndex(e).waitTask(t,r)},o}t.exports=o;var n=e(21)},{21:21}],28:[function(e,t,r){t.exports=function(e,t){function r(){return o||(console.warn(t),o=!0),e.apply(this,arguments)}var o=!1;return r}},{}],29:[function(e,t,r){t.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},{}],30:[function(e,t,r){"use strict";function o(t,r){var o=e(5),n=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):n.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",r&&o(r,function(e,t){n[t]=e})}function n(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return i(r,o),r}var i=e(7);i(o,Error),t.exports={AlgoliaSearchError:o,UnparsableJSON:n("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:n("RequestTimeout","Request timed out before getting a response"),Network:n("Network","Network issue, see err.more for details"),JSONPScriptFail:n("JSONPScriptFail","
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/categories/Solidity/index.html b/categories/Solidity/index.html new file mode 100644 index 0000000000..bc2da08672 --- /dev/null +++ b/categories/Solidity/index.html @@ -0,0 +1,384 @@ +分类: Solidity | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000000..b8eea506ec --- /dev/null +++ b/categories/index.html @@ -0,0 +1,376 @@ +分类 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/categories/npm/index.html b/categories/npm/index.html new file mode 100644 index 0000000000..881a0af0bf --- /dev/null +++ b/categories/npm/index.html @@ -0,0 +1,384 @@ +分类: npm | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/categories/\345\211\215\347\253\257/index.html" "b/categories/\345\211\215\347\253\257/index.html" new file mode 100644 index 0000000000..61a777068d --- /dev/null +++ "b/categories/\345\211\215\347\253\257/index.html" @@ -0,0 +1,384 @@ +分类: 前端 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/JavaScript/index.html" "b/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/JavaScript/index.html" new file mode 100644 index 0000000000..f3d8b98d2e --- /dev/null +++ "b/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/JavaScript/index.html" @@ -0,0 +1,384 @@ +分类: JavaScript | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/index.html" "b/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/index.html" new file mode 100644 index 0000000000..c54746b6a6 --- /dev/null +++ "b/categories/\345\211\215\347\253\257/\350\256\276\350\256\241\346\250\241\345\274\217/index.html" @@ -0,0 +1,384 @@ +分类: 设计模式 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/categories/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" "b/categories/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" new file mode 100644 index 0000000000..555f50c1eb --- /dev/null +++ "b/categories/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" @@ -0,0 +1,384 @@ +分类: 开发工具 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000000..4d09f9c8a7 --- /dev/null +++ b/css/index.css @@ -0,0 +1,27345 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} + +/* 滚动条轨道样式 */ +::-webkit-scrollbar-track { + background-color: transparent; +} + +/* 滚动条滑块样式 */ +::-webkit-scrollbar-thumb { + background-color: #888; + opacity: 1; + transition: opacity 0.5s; +} + +/* 滚动条消失动画 */ +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +/* 在滚动容器上应用动画 */ +html:hover::-webkit-scrollbar-thumb { + animation: fadeOut 1s 1s forwards; +} + +body { + margin: 0; + padding: 0; + overflow-x: clip; + overscroll-behavior: none; +} + +main { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: bolder; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; + border-radius: 8px; + max-width: 100%; + transition: all 0.2s ease 0s; + -webkit-user-drag: none; /* WebKit */ + -khtml-user-drag: none; /* KHTML */ + -moz-user-drag: none; /* Gecko */ + -ms-user-drag: none; /* Trident/Edge */ + user-drag: none; +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="button"], +[type="reset"], +[type="submit"], +button { + -webkit-appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0; +} + +img.fancybox__image { + border-radius: 0; +} +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details { + display: block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +.limit-one-line, +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-name, +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-desc, +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span, +.site-data > a .headline, +#pagination .prev_info, +#pagination .next_info, +#sidebar #sidebar-menus .menus_items .site-page { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +.limit-more-line, +.error404 #error-wrap .error-content .error-info .error_subtitle, +.article-sort-item-title, +#recent-posts > .recent-post-item >.recent-post-info > .content, +#aside-content .aside-list > .aside-list-item .content > .name, +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment, +#post-info .post-title, +.relatedPosts > .relatedPosts-list .content .title, +#content-inner figure.gallery-group p, +#content-inner figure.gallery-group .gallery-group-name { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.fontbold { + font-weight: bold; +} +.anzhiyu-icon-spinner { + margin: 0; + width: 16px; + line-height: 16px; + height: 16px; +} +.anzhiyufont, +hr:before, +#article-container a.headerlink::before, +#post .post-outdate-notice:before, +.note:not(.no-icon)::before { + font-family: "anzhiyufont"; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.anzhiyufont::before { + font-family: "anzhiyufont" !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.cardHover, +.error404 #error-wrap .error-content, +#recent-posts > .recent-post-item, +#aside-content .card-widget, +.layout > .recent-posts .pagination > *:not(.space):not(pangu) { + border-radius: 8px; + background: var(--card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.imgHover, +.error404 #error-wrap .error-content .error-img img, +.article-sort-item-img img, +#aside-content .aside-list > .aside-list-item .thumbnail > img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 375ms ease-in 0.2s, transform 0.6s; + object-fit: cover; +} +.imgHover:hover, +.error404 #error-wrap .error-content .error-img img:hover, +.article-sort-item-img img:hover, +#aside-content .aside-list > .aside-list-item .thumbnail > img:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover:hover img, +#pagination .prev-post:hover img, +#pagination .next-post:hover img, +.relatedPosts > .relatedPosts-list > div:hover img { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover img, +#pagination .prev-post img, +#pagination .next-post img, +.relatedPosts > .relatedPosts-list > div img { + position: absolute; + width: 100%; + height: 100%; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transition: all 0.6s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.6s, filter 375ms ease-in 0.2s; + -o-transition: all 0.6s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.6s, filter 375ms ease-in 0.2s; + transition: all 0.6s, filter 375ms ease-in 0.2s; + object-fit: cover; + border-radius: 0; +} +.list-beauty, +.category-lists ul { + list-style: none; +} +.list-beauty li, +.category-lists ul li { + position: relative; + padding: 0.12em 0.4em 0.12em 1.4em; +} +.list-beauty li:hover:before, +.category-lists ul li:hover:before { + border-color: var(--pseudo-hover); +} +.list-beauty li:before, +.category-lists ul li:before { + position: absolute; + top: 0.67em; + left: 0; + width: 0.43em; + height: 0.43em; + border: 0.215em solid #425aef; + border-radius: 0.43em; + background: transparent; + content: ''; + cursor: pointer; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.scroll-down-effects { + -webkit-animation: scroll-down-effect 1.5s infinite; + -moz-animation: scroll-down-effect 1.5s infinite; + -o-animation: scroll-down-effect 1.5s infinite; + -ms-animation: scroll-down-effect 1.5s infinite; + animation: scroll-down-effect 1.5s infinite; +} +.anzhiyu-spin { + display: inline-block; + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-animation-name: anzhiyu-spin; + -moz-animation-name: anzhiyu-spin; + -o-animation-name: anzhiyu-spin; + -ms-animation-name: anzhiyu-spin; + animation-name: anzhiyu-spin; + -webkit-animation-duration: var(--anzhiyu-animation-duration, 2s); + -moz-animation-duration: var(--anzhiyu-animation-duration, 2s); + -o-animation-duration: var(--anzhiyu-animation-duration, 2s); + -ms-animation-duration: var(--anzhiyu-animation-duration, 2s); + animation-duration: var(--anzhiyu-animation-duration, 2s); + -webkit-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -moz-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -o-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -ms-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -moz-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -o-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -ms-animation-timing-function: var(--anzhiyu-animation-timing, linear); + animation-timing-function: var(--anzhiyu-animation-timing, linear); +} +.anzhiyu-pulse-icon { + -webkit-animation: anzhiyu-pulse-animation 1s infinite linear; + -moz-animation: anzhiyu-pulse-animation 1s infinite linear; + -o-animation: anzhiyu-pulse-animation 1s infinite linear; + -ms-animation: anzhiyu-pulse-animation 1s infinite linear; + animation: anzhiyu-pulse-animation 1s infinite linear; +} +.anzhiyu-shake:hover { + -webkit-animation: shake 0.8s; + -moz-animation: shake 0.8s; + -o-animation: shake 0.8s; + -ms-animation: shake 0.8s; + animation: shake 0.8s; +} +.reward-main { + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; +} +@property --anzhiyu-header-translateY { + syntax: ""; + inherits: true; + initial-value: 0px; +} +@property --anzhiyu-header-info-scale { + syntax: ""; + inherits: true; + initial-value: 1; +} +@property --anzhiyu-header-cover-scale { + syntax: ""; + inherits: true; + initial-value: 2; +} +@-moz-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-webkit-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-o-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-moz-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-webkit-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-o-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-moz-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-webkit-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-o-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-moz-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-webkit-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-o-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-moz-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-moz-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-webkit-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-o-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-moz-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-webkit-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-o-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-moz-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-webkit-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-o-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-moz-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-webkit-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-o-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-moz-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@-webkit-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@-o-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +i.anzhiyu-icon-hashtag { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + font-size: 13px; +} +:root { + --animation-on: cubic-bezier(0.6, 0.1, 0, 1); + --animation-in: cubic-bezier(0.6, 0.2, 0.25, 1); + --animation-ot: opacity 0.5s var(--animation-in) backwards, transform 1s var(--animation-in) backwards; + --animation-otf: opacity 0.5s var(--animation-in) backwards, transform 1s var(--animation-in) backwards, filter 0.7s var(--animation-in) backwards; + --global-font-size: 16px; + --global-bg: #fff; + --font-color: #4c4948; + --hr-border: rgba(161,172,247,0.137); + --hr-before-color: rgba(123,139,244,0.137); + --search-bg: #f6f8fa; + --search-input-color: #4c4948; + --search-result-title: #4c4948; + --preloader-bg: #37474f; + --preloader-color: #fff; + --tab-border-color: #f0f0f0; + --tab-botton-bg: #f0f0f0; + --tab-botton-color: #1f2d3d; + --tab-button-hover-bg: #dcdcdc; + --tab-button-active-bg: #fff; + --card-bg: #fff; + --sidebar-bg: #f6f8fa; + --btn-hover-color: #ff7242; + --btn-color: #fff; + --btn-bg: var(--anzhiyu-main); + --text-bg-hover: rgba(66,90,239,0.7); + --light-grey: #eee; + --dark-grey: #cacaca; + --white: #fff; + --text-highlight-color: #1f2d3d; + --blockquote-color: #6a737d; + --blockquote-bg: rgba(66,90,239,0.1); + --reward-pop: #f5f5f5; + --toc-link-color: #666261; + --card-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.05); + --card-hover-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.09); + --pseudo-hover: #ff7242; + --headline-presudo: var(--anzhiyu-fontcolor); + --scrollbar-color: var(--anzhiyu-scrollbar); + --anzhiyu-snackbar-time: 2000ms; + --anzhiyu-deep-purple: #405589; + --anzhiyu-meta-theme-color: #f7f9fe; + --anzhiyu-bar-background: var(--anzhiyu-main); + --anzhiyu-theme-op: rgba(66,89,239,0.137); + --anzhiyu-card-bg-none: rgba(255,255,255,0); + --anzhiyu-main-op-deep: var(--anzhiyu-theme-op-deep) !important; + --anzhiyu-gray-op: rgba(153,153,153,0.169); + --anzhiyu-theme-top: var(--anzhiyu-theme); + --anzhiyu-white: #fff; + --anzhiyu-white-op: rgba(255,255,255,0.2); + --anzhiyu-black: #000; + --anzhiyu-black-op: rgba(0,0,0,0.2); + --anzhiyu-none: rgba(0,0,0,0); + --anzhiyu-gray: #999; + --anzhiyu-yellow: #ffc93e; + --anzhiyu-orange: #e38100; + --anzhiyu-blue-hover: #5390e6; + --anzhiyu-radius-full: 50px; + --anzhiyu-radius: 8px; + --anzhiyu-border-radius: 8px; + --anzhiyu-main: var(--anzhiyu-theme); + --anzhiyu-main-op: var(--anzhiyu-theme-op); + --anzhiyu-shadow-theme: 0 8px 12px -3px var(--anzhiyu-theme-op); + --anzhiyu-shadow-main: 0 8px 12px -3px var(--anzhiyu-main-op); + --anzhiyu-shadow-blue: 0 8px 12px -3px rgba(40,109,234,0.2); + --anzhiyu-shadow-white: 0 8px 12px -3px rgba(255,255,255,0.2); + --anzhiyu-shadow-black: 0 0 12px 4px rgba(0,0,0,0.05); + --anzhiyu-shadow-yellow: 0px 38px 77px -26px rgba(255,201,62,0.12); + --anzhiyu-shadow-red: 0 8px 12px -3px rgba(238,125,121,0.212); + --anzhiyu-shadow-green: 0 8px 12px -3px rgba(135,238,121,0.212); + --anzhiyu-shadow-border: 0 8px 16px -4px rgba(44,45,48,0.047); + --anzhiyu-shadow-blackdeep: 0 2px 16px -3px rgba(0,0,0,0.15); + --anzhiyu-logo-color: linear-gradient(215deg, #4584ff 0%, #cf0db9 100%); + --anzhiyu-code-stress: var(--anzhiyu-main); + --style-border: 1px solid var(--anzhiyu-card-border); + --anzhiyu-blue-main: #425aef; + --style-border-hover: 1px solid var(--anzhiyu-main); + --style-border-dashed: 1px dashed var(--anzhiyu-theme-op); + --style-border-avatar: 5px solid var(--anzhiyu-white); + --style-border-always: 1px solid var(--anzhiyu-card-border); + --style-border-none: 1px solid transparent; + --style-border-deep-ash: 1px solid #d0d7de; + --style-border-hover-always: 1px solid var(--anzhiyu-main); + --anzhiyu-main-none: rgba(184,184,184,0) !important; + --anzhiyu-wihite-font: #fff; +} +@media (prefers-color-scheme: light) { +} +[data-theme="light"] { + --anzhiyu-meta-theme-post-color: #fff; + --anzhiyu-meta-theme-color: #f7f9fe; + --anzhiyu-theme-op-deep: rgba(66,89,239,0.867); + --global-bg: #f7f9fe; + --anzhiyu-theme: #425aef; + --anzhiyu-theme-deep: #1856fb; + --anzhiyu-theme-op: rgba(66,89,239,0.137); + --anzhiyu-blue: #5ca1ff; + --anzhiyu-blue-tint: rgba(92,161,255,0.1); + --anzhiyu-red: #d8213c; + --anzhiyu-pink: #ff7c7c; + --anzhiyu-green: #57bd6a; + --anzhiyu-fontcolor: #363636; + --anzhiyu-background: #f7f9fe; + --anzhiyu-reverse: #000; + --anzhiyu-maskbg: rgba(255,255,255,0.6); + --anzhiyu-maskbgdeep: rgba(255,255,255,0.85); + --anzhiyu-scrollbar: rgba(60,60,67,0.4); + --anzhiyu-hovertext: var(--anzhiyu-theme); + --anzhiyu-ahoverbg: #f7f7fa; + --anzhiyu-lighttext: var(--anzhiyu-main); + --anzhiyu-secondtext: rgba(60,60,67,0.8); + --anzhiyu-scrollbar: rgba(60,60,67,0.4); + --anzhiyu-card-btn-bg: #edf0f7; + --anzhiyu-post-blockquote-bg: #fafcff; + --anzhiyu-post-tabs-bg: #f2f5f8; + --anzhiyu-secondbg: #f7f7f9; + --anzhiyu-shadow-nav: 0 5px 12px -5px rgba(102,68,68,0.05); + --anzhiyu-card-bg: #fff; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-card-border: #e3e8f7; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-wihite-font: #fff; +} +@media (prefers-color-scheme: dark) { +} +[data-theme="dark"] { + --anzhiyu-meta-theme-post-color: #1d1e22; + --anzhiyu-meta-theme-color: #000; + --anzhiyu-blue: #5ca1ff; + --anzhiyu-blue-tint: rgba(92,161,255,0.1); + --anzhiyu-theme-op-deep: rgba(0,132,255,0.867); + --global-bg: #18171d; + --anzhiyu-theme: #f2b94b; + --anzhiyu-theme-deep: #0076e5; + --anzhiyu-theme-op: rgba(242,185,75,0.137); + --anzhiyu-blue: #0084ff; + --anzhiyu-red: #ff3842; + --anzhiyu-pink: #ff7c7c; + --anzhiyu-green: #57bd6a; + --anzhiyu-fontcolor: #f7f7fa; + --anzhiyu-background: #18171d; + --anzhiyu-reverse: #fff; + --anzhiyu-maskbg: rgba(0,0,0,0.6); + --anzhiyu-maskbgdeep: rgba(0,0,0,0.85); + --anzhiyu-hovertext: #0a84ff; + --anzhiyu-ahoverbg: #fff; + --anzhiyu-scrollbar: rgba(200,200,223,0.4); + --anzhiyu-lighttext: #f2b94b; + --anzhiyu-secondtext: #a1a2b8; + --anzhiyu-scrollbar: rgba(200,200,223,0.4); + --anzhiyu-card-btn-bg: #30343f; + --anzhiyu-post-blockquote-bg: #000; + --anzhiyu-post-tabs-bg: #121212; + --anzhiyu-secondbg: #21232a; + --anzhiyu-shadow-nav: 0 5px 20px 0px rgba(28,28,28,0.4); + --anzhiyu-card-bg: #1d1e22; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-card-border: #42444a; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-wihite-font: #f6f6f6; +} +body { + position: relative; + min-height: 100%; + background: var(--global-bg); + color: var(--font-color); + font-size: var(--global-font-size); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + line-height: 2; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +*::-webkit-scrollbar { + width: 6px; + height: 6px; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 8px; + cursor: pointer; +} +*::-webkit-scrollbar-track { + background-color: transparent; +} +::-webkit-scrollbar-corner { + background-color: transparent; +} +* { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-color) transparent; +} +input::placeholder { + color: var(--font-color); +} +#web_bg { + position: fixed; + z-index: -999; + width: 200%; + height: 200%; + top: -50%; + left: -50%; + -webkit-transform: rotate(-1deg); + -moz-transform: rotate(-1deg); + -o-transform: rotate(-1deg); + -ms-transform: rotate(-1deg); + transform: rotate(-1deg); + -webkit-overflow-scrolling: touch; + background: var(--anzhiyu-background); + background-attachment: local; + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin: 20px 0 14px; + color: var(--text-highlight-color); + font-weight: bold; +} +h1 code, +h2 code, +h3 code, +h4 code, +h5 code, +h6 code { + font-size: inherit !important; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +hr { + position: relative; + margin: 40px auto; + border: 2px dashed var(--hr-border); + width: calc(100% - 4px); +} +hr:hover:before { + left: calc(95% - 20px); +} +hr:before { + position: absolute; + top: -10px; + left: 5%; + z-index: 1; + color: var(--hr-before-color); + content: '\f0c4'; + font-size: 16px; + line-height: 1; + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; +} +html { + overflow-y: overlay; +} +.table-wrap { + overflow-x: scroll; + margin: 1rem 0; + border-radius: 8px; +} +table { + display: table; + width: 100%; + border-spacing: 0; + border-collapse: collapse; + empty-cells: show; +} +table thead { + background: var(--anzhiyu-secondbg); +} +table th, +table td { + padding: 0.3rem 0.6rem; + vertical-align: middle; + border: var(--style-border-always); +} +*::selection { + background: #2128bd; + color: #f7f7f7; +} +button { + padding: 0; + outline: 0; + border: none; + background: none; + cursor: pointer; + touch-action: manipulation; +} +a { + color: var(--anzhiyu-fontcolor); + text-decoration: none; + word-wrap: break-word; + -webkit-transition: all 0.2s ease 0s; + -moz-transition: all 0.2s ease 0s; + -o-transition: all 0.2s ease 0s; + -ms-transition: all 0.2s ease 0s; + transition: all 0.2s ease 0s; + overflow-wrap: break-word; +} +a:hover { + color: #425aef; +} +#site-title, +#site-subtitle, +#site-name, +#aside-content .author-info__name, +#aside-content .author-info__description { + font-family: PingFang SC, 'Hiragino Sans GB', 'Microsoft JhengHei', 'Microsoft YaHei', sans-serif; +} +.is-center { + text-align: center; +} +.copy-true { + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; +} +.pull-left { + float: left; +} +.pull-right { + float: right; +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +img[data-lazy-src]:not(.loaded) { + filter: blur(8px) brightness(1); +} +img[data-lazy-src].error { + filter: none; + opacity: 1 !important; + -ms-filter: none !important; + filter: none !important; +} +img[data-lazy-src]:not(.loaded) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.img-alt { + font-size: 12px; + margin: 0; + margin-top: 8px; + color: var(--anzhiyu-secondtext); +} +.img-alt:hover { + text-decoration: none !important; +} +blockquote { + margin: 0 0 20px; + padding: 12px 15px; + border-left: 3px solid #425aef; + background-color: var(--blockquote-bg); + color: var(--blockquote-color); +} +blockquote footer cite:before { + padding: 0 5px; + content: '—'; +} +blockquote > :last-child { + margin-bottom: 0 !important; +} +.time_hidden { + display: none !important; +} +#single_top { + padding: 1.875rem 1.5rem 0; + max-width: 1400px; + width: 100%; + margin: 0 auto; +} +@media screen and (max-width: 768px) { + #single_top + #content-inner { + padding: 1.875rem 0rem 0; + } +} +.loading-bg { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 100%; + position: fixed; + background: var(--anzhiyu-card-bg); + z-index: 1001; + opacity: 1; + -ms-filter: none; + filter: none; + overflow: hidden; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + -webkit-animation: showLoading 0.3s 0s backwards; + -moz-animation: showLoading 0.3s 0s backwards; + -o-animation: showLoading 0.3s 0s backwards; + -ms-animation: showLoading 0.3s 0s backwards; + animation: showLoading 0.3s 0s backwards; +} +.loading-bg::-webkit-scrollbar { + display: none; +} +#loading-box { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#loading-box .loading-img { + width: 100px; + height: 100px; + border-radius: 50%; + margin: auto; + border: 4px solid #f0f0f2; + -webkit-animation-duration: 0.2s; + -moz-animation-duration: 0.2s; + -o-animation-duration: 0.2s; + -ms-animation-duration: 0.2s; + animation-duration: 0.2s; + -webkit-animation-name: loadingAction; + -moz-animation-name: loadingAction; + -o-animation-name: loadingAction; + -ms-animation-name: loadingAction; + animation-name: loadingAction; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + -o-animation-iteration-count: infinite; + -ms-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-direction: alternate; + -moz-animation-direction: alternate; + -o-animation-direction: alternate; + -ms-animation-direction: alternate; + animation-direction: alternate; +} +#loading-box .loading-image-dot { + width: 30px; + height: 30px; + background: #6bdf8f; + position: absolute; + border-radius: 50%; + border: 6px solid #fff; + top: 50%; + left: 50%; + -webkit-transform: translate(18px, 24px); + -moz-transform: translate(18px, 24px); + -o-transform: translate(18px, 24px); + -ms-transform: translate(18px, 24px); + transform: translate(18px, 24px); +} +#loading-box.loaded .loading-bg { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + z-index: -1000; +} +@-moz-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-webkit-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-o-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +:root { + --hl-color: #90a4ae; + --hl-bg: #f6f8fa; + --hltools-bg: var(--anzhiyu-secondbg); + --hltools-color: var(--anzhiyu-fontcolor); + --hlnumber-bg: #f6f8fa; + --hlnumber-color: rgba(144,164,174,0.5); + --hlscrollbar-bg: #dce4eb; + --hlexpand-bg: linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9)); +} +[data-theme='dark'] { + --hl-color: rgba(255,255,255,0.7); + --hl-bg: #171717; + --hltools-bg: #1a1a1a; + --hltools-color: #90a4ae; + --hlnumber-bg: #171717; + --hlnumber-color: rgba(255,255,255,0.4); + --hlscrollbar-bg: #1f1f1f; + --hlexpand-bg: linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9)); +} +figure.highlight table { + scrollbar-color: var(--hlscrollbar-bg) transparent; +} +figure.highlight table::-webkit-scrollbar-thumb { + background: var(--hlscrollbar-bg); +} +figure.highlight pre .deletion { + color: #bf42bf; +} +figure.highlight pre .addition { + color: #105ede; +} +figure.highlight pre .meta { + color: #7c4dff; +} +figure.highlight pre .comment { + color: #969896; +} +figure.highlight pre .variable, +figure.highlight pre .attribute, +figure.highlight pre .regexp, +figure.highlight pre .ruby .constant, +figure.highlight pre .xml .tag .title, +figure.highlight pre .xml .pi, +figure.highlight pre .xml .doctype, +figure.highlight pre .html .doctype, +figure.highlight pre .css .id, +figure.highlight pre .tag .name, +figure.highlight pre .css .class, +figure.highlight pre .css .pseudo { + color: #e53935; +} +figure.highlight pre .tag { + color: #39adb5; +} +figure.highlight pre .number, +figure.highlight pre .preprocessor, +figure.highlight pre .literal, +figure.highlight pre .params, +figure.highlight pre .constant, +figure.highlight pre .command { + color: #f76d47; +} +figure.highlight pre .built_in { + color: #ffb62c; +} +figure.highlight pre .ruby .class .title, +figure.highlight pre .css .rules .attribute, +figure.highlight pre .string, +figure.highlight pre .value, +figure.highlight pre .inheritance, +figure.highlight pre .header, +figure.highlight pre .ruby .symbol, +figure.highlight pre .xml .cdata, +figure.highlight pre .special, +figure.highlight pre .number, +figure.highlight pre .formula { + color: #91b859; +} +figure.highlight pre .keyword, +figure.highlight pre .title, +figure.highlight pre .css .hexcolor { + color: #39adb5; +} +figure.highlight pre .function, +figure.highlight pre .python .decorator, +figure.highlight pre .python .title, +figure.highlight pre .ruby .function .title, +figure.highlight pre .ruby .title .keyword, +figure.highlight pre .perl .sub, +figure.highlight pre .javascript .title, +figure.highlight pre .coffeescript .title { + color: #6182b8; +} +figure.highlight pre .tag .attr, +figure.highlight pre .javascript .function { + color: #7c4dff; +} +#article-container figure.highlight .line.marked { + background-color: rgba(128,203,196,0.251); +} +#article-container figure.highlight table { + display: block; + overflow: auto; + border: none; +} +#article-container figure.highlight table td { + padding: 0; + border: none; +} +#article-container figure.highlight .gutter pre { + padding-right: 0.625rem; + padding-left: 1.25rem; + background: var(--anzhiyu-secondbg); + background-color: var(--anzhiyu-secondbg); + border-right: var(--style-border-always); + padding-right: 0.5rem; + padding-left: 0.5rem; + color: var(--hlnumber-color); + text-align: right; +} +#article-container figure.highlight .code pre { + padding-right: 10px; + padding-left: 10px; + width: 100%; +} +#article-container pre, +#article-container figure.highlight { + overflow: auto; + margin: 0 0 20px; + padding: 0; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + color: var(--hl-color); + line-height: 1.6; +} +#article-container pre, +#article-container code { + font-size: var(--global-font-size); + font-family: consolas, Menlo, "PingFang SC", "Microsoft JhengHei", "Microsoft YaHei", sans-serif !important; +} +#article-container code { + padding: 2px 4px; + background: var(--anzhiyu-code-stress); + color: #fff; +} +#article-container pre { + padding: 10px 20px; +} +#article-container pre code { + padding: 0; + background: none; + color: var(--hl-color); + text-shadow: none; +} +#article-container figure.highlight { + position: relative; +} +#article-container figure.highlight pre { + margin: 0; + padding: 8px 0; + border: none; +} +#article-container figure.highlight figcaption, +#article-container figure.highlight .caption { + padding: 6px 0 2px 14px; + font-size: var(--global-font-size); + line-height: 1em; +} +#article-container figure.highlight figcaption a, +#article-container figure.highlight .caption a { + float: right; + padding-right: 10px; + color: var(--hl-color); +} +#article-container figure.highlight figcaption a:hover, +#article-container figure.highlight .caption a:hover { + border-bottom-color: var(--hl-color); +} +#article-container .highlight-tools { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + min-height: 24px; + height: 2.15em; + background: var(--hltools-bg); + color: var(--hltools-color); + font-size: var(--global-font-size); + border-bottom: var(--style-border-always); +} +#article-container .highlight-tools.closed { + border-bottom: 1px solid transparent; + height: calc(2.15em - 1px); +} +#article-container .highlight-tools.closed ~ * { + display: none; +} +#article-container .highlight-tools.closed .expand { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: rotate(-90deg) !important; + -moz-transform: rotate(-90deg) !important; + -o-transform: rotate(-90deg) !important; + -ms-transform: rotate(-90deg) !important; + transform: rotate(-90deg) !important; +} +#article-container .highlight-tools .expand { + position: absolute; + padding: 0.57em 0.7em; + cursor: pointer; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#article-container .highlight-tools .expand + .code-lang { + left: 1.7em; +} +#article-container .highlight-tools .code-lang { + position: absolute; + left: 14px; + text-transform: uppercase; + font-weight: bold; + font-size: 1.15em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#article-container .highlight-tools .copy-notice { + position: absolute; + right: 2.4em; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.4s; + -moz-transition: opacity 0.4s; + -o-transition: opacity 0.4s; + -ms-transition: opacity 0.4s; + transition: opacity 0.4s; +} +#article-container .highlight-tools .copy-button { + position: absolute; + right: 14px; + cursor: pointer; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; +} +#article-container .highlight-tools .copy-button:hover { + color: var(--anzhiyu-main); +} +#article-container .gutter { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#article-container .gist table { + width: auto; +} +#article-container .gist table td { + border: none; +} +#article-container .code-expand-btn { + position: absolute; + bottom: 0px; + z-index: 10; + width: 100%; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + font-size: 20px; + background: var(--anzhiyu-secondbg); + text-align: center; + font-size: var(--global-font-size); + cursor: pointer; + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + height: 32px; + font-size: 16px; +} +#article-container .code-expand-btn:hover { + background: var(--anzhiyu-main); +} +#article-container .code-expand-btn:hover i { + color: var(--anzhiyu-white); +} +#article-container .code-expand-btn i { + color: var(--anzhiyu-fontcolor); + -webkit-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -moz-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -o-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -ms-animation: 1.2s ease 0s infinite normal none running code-expand-key; + animation: 1.2s ease 0s infinite normal none running code-expand-key; +} +#article-container .code-expand-btn.expand-done { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: all 0s, background 0.3s; + -moz-transition: all 0s, background 0.3s; + -o-transition: all 0s, background 0.3s; + -ms-transition: all 0s, background 0.3s; + transition: all 0s, background 0.3s; +} +#article-container .code-expand-btn.expand-done + table, +#article-container .code-expand-btn.expand-done + pre { + margin-bottom: 1.8em; +} +#article-container .code-expand-btn:not(.expand-done) ~ table, +#article-container .code-expand-btn:not(.expand-done) ~ pre { + overflow: hidden; + height: 330px; +} +@-moz-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +.error404 #error-wrap { + position: absolute; + top: 50%; + right: 0; + left: 0; + margin: 0 auto; + padding: 60px 20px 0; + max-width: 1000px; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.error404 #error-wrap .error-content { + overflow: hidden; + margin: 0 20px; + height: 360px; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content { + margin: 0; + height: 500px; + } +} +.error404 #error-wrap .error-content .error-img { + display: inline-block; + overflow: hidden; + width: 50%; + height: 100%; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-img { + width: 100%; + height: 45%; + } +} +.error404 #error-wrap .error-content .error-img img { + background-color: #425aef; +} +.error404 #error-wrap .error-content .error-info { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + width: 50%; + height: 100%; + vertical-align: top; + text-align: center; + font-family: PingFang SC, 'Hiragino Sans GB', 'Microsoft JhengHei', 'Microsoft YaHei', sans-serif; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-info { + width: 100%; + height: 55%; + } +} +.error404 #error-wrap .error-content .error-info .error_title { + margin-top: -0.6em; + font-size: 9em; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-info .error_title { + font-size: 8em; + } +} +.error404 #error-wrap .error-content .error-info .error_subtitle { + margin-top: -3em; + word-break: break-word; + font-size: 1.6em; + -webkit-line-clamp: 2; +} +.error404 + #rightside { + display: none; +} +body[data-type='about'] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type='about'] #page .page-title { + display: none; +} +body[data-type='about'] .page #footer-wrap { + opacity: 1; + -ms-filter: none; + filter: none; + overflow: visible; + height: auto !important; + min-height: 16px; + color: #666; +} +body[data-type='about'] #web_bg { + background: var(--anzhiyu-background); +} +#about-page { + padding-top: 1rem; +} +#about-page .author-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin: 0 0 16px 0; +} +#about-page .author-box .author-tag-left { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-tag-left { + display: none; + } +} +#about-page .author-box .author-tag-left .author-tag:first-child, +#about-page .author-box .author-tag-left .author-tag:last-child { + margin-right: -16px; +} +#about-page .author-box .author-tag-right { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-tag-right { + display: none; + } +} +#about-page .author-box .author-tag-right .author-tag:first-child, +#about-page .author-box .author-tag-right .author-tag:last-child { + margin-left: -16px; +} +#about-page .author-box .author-tag { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + padding: 1px 8px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + border-radius: 40px; + margin-top: 6px; + font-size: 14px; + font-weight: 700; + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + -webkit-animation: 6s ease-in-out 0s infinite normal none running floating; + -moz-animation: 6s ease-in-out 0s infinite normal none running floating; + -o-animation: 6s ease-in-out 0s infinite normal none running floating; + -ms-animation: 6s ease-in-out 0s infinite normal none running floating; + animation: 6s ease-in-out 0s infinite normal none running floating; +} +#about-page .author-box .author-tag:nth-child(1) { + -webkit-animation-delay: 0s; + -moz-animation-delay: 0s; + -o-animation-delay: 0s; + -ms-animation-delay: 0s; + animation-delay: 0s; +} +#about-page .author-box .author-tag:nth-child(2) { + -webkit-animation-delay: 0.6s; + -moz-animation-delay: 0.6s; + -o-animation-delay: 0.6s; + -ms-animation-delay: 0.6s; + animation-delay: 0.6s; +} +#about-page .author-box .author-tag:nth-child(3) { + -webkit-animation-delay: 1.2s; + -moz-animation-delay: 1.2s; + -o-animation-delay: 1.2s; + -ms-animation-delay: 1.2s; + animation-delay: 1.2s; +} +#about-page .author-box .author-tag:nth-child(4) { + -webkit-animation-delay: 1.8s; + -moz-animation-delay: 1.8s; + -o-animation-delay: 1.8s; + -ms-animation-delay: 1.8s; + animation-delay: 1.8s; +} +#about-page .author-box .author-img { + margin: 0 30px; + border-radius: 50%; + width: 180px; + height: 180px; + position: relative; + background: var(--anzhiyu-secondbg); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img { + width: 120px; + height: 120px; + } +} +#about-page .author-box .author-img img { + border-radius: 50%; + overflow: hidden; + width: 180px; + height: 180px; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img img { + width: 120px; + height: 120px; + } +} +#about-page .author-box .author-img:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#about-page .author-box .author-img:before { + content: ''; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + -ms-transition: 1s; + transition: 1s; + width: 30px; + height: 30px; + background: var(--anzhiyu-green); + position: absolute; + border-radius: 50%; + border: 5px solid var(--anzhiyu-background); + bottom: 5px; + right: 10px; + z-index: 2; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img:before { + bottom: -5px; + right: -5px; + } +} +.author-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + margin-top: 1rem; +} +#about-page .myInfoAndSayHello { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + color: var(--anzhiyu-white); + background: -webkit-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -moz-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -o-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -ms-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: linear-gradient(120deg, #5b27ff 0, #00d4ff 100%); + background-size: 200%; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; + width: 59%; +} +.author-content-item { + width: 49%; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + padding: 1rem 2rem; + overflow: hidden; +} +#about-page .myInfoAndSayHello .title1 { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + line-height: 1.3; +} +#about-page .myInfoAndSayHello .title2 { + font-size: 36px; + font-weight: 700; + line-height: 1.1; + margin: 0.5rem 0; +} +.inline-word { + word-break: keep-all; + white-space: nowrap; +} +#about-page .myInfoAndSayHello .title1 { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + line-height: 1.3; +} +.author-content-item.aboutsiteTips { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 39%; +} +.aboutsiteTips h2 { + margin-right: auto; + font-size: 36px; + font-family: Helvetica; + line-height: 1.06; + letter-spacing: -0.02em; + color: var(--font-color); + margin-top: 0; +} +.aboutsiteTips .mask { + height: 36px; + position: relative; + overflow: hidden; + margin-top: 4px; +} +.aboutsiteTips .mask span { + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + top: 36px; + padding-bottom: var(--offset); + background-size: 100% 100%; + -webkit-background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-repeat: no-repeat; +} +.aboutsiteTips .mask span[data-show] { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); + -webkit-transition: 0.5s -webkit-transform ease-in-out; + -moz-transition: 0.5s -moz-transform ease-in-out; + -o-transition: 0.5s -o-transform ease-in-out; + -ms-transition: 0.5s -ms-transform ease-in-out; + transition: 0.5s transform ease-in-out; +} +.aboutsiteTips .mask span[data-up] { + -webkit-transform: translateY(-200%); + -moz-transform: translateY(-200%); + -o-transform: translateY(-200%); + -ms-transform: translateY(-200%); + transform: translateY(-200%); + -webkit-transition: 0.5s -webkit-transform ease-in-out; + -moz-transition: 0.5s -moz-transform ease-in-out; + -o-transition: 0.5s -o-transform ease-in-out; + -ms-transition: 0.5s -ms-transform ease-in-out; + transition: 0.5s transform ease-in-out; +} +.aboutsiteTips .mask span:nth-child(1) { + background-image: -webkit-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -moz-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -o-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -ms-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: linear-gradient(45deg, #0ecffe 50%, #07a6f1); +} +.aboutsiteTips .mask span:nth-child(2) { + background-image: -webkit-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -moz-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -o-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -ms-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: linear-gradient(45deg, #18e198 50%, #0ec15d); +} +.aboutsiteTips .mask span:nth-child(3) { + background-image: -webkit-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -moz-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -o-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -ms-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: linear-gradient(45deg, #8a7cfb 50%, #633e9c); +} +.aboutsiteTips .mask span:nth-child(4) { + background-image: -webkit-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -moz-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -o-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -ms-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: linear-gradient(45deg, #fa7671 50%, #f45f7f); +} +@media screen and (max-width: 768px) { + .author-content-item.map { + margin-bottom: 0; + } +} +#about-page .about-statistic { + min-height: 380px; + width: 39%; + background-size: cover; + color: var(--anzhiyu-white); + overflow: hidden; +} +#about-page .about-statistic::after { + -webkit-box-shadow: 0 -159px 173px 71px #0c1c2c inset; + box-shadow: 0 -159px 173px 71px #0c1c2c inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item .card-content { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 1rem 2rem; +} +.author-content-item .card-content .author-content-item-title { + margin-bottom: 0.5rem; +} +.author-content-item .author-content-item-title { + font-size: 36px; + font-weight: 700; + line-height: 1; +} +#statistic { + font-size: 16px; + border-radius: 15px; + width: 100%; + color: var(--anzhiyu-white); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-top: 1rem; + margin-bottom: 2rem; +} +#statistic div span:first-child { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; +} +#statistic div span:last-child { + font-weight: 700; + font-size: 34px; + line-height: 1; + white-space: nowrap; +} +#statistic div { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 50%; + margin-bottom: 0.5rem; +} +.post-tips { + color: var(--anzhiyu-gray); + font-size: 14px; + position: absolute; + bottom: 1rem; + left: 2rem; +} +.post-tips a { + color: var(--anzhiyu-gray) !important; + border: none !important; +} +.author-content-item .card-content .banner-button-group { + position: absolute; + bottom: 1.5rem; + right: 2rem; +} +.author-content-item .card-content .banner-button-group .banner-button { + height: 40px; + border-radius: 20px; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + cursor: pointer; + border-bottom: 0 !important; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.author-content-item .card-content .banner-button-group .banner-button i, +.author-content-item .card-content .banner-button-group .banner-button svg { + margin-right: 0.25rem; + font-size: 22px; +} +.author-content-item .card-content .banner-button-group .banner-button .banner-button-text { + margin-left: 4px; +} +#about-page .author-content-item .card-content .banner-button-group .banner-button i, +#about-page .author-content-item .card-content .banner-button-group .banner-button svg { + font-size: 22px; + margin-right: 0.25rem; + height: 40px; + max-width: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 50px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item .card-content .banner-button-group .banner-button:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border-radius: 20px !important; +} +.author-content-item .card-content .banner-button-group .banner-button:hover i, +.author-content-item .card-content .banner-button-group .banner-button:hover svg .author-content-item.personalities { + background: none !important; +} +.author-content-item.personalities { + width: 59%; +} +.author-content-item.personalities .image { + position: absolute; + right: 30px; + top: 10px; + width: 220px; + -webkit-transition: -webkit-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -moz-transition: -moz-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -o-transition: -o-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -ms-transition: -ms-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + transition: transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); +} +.author-content-item.personalities .image img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: filter 375ms ease-in 0.2s; + -moz-transition: filter 375ms ease-in 0.2s; + -o-transition: filter 375ms ease-in 0.2s; + -ms-transition: filter 375ms ease-in 0.2s; + transition: filter 375ms ease-in 0.2s; +} +.author-content-item.personalities:hover .image { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + transform: rotate(-10deg); +} +.author-content-item.myphoto { + height: 60%; + min-height: 240px; + position: relative; + overflow: hidden; + width: 39%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item.myphoto img { + position: absolute; + min-width: 100%; + object-fit: cover; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + -webkit-animation: coverIn 2s ease-out forwards; + -moz-animation: coverIn 2s ease-out forwards; + -o-animation: coverIn 2s ease-out forwards; + -ms-animation: coverIn 2s ease-out forwards; + animation: coverIn 2s ease-out forwards; + -webkit-transition: -webkit-transform 2s ease-out !important; + -moz-transition: -moz-transform 2s ease-out !important; + -o-transition: -o-transform 2s ease-out !important; + -ms-transition: -ms-transform 2s ease-out !important; + transition: transform 2s ease-out !important; +} +.author-content-item.myphoto:hover img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.author-content-item:hover .card-background-icon { + -webkit-transform: rotate(20deg); + -moz-transform: rotate(20deg); + -o-transform: rotate(20deg); + -ms-transform: rotate(20deg); + transform: rotate(20deg); +} +.author-content-item.personalities .title2 { + font-size: 36px; + font-weight: 700; + line-height: 1.1; +} +.author-content-item.map { + min-height: 160px; + max-height: 400px; + position: relative; + overflow: hidden; + margin-bottom: 0.5rem; + height: 60%; + -webkit-transition: 1s ease-in-out; + -moz-transition: 1s ease-in-out; + -o-transition: 1s ease-in-out; + -ms-transition: 1s ease-in-out; + transition: 1s ease-in-out; + background-size: 100%; + background-repeat: no-repeat; + background-position: center; +} +.author-content-item.single { + width: 100%; +} +.author-content-item.map .map-title { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + color: var(--font-color); + background: var(--anzhiyu-maskbg); + padding: 0.5rem 2rem; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-transition: all 1s, color 0s ease-in-out; + -moz-transition: all 1s, color 0s ease-in-out; + -o-transition: all 1s, color 0s ease-in-out; + -ms-transition: all 1s, color 0s ease-in-out; + transition: all 1s, color 0s ease-in-out; + font-size: 20px; +} +.author-content-item.map .map-title b { + color: var(--font-color); +} +.author-content-item.selfInfo { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + min-height: 100px; + max-height: 400px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + height: -webkit-fill-available; + height: 40%; +} +.author-content-item.selfInfo div { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 0.5rem 2rem 0.5rem 0; + min-width: 120px; +} +.author-content-item.selfInfo .selfInfo-title { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; + line-height: 1; + margin-bottom: 8px; +} +.author-content-item.selfInfo .selfInfo-content { + font-weight: 700; + font-size: 34px; + line-height: 1; +} +.author-content-item-group.column.mapAndInfo { + width: 59%; +} +.author-content-item.map:hover { + background-size: 120%; + -webkit-transition: 4s ease-in-out; + -moz-transition: 4s ease-in-out; + -o-transition: 4s ease-in-out; + -ms-transition: 4s ease-in-out; + transition: 4s ease-in-out; + background-position-x: 0; + background-position-y: 36%; +} +.author-content-item.map:hover .map-title { + bottom: -100%; +} +.author-content-item-group.column { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 49%; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.post-tips a:hover { + color: var(--anzhiyu-main) !important; + background: none !important; +} +.author-content-item.single.reward .reward-list-updateDate { + color: var(--anzhiyu-gray); + font-size: 14px; +} +.author-content-item.maxim { + font-size: 36px; + font-weight: 700; + line-height: 1.1; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 39%; +} +.author-content-item .author-content-item-tips { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; + margin-bottom: 0.5rem; +} +.author-content-item.maxim .maxim-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.author-content-item.buff { + height: 200px; + font-size: 36px; + font-weight: 700; + line-height: 1.1; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + background: -webkit-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -moz-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -o-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -ms-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: linear-gradient(120deg, #ff27e8 0, #ff8000 100%); + color: var(--anzhiyu-white); + background-size: 200%; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; + min-height: 200px; + height: fit-content; + width: 59%; +} +.author-content-item.buff .card-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item.buff .buff-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.card-background-icon { + font-size: 12rem; + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; + filter: alpha(opacity=20); + position: absolute; + right: 0; + bottom: -40%; + -webkit-transform: rotate(30deg); + -moz-transform: rotate(30deg); + -o-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); + -webkit-transition: 2s ease-in-out; + -moz-transition: 2s ease-in-out; + -o-transition: 2s ease-in-out; + -ms-transition: 2s ease-in-out; + transition: 2s ease-in-out; +} +.card-background-icon i { + font-size: 12rem; +} +.author-content-item.game-yuanshen { + background-size: cover; + min-height: 300px; + overflow: hidden; + color: var(--anzhiyu-white); + width: 59%; +} +.author-content-item .content-bottom { + margin-top: auto; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.author-content-item .content-bottom .icon-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; +} +.author-content-item .content-bottom .icon-group i { + display: inline-block; + width: 143px; + height: 18px; + margin-right: 0.5rem; +} +.author-content-item.game-yuanshen::after { + -webkit-box-shadow: 0 -69px 203px 11px #575d8b inset; + box-shadow: 0 -69px 203px 11px #575d8b inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item.comic-content { + width: 39%; + min-height: 300px; + overflow: hidden; +} +.author-content-item.comic-content .comic-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 120%; + height: 100%; + position: absolute; + left: 50%; + top: 0; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -o-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); +} +.author-content-item.comic-content .author-content-item-tips, +.author-content-item.comic-content .author-content-item-title { + z-index: 2; + color: var(--anzhiyu-white); + pointer-events: none; +} +.author-content-item.comic-content .comic-item { + height: 100%; + color: #fff; + width: 20%; + -webkit-transform: skew(-10deg, 0deg); + -moz-transform: skew(-10deg, 0deg); + -o-transform: skew(-10deg, 0deg); + -ms-transform: skew(-10deg, 0deg); + transform: skew(-10deg, 0deg); + -webkit-transition: 0.8s; + -moz-transition: 0.8s; + -o-transition: 0.8s; + -ms-transition: 0.8s; + transition: 0.8s; + position: relative; + overflow: hidden; +} +.author-content-item.comic-content .comic-item:hover { + width: 46%; +} +.author-content-item.comic-content .comic-item:hover .comic-item-cover { + left: 16%; + -webkit-transform: skew(10deg, 0deg) scale(1.6); + -moz-transform: skew(10deg, 0deg) scale(1.6); + -o-transform: skew(10deg, 0deg) scale(1.6); + -ms-transform: skew(10deg, 0deg) scale(1.6); + transform: skew(10deg, 0deg) scale(1.6); +} +.author-content-item.comic-content .comic-item .comic-item-cover { + position: absolute; + top: 0; + left: -50%; + height: 100%; + -webkit-transform: skew(10deg, 0deg); + -moz-transform: skew(10deg, 0deg); + -o-transform: skew(10deg, 0deg); + -ms-transform: skew(10deg, 0deg); + transform: skew(10deg, 0deg); + object-fit: cover; + -webkit-transition: scale 0.2s, all 0.8s; + -moz-transition: scale 0.2s, all 0.8s; + -o-transition: scale 0.2s, all 0.8s; + -ms-transition: scale 0.2s, all 0.8s; + transition: scale 0.2s, all 0.8s; +} +.author-content-item.comic-content .comic-item .comic-item-cover img { + height: 100%; + -webkit-transition: 0.8s; + -moz-transition: 0.8s; + -o-transition: 0.8s; + -ms-transition: 0.8s; + transition: 0.8s; + max-width: none; + border-radius: 0px; +} +.author-content-item.comic-content::after { + -webkit-box-shadow: 0 -48px 203px 11px #fbe9b8 inset; + box-shadow: 0 -48px 203px 11px #fbe9b8 inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item.like-technology { + min-height: 230px; + color: var(--anzhiyu-white); +} +.author-content-item.like-music { + min-height: 400px; + color: var(--anzhiyu-white); + overflow: hidden; +} +.author-content-item.like-music::after { + -webkit-box-shadow: 0 -69px 203px 11px #453e38 inset; + box-shadow: 0 -69px 203px 11px #453e38 inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +@media screen and (max-width: 1200px) { + .author-content-item.personalities .image { + width: 180px; + } +} +@media screen and (max-width: 768px) { + #gitcalendar { + display: none; + } + [data-theme='dark'] .author-content-item .card-content .banner-button-group .banner-button { + color: var(--anzhiyu-black) !important; + } + .author-content-item .card-content .banner-button-group .banner-button:hover { + background: none !important; + } + .author-content-item.game-yuanshen .content-bottom { + padding-bottom: 10px; + } + .author-content-item.game-yuanshen .game-yuanshen-uid { + display: none; + } + .author-content { + margin-top: 0; + } + .author-content-item { + width: 100% !important; + margin-top: 1rem; + padding: 1rem; + } + .author-content-item.map { + margin-bottom: 0; + } + .author-content-item-group.column { + width: 100% !important; + } + .author-content-item.selfInfo { + height: 95%; + } + .author-content-item.personalities { + height: 200px; + } + .post-tips { + left: auto; + } + .author-content-item.personalities .image { + width: 125px; + } + .site-card-group > a { + width: 100% !important; + } + body[data-type='about'] .post-reward { + display: none; + } + .reward-list-item { + width: 100% !important; + } + .author-content-item .card-content .banner-button-group .banner-button-text { + display: none; + } + .author-content-item .card-content .banner-button-group { + right: 1rem; + bottom: 1rem; + } + .author-content-item .card-content .banner-button-group .banner-button { + background: none; + padding: 0; + width: auto; + backdrop-filter: unset; + } + .author-content-item .card-content .banner-button-group .banner-button i, + .author-content-item .card-content .banner-button-group .banner-button svg { + margin-right: 0.25rem; + font-size: 1.5rem; + background: #fff; + border-radius: 50%; + padding: 6px; + margin-left: 80px; + height: 40px; + width: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + color: var(--anzhiyu-fontcolor); + } + .author-content-item .card-content .banner-button-group .banner-button:hover i { + background: var(--anzhiyu-background) !important; + color: var(--anzhiyu-theme); + } + #selfInfo-content-year { + width: 90px; + } +} +@media screen and (min-width: 768px) and (max-width: 896px) { + .author-content-item.like-music .content-bottom .tips { + display: none; + } +} +.reward-list-all { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + margin-top: 1rem; + margin-bottom: 0.5rem; + margin-left: -0.25rem; + margin-right: -0.25rem; +} +.reward-list-item { + padding: 1rem; + border-radius: 12px; + border: var(--style-border-always); + width: calc((100% / 5) - 0.5rem); + margin: 0 0.25rem 0.5rem 0.25rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +@media screen and (max-width: 1200px) { + .reward-list-item { + width: calc((100% / 3) - 0.5rem); + } +} +.reward-list-item .reward-list-item-name { + font-size: 1rem; + font-weight: 700; + line-height: 1; + margin-bottom: 0.5rem; +} +.reward-list-item .reward-list-bottom-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.reward-list-item .reward-list-item-money { + padding: 4px; + background: var(--font-color); + color: var(--card-bg); + font-size: 12px; + line-height: 1; + border-radius: 4px; + margin-right: 4px; + white-space: nowrap; +} +.reward-list-item .reward-list-item-time { + font-size: 12px; + color: var(--anzhiyu-secondtext); + white-space: nowrap; +} +.skills { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 50%; + min-height: 450px; +} +.skills .skill-icon { + width: 32px; + height: 32px; + border-radius: 32px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 8px; +} +.skills .skills-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: absolute; + width: 100%; + top: 0; + left: 0; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + margin-top: 10px; +} +.skills .skill-info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-right: 10px; + margin-top: 10px; + background: var(--anzhiyu-background); + border-radius: 40px; + padding: 4px 12px 4px 8px; + border: var(--style-border); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +.skills .skill-icon img { + width: 18px; + height: 18px; + margin: 0 auto !important; +} +.skills .skills-style-group { + position: relative; +} +.author-content-item.skills .skills-style-group { + position: relative; +} +.skills:hover .skills-style-group #skills-tags-group-all { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.skills:hover .skills-style-group .skills-list { + opacity: 1; + -ms-filter: none; + filter: none; +} +.author-content-item.careers { + min-height: 400px; + background-size: contain; + background-repeat: no-repeat; + background-position-x: right; + background-position-y: bottom; +} +.author-content-item.careers .careers-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; + margin-top: 12px; + margin-bottom: 12px; +} +.author-content-item.careers .career-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.author-content-item.careers .career-item .circle { + width: 16px; + height: 16px; + margin-top: 3px; + margin-right: 8px; + border-radius: 50%; +} +.author-content-item.careers .career-item .text { + color: var(--anzhiyu-secondtext); +} +.author-content-item.careers .careers-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.author-content-item.careers .careers-item .circle { + width: 16px; + height: 16px; + margin-right: 8px; + border-radius: 16px; +} +.author-content-item.careers .careers-item .name { + color: var(--anzhiyu-secondtext); +} +.author-content-item.careers img { + position: absolute; + left: 0; + bottom: 20px; + width: 100%; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + z-index: -1; +} +:root { + --loadingbar-background-color: #2c2b30; + --loadingbar-prospect-color: #ece5d8; +} +.loading-bar { + position: absolute; + top: 50%; + left: 50%; + width: 500px; + height: 62.5px; + -webkit-transform: translate(-25%, -50%) scale(0.5); + -moz-transform: translate(-25%, -50%) scale(0.5); + -o-transform: translate(-25%, -50%) scale(0.5); + -ms-transform: translate(-25%, -50%) scale(0.5); + transform: translate(-25%, -50%) scale(0.5); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; +} +.loading-bar::after { + content: ''; + position: absolute; + top: 500px; + left: 0; + filter: drop-shadow(0 -500px 0 var(--loadingbar-prospect-color)); + width: 500px; + height: 62.5px; + background: url("https://yuanshen.site/imgs/loading-bar.png") no-repeat left 100%; + background-size: 500px 62.5px; + background-position-x: 0; +} +.author-content-item.game-yuanshen:hover .loading-bar::after { + -webkit-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -moz-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -o-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -ms-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; +} +@media screen and (max-width: 719px) { + .loading-bar .loading-bar { + display: none; + } +} +@media screen and (max-width: 719px) and (orientation: landscape) { + .loading-bar .loading-bar { + display: block !important; + -webkit-transform: translate(-50%, -50%) scale(0.7) !important; + -moz-transform: translate(-50%, -50%) scale(0.7) !important; + -o-transform: translate(-50%, -50%) scale(0.7) !important; + -ms-transform: translate(-50%, -50%) scale(0.7) !important; + transform: translate(-50%, -50%) scale(0.7) !important; + } +} +@supports not (filter: drop-shadow(0 0 0 #fff)) { + .loading-bar:before { + content: 'Your browser does not support the animation'; + } +} +.hello-about { + margin: 20px auto; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.shapes { + position: relative; + height: 315px; + width: 100%; + background: #2128bd; + overflow: hidden; +} +.shape { + will-change: transform; + position: absolute; + border-radius: 50%; +} +.shape.shape-1 { + background: #005ffe; + width: 650px; + height: 650px; + margin: -325px 0 0 -325px; +} +.shape.shape-2 { + background: #ffe5e3; + width: 440px; + height: 440px; + margin: -220px 0 0 -220px; +} +.shape.shape-3 { + background: #ffcc57; + width: 270px; + height: 270px; + margin: -135px 0 0 -135px; +} +.hello-about .content { + top: 0; + left: 0; + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + height: 315px; + width: 100%; + background: #fff; + mix-blend-mode: screen; +} +[data-theme='dark'] .hello-about .content { + background: transparent; +} +[data-theme='dark'] .hello-about h1 { + color: var(--anzhiyu-white); +} +.hello-about h1 { + font-size: 200px; + color: #000; + margin: 0; + text-align: center; + font: inherit; + vertical-align: baseline; + line-height: 1; + font-size: calc(0.0989119683 * 100vw + 58.5558852621px); + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +@media (min-width: 419px) { + .hello-about h1 { + font-size: calc(0.0989119683 * 100vw + 58.5558852621px); + } +} +@media (max-width: 768px) { + .hello-about { + margin: 20px 0 auto; + } +} +.cursor { + position: absolute; + background: #2128bd; + width: 20px; + height: 20px; + margin: -10px 0 0 -10px; + border-radius: 50%; + will-change: transform; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + z-index: 3; +} +#about-page .author-content-item-group.column.mapAndInfo { + width: 100%; +} +#about-page .author-content-item-group.column { + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} +#about-page .author-content-item.map { + width: 50%; +} +#about-page .author-content-item.selfInfo { + height: 100%; + width: 49%; +} +@-moz-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@-webkit-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@-o-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +.article-sort { + margin: 0.25rem; +} +.article-sort-title { + margin: 0.25rem; + padding: 0; + border: none; + font-weight: bold; + font-size: 2em; +} +.article-sort-item { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; + -o-transition: all 0.2s ease-in-out 0s; + -ms-transition: all 0.2s ease-in-out 0s; + transition: all 0.2s ease-in-out 0s; + border: none; + margin: 0 0 1rem 0rem; + overflow: hidden; + border-radius: 12px; +} +.article-sort-item.no-article-cover { + height: 80px; +} +.article-sort-item.no-article-cover .article-sort-item-info { + padding: 0; +} +.article-sort-item.year { + font-size: 1rem; + color: var(--anzhiyu-secondtext); + margin-bottom: 0.25rem; +} +.article-sort-item.year:hover:before { + border-color: #425aef; +} +.article-sort-item.year:before { + border-color: var(--pseudo-hover); +} +.article-sort-item-time { + color: var(--anzhiyu-fontcolor); + font-size: 95%; +} +.article-sort-item-time time { + padding-left: 6px; + cursor: default; +} +.article-sort-item-title { + color: var(--font-color); + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-line-clamp: 1; + margin-right: auto; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + font-weight: bold; + line-height: 1.3; +} +.article-sort-item-title:hover { + color: var(--anzhiyu-lighttext); +} +.article-sort-item-index { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + position: absolute; + top: 0.5rem; + right: 0.5rem; + font-style: italic; + font-size: 2.5rem; + line-height: 1.5rem; +} +.article-sort-item-img { + overflow: hidden; + width: 151px; + height: 80px; + border-radius: 12px; + min-width: 151px; + min-height: 80px; + background: var(--anzhiyu-secondbg); + -webkit-mask-image: -webkit-radial-gradient(center, #fff, #000); +} +.article-sort-item-info { + padding: 0 0.8rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + max-height: 80px; + height: 80px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +@media screen and (max-width: 768px) { + .article-sort-item-info .article-sort-item-index { + display: none; + } +} +.article-sort-item-info .article-sort-item-title { + height: 30%; +} +@media screen and (max-width: 768px) { + .article-sort-item-info .article-sort-item-title { + font-size: 0.9em; + height: 25%; + } +} +.article-sort-item-info .article-meta-wrap { + height: 35%; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-tags a { + color: var(--anzhiyu-fontcolor); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin-right: auto; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding: 0 0.2rem; + padding-left: 0; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-tags a span { + font-size: 12px; + margin-right: 1px; + pointer-events: none; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-time { + font-size: 12px; +} +.category-lists .category-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .category-lists .category-title { + font-size: 2em; + } +} +.category-lists .category-list { + margin-bottom: 0; +} +.category-lists .category-list a { + color: var(--font-color); +} +.category-lists .category-list a:hover { + color: #425aef; +} +.category-lists .category-list .category-list-count { + margin-left: 8px; + color: var(--anzhiyu-fontcolor); +} +.category-lists .category-list .category-list-count:before { + content: '('; +} +.category-lists .category-list .category-list-count:after { + content: ')'; +} +.category-lists ul { + padding: 0 0 0 20px; +} +.category-lists ul ul { + padding-left: 4px; +} +.category-lists ul li { + position: relative; + margin: 6px 0; + padding: 0.12em 0.4em 0.12em 1.4em; +} +@media screen and (max-width: 768px) { + .post .layout#content-inner { + background: var(--anzhiyu-main); + } +} +#body-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100vh; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +@media screen and (max-width: 768px) { + #body-wrap .layout { + padding: 0; + } + #body-wrap #archive { + background: var(--anzhiyu-background); + border: none; + padding-top: 0px; + } +} +.layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + margin: 0 auto; + padding: 1.25rem 1.5rem; + max-width: 1200px; + width: 100%; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +@media screen and (max-width: 1200px) { + .layout { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-top: 10px; + } +} +@media screen and (max-width: 768px) { + .layout { + padding: 20px 15px; + z-index: 3; + } +} +@media screen and (min-width: 2000px) { + .layout { + max-width: 1700px; + } +} +.layout > div:first-child:not(.recent-posts) { + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + padding: 2rem 2.5rem; + border-radius: 12px; + background: var(--anzhiyu-card-bg); + border: var(--style-border); + width: calc(100% - 300px); + -webkit-align-self: flex-start; + align-self: flex-start; + -ms-flex-item-align: start; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + padding: 1rem 1rem; + -webkit-box-shadow: none; + box-shadow: none; + background: var(--anzhiyu-background); + } +} +.layout > div:first-child { + width: calc(100% - 300px); + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +@media screen and (max-width: 900px) { + .layout > div:first-child { + width: 100% !important; + } +} +.layout.hide-aside { + max-width: 1000px; +} +@media screen and (min-width: 2000px) { + .layout.hide-aside { + max-width: 1200px; + } +} +.layout.hide-aside > div { + width: 100% !important; +} +.apple #page-header.full_page { + background-attachment: scroll !important; +} +.apple .recent-post-item, +.apple .avatar-img, +.apple .flink-item-icon { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.goodthings-title { + margin: 1rem 0; + line-height: 1; +} +.equipment-item .equipment-item-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin: 0 -8px; +} +.equipment-item .equipment-item-content .equipment-item-content-item { + width: calc(25% - 12px); + border-radius: 12px; + border: var(--style-border-always); + overflow: hidden; + margin: 8px 6px; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + min-height: 400px; + position: relative; +} +@media screen and (max-width: 1200px) { + .equipment-item .equipment-item-content .equipment-item-content-item { + width: calc(50% - 12px); + } +} +@media screen and (max-width: 768px) { + .equipment-item .equipment-item-content .equipment-item-content-item { + width: 100%; + } +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-info { + padding: 8px 16px 16px 16px; + margin-top: 12px; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-name { + font-size: 18px; + font-weight: bold; + line-height: 1; + margin-bottom: 8px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + width: fit-content; + cursor: pointer; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-name:hover { + color: var(--anzhiyu-main); +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-specification { + font-size: 12px; + color: var(--anzhiyu-secondtext); + line-height: 16px; + margin-bottom: 5px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-description { + line-height: 20px; + color: var(--anzhiyu-secondtext); + height: 60px; + display: -webkit-box; + overflow: hidden; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + font-size: 14px; +} +.equipment-item .equipment-item-content .equipment-item-content-item a.equipment-item-content-item-link { + font-size: 12px; + background: var(--anzhiyu-gray-op); + padding: 4px 8px; + border-radius: 8px; + cursor: pointer; +} +.equipment-item .equipment-item-content .equipment-item-content-item a.equipment-item-content-item-link:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-cover { + width: 100%; + height: 200px; + background: var(--anzhiyu-secondbg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.equipment-item .equipment-item-content .equipment-item-content-item img.equipment-item-content-item-image { + object-fit: contain; + height: 80%; + width: 260px; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-toolbar { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + position: absolute; + bottom: 12px; + left: 0; + width: 100%; + padding: 0 16px; +} +body[data-type="equipment"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="equipment"] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="equipment"] #page .page-title { + display: none; +} +body[data-type="link"] #page .page-title { + display: none; +} +#flink-banners { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 76%; + background: var(--anzhiyu-card-bg); + padding: 1.5rem; + border: var(--style-border); + border-radius: 12px; + overflow: hidden; + position: relative; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow: hidden; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + will-change: transform; + -webkit-animation: slide-in 0.6s 0.2s backwards; + -moz-animation: slide-in 0.6s 0.2s backwards; + -o-animation: slide-in 0.6s 0.2s backwards; + -ms-animation: slide-in 0.6s 0.2s backwards; + animation: slide-in 0.6s 0.2s backwards; +} +#flink-banners .flink .banners-title { + top: 1.5rem; +} +#flink-banners .banner-top-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#flink-banners .banner-button-group { + position: absolute; + right: 2rem; + top: 2.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +@media screen and (max-width: 768px) { + #flink-banners .banner-button-group { + display: none; + } +} +#flink-banners .banner-button-group .banner-button { + color: var(--anzhiyu-card-bg); +} +#flink-banners .banner-button-group .banner-button.secondary { + color: var(--anzhiyu-fontcolor); +} +#flink-banners .banner-button-group .banner-button:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); +} +#flink-banners .banner-button-group .banner-button i { + margin-right: 8px; + font-size: 1rem; +} +#flink-banners #skills-tags-group-all .img-alt { + display: none; +} +#flink-banners #skills-tags-group-all .tags-group-wrapper { + -webkit-animation: rowup 120s linear infinite; + -moz-animation: rowup 120s linear infinite; + -o-animation: rowup 120s linear infinite; + -ms-animation: rowup 120s linear infinite; + animation: rowup 120s linear infinite; +} +#flink-banners #skills-tags-group-all .tags-group-icon { + border-radius: 50%; +} +#flink-banners #skills-tags-group-all .tags-group-icon img { + min-width: 100%; + min-height: 100%; + border-radius: 50%; + object-fit: cover; +} +.flink-desc { + margin: 0.2rem 0 0.5rem; +} +#article-container .anzhiyu-flink-list { + overflow: auto; + margin: -6px; + text-align: center; +} +#article-container .anzhiyu-flink-list .img-alt { + display: none; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item { + height: 60px; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item:hover .cf-friends-link img { + width: 0; + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + margin: 0.5rem; + min-width: 0px; + min-height: 0px; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item .cf-friends-link img { + width: 30px; + height: 30px; + min-width: 30px; + min-height: 30px; +} +#article-container .anzhiyu-flink-list .flink-list-item { + margin: 6px 6px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 12px; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + -o-transition-timing-function: ease-in-out; + -ms-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; + position: relative; + width: calc(20% - 12px); + border: var(--style-border); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + float: left; + overflow: hidden; + height: 90px; + line-height: 17px; + -webkit-transform: translateZ(0px); + -moz-transform: translateZ(0px); + -o-transform: translateZ(0px); + -ms-transform: translateZ(0px); + transform: translateZ(0px); +} +#article-container .anzhiyu-flink-list .flink-list-item .cf-friends-link { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + width: 100%; + height: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-fontcolor); + text-decoration: none; + font-weight: bold; + padding: 0 4px; + border-radius: 4px 4px 0 0; +} +#article-container .anzhiyu-flink-list .flink-list-item .cf-friends-link img { + border-radius: 32px; + margin: 15px 20px 15px 15px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background: var(--anzhiyu-background); + min-width: 60px; + min-height: 60px; + width: 60px; + height: 60px; + float: left; + object-fit: cover; +} +@media screen and (max-width: 1200px) { + #article-container .anzhiyu-flink-list .flink-list-item { + width: calc(50% - 15px) !important; + } +} +@media screen and (max-width: 600px) { + #article-container .anzhiyu-flink-list .flink-list-item { + width: calc(100% - 15px) !important; + } +} +#article-container .anzhiyu-flink-list .flink-list-item:hover:before, +#article-container .anzhiyu-flink-list .flink-list-item:focus:before, +#article-container .anzhiyu-flink-list .flink-list-item:active:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: calc(100% - 90px); + height: fit-content; +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-name { + text-align: left; + line-height: 20px; + color: var(--anzhiyu-fontcolor); + display: block; + padding: 0px 10px 0px 0px; + font-weight: 700; + font-size: 19px; + max-width: calc(100% - 12px); + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-desc { + white-space: normal; + padding: 5px 10px 16px 0; + color: var(--anzhiyu-fontcolor); + text-align: left; + font-size: 0.93em; + height: 40px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + background: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover .site-card-tag { + left: -70px; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a img { + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + width: 0; + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + margin: 0.5rem; + min-width: 0px; + min-height: 0px; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-info { + min-width: calc(100% - 20px); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-name { + color: var(--anzhiyu-white); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-desc { + overflow: hidden; + width: 100%; + color: var(--anzhiyu-white); +} +.flink-name { + margin-bottom: 5px; + font-weight: bold; + font-size: 1.5em; +} +#article-container img { + margin-bottom: 0.5rem; + object-fit: cover; + max-height: 900px; +} +.flexcard-flink-list { + overflow: hidden; +} +.flexcard-flink-list .flink-list-card .wrapper img { + -webkit-transition: -webkit-transform 0.5s ease-out !important; + -moz-transition: -moz-transform 0.5s ease-out !important; + -o-transition: -o-transform 0.5s ease-out !important; + -ms-transition: -ms-transform 0.5s ease-out !important; + transition: transform 0.5s ease-out !important; +} +.flexcard-flink-list .flink-list-card:hover { + border-color: var(--anzhiyu-main) !important; + background-color: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme) !important; + box-shadow: var(--anzhiyu-shadow-theme) !important; +} +.flexcard-flink-list > a { + width: calc(100% / 5 - 0.5rem); + height: 150px; + position: relative; + display: block; + margin: 0.5rem 0.25rem; + float: left; + overflow: hidden; + padding: 0; + border-radius: 8px; + -webkit-transition: all 0.3s ease 0s, -webkit-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: all 0.3s ease 0s, -moz-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: all 0.3s ease 0s, -o-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: all 0.3s ease 0s, -ms-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: all 0.3s ease 0s, transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -webkit-box-shadow: none; + box-shadow: none; + border: var(--style-border) !important; +} +.flexcard-flink-list > a:hover .info { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); +} +.flexcard-flink-list > a:hover .wrapper img { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); +} +.flexcard-flink-list > a:hover::before { + position: fixed; + width: inherit; + margin: auto; + left: 0; + right: 0; + top: 10%; + border-radius: 10px; + text-align: center; + z-index: 100; + content: attr(data-title); + font-size: 20px; + color: #fff; + padding: 10px; + background-color: rgba(66,90,239,0.8); +} +.flexcard-flink-list > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} +.flexcard-flink-list > a .wrapper { + position: relative; +} +.flexcard-flink-list > a .wrapper .fadeIn { + -webkit-animation: coverIn 0.8s ease-out forwards; + -moz-animation: coverIn 0.8s ease-out forwards; + -o-animation: coverIn 0.8s ease-out forwards; + -ms-animation: coverIn 0.8s ease-out forwards; + animation: coverIn 0.8s ease-out forwards; +} +.flexcard-flink-list > a .wrapper img { + height: 150px; + pointer-events: none; +} +.flexcard-flink-list > a .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 3px; + background-color: rgba(255,255,255,0.7); + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: -moz-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: -o-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: -ms-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; +} +.flexcard-flink-list > a .info img { + position: relative; + top: 45px; + width: 80px; + height: 80px; + border-radius: 50% !important; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); + z-index: 1; + text-align: center; + pointer-events: none; +} +.flexcard-flink-list > a .info span { + padding: 20px 10% 60px 10%; + font-size: 16px; + width: 100%; + text-align: center; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); + background-color: rgba(255,255,255,0.7); + color: var(--font-color); + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +.flexcard-flink-list>a .info, +.flexcard-flink-list>a .wrapper .cover { + position: absolute; + top: 0; + left: 0; +} +@media screen and (max-width: 1024px) { + .flexcard-flink-list > a { + width: calc(33.33333% - 15px); + } +} +@media screen and (max-width: 600px) { + .flexcard-flink-list > a { + width: calc(50% - 15px); + } +} +[data-theme=dark] .flexcard-flink-list a .info, +[data-theme=dark] .flexcard-flink-list a .info span { + background-color: rgba(0,0,0,0.6); +} +[data-theme=dark] .flexcard-flink-list > a:hover:before { + background-color: rgba(18,18,18,0.8); +} +.justified-gallery > div > img, +.justified-gallery > figure > img, +.justified-gallery > a > a > img, +.justified-gallery > div > a > img, +.justified-gallery > figure > a > img, +.justified-gallery > a > svg, +.justified-gallery > div > svg, +.justified-gallery > figure > svg, +.justified-gallery > a > a > svg, +.justified-gallery > div > a > svg, +.justified-gallery > figure > a > svg { + position: static !important; +} +.site-card-tag { + position: absolute; + top: 0; + left: 0; + padding: 4px 8px; + background-color: var(--anzhiyu-theme); + -webkit-box-shadow: var(--anzhiyu-shadow-blue); + box-shadow: var(--anzhiyu-shadow-blue); + color: var(--anzhiyu-white); + z-index: 1; + border-radius: 11px 0 12px 0; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 12px; +} +.site-card-tag.speed { + background: var(--anzhiyu-green); + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); +} +.site-card-tag.vip { + background: -webkit-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -moz-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -o-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -ms-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: linear-gradient(38deg, #e5b085 0%, #d48f16 100%); + overflow: hidden; + -webkit-box-shadow: var(--anzhiyu-shadow-yellow); + box-shadow: var(--anzhiyu-shadow-yellow); +} +.site-card-tag i.light { + cursor: pointer; + position: absolute; + top: 0; + width: 100px; + height: 50px; + background-image: -webkit--webkit-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--moz-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--o-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--ms-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit-linear-gradient(0deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + -webkit-animation: light_tag 4s both infinite; + -moz-animation: light_tag 4s both infinite; + -o-animation: light_tag 4s both infinite; + -ms-animation: light_tag 4s both infinite; + animation: light_tag 4s both infinite; + will-change: transform; +} +#article-container .telescopic-site-card-group { + padding: 20px 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: -8px; + -webkit-box-align: stretch; + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +#article-container .telescopic-site-card-group .site-card { + border: var(--style-border); + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + -o-transition-timing-function: ease-in-out; + -ms-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; + overflow: hidden; + height: 200px; + position: relative; + width: calc(100% / 7 - 16px); + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container .telescopic-site-card-group .site-card .img-alt { + display: none; +} +@media screen and (max-width: 1200px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(20% - 16px) !important; + } +} +@media screen and (max-width: 900px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(25% - 16px) !important; + } +} +@media screen and (max-width: 768px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(33.3333% - 16px) !important; + } +} +@media screen and (max-width: 600px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(50% - 16px) !important; + } +} +#article-container .telescopic-site-card-group .site-card:hover { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .telescopic-site-card-group .site-card:hover .info { + background: var(--anzhiyu-theme); + height: 120px; +} +#article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .title { + color: var(--anzhiyu-white); +} +#article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .desc { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + color: var(--anzhiyu-white); + width: 100%; +} +@media screen and (min-width: 768px) { + #article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .desc { + -webkit-line-clamp: 4; + } +} +#article-container .telescopic-site-card-group .site-card:hover .site-card-tag { + left: -50px; +} +#article-container .telescopic-site-card-group .site-card:hover .img { + height: 80px; +} +#article-container .telescopic-site-card-group .site-card:hover .img img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + filter: brightness(0.3); +} +#article-container .telescopic-site-card-group .site-card .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + padding: 0.7rem; + width: 100%; + height: 90px; + margin: 0; + border-radius: 0 0 12px 12px; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text .title { + color: var(--anzhiyu-fontcolor); + text-align: left; + font-weight: 600; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text .desc { + font-size: 0.9rem; + color: var(--anzhiyu-fontcolor); + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + text-align: left; + overflow-wrap: break-word; + line-height: 1.2; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 2; +} +#article-container .telescopic-site-card-group .site-card .info .img-alt { + display: none; +} +#article-container .telescopic-site-card-group .site-card .info img { + border-radius: 32px; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; + margin: 2px 8px 0 0; + width: 20px; + height: 20px; + min-width: 20px; + min-height: 20px; + background: var(--anzhiyu-secondbg); +} +#article-container .telescopic-site-card-group .site-card .img { + -webkit-mask-image: -webkit-radial-gradient(center, #fff, #000); + border-radius: 0; + height: 120px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + padding: 0 !important; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#article-container .telescopic-site-card-group .site-card .img img { + border-radius: 0; + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin: 0; + max-width: 100%; +} +@-moz-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@-webkit-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@-o-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +#recent-posts > .recent-post-item:not(:first-child) { + margin-top: 20px; + -webkit-animation: slide-in 0.6s 0.4s backwards; + -moz-animation: slide-in 0.6s 0.4s backwards; + -o-animation: slide-in 0.6s 0.4s backwards; + -ms-animation: slide-in 0.6s 0.4s backwards; + animation: slide-in 0.6s 0.4s backwards; + will-change: transform; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item:not(:first-child) { + margin: 20px 20px 0; + } +} +#recent-posts > .recent-post-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + height: 18em; + position: relative; + border-radius: 12px; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#recent-posts > .recent-post-item .recent-post-info-top-tips { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 20px; +} +#recent-posts > .recent-post-item .unvisited-post { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; +} +#recent-posts > .recent-post-item .unvisited-post:visited { + color: var(--anzhiyu-card-bg); +} +#recent-posts > .recent-post-item .recent-post-info { + margin-top: 0px; + position: relative; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top { + position: relative; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + padding: 0 32px; + width: 100%; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top .article-categories-original { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; + margin-right: 8px; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top .newPost { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; + margin-right: 8px; +} +#recent-posts > .recent-post-item .recent-post-info .article-title { + font-size: 20px; + -webkit-line-clamp: 2; + line-height: 30px; + margin-top: 0; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + margin-bottom: 0; + width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .recent-post-info .article-title { + line-height: 23px; + font-size: 19px; + } +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto; + } + #recent-posts > .recent-post-item.lastestpost-item { + margin-top: 10px !important; + } +} +#recent-posts > .recent-post-item:hover img.post_bg { + filter: brightness(0.82) !important; + -webkit-transform: scale(1.03) !important; + -moz-transform: scale(1.03) !important; + -o-transform: scale(1.03) !important; + -ms-transform: scale(1.03) !important; + transform: scale(1.03) !important; + -webkit-transition: 0.3s ease-in-out; + -moz-transition: 0.3s ease-in-out; + -o-transition: 0.3s ease-in-out; + -ms-transition: 0.3s ease-in-out; + transition: 0.3s ease-in-out; +} +#recent-posts > .recent-post-item.ads-wrap { + display: block !important; + height: auto !important; +} +#recent-posts > .recent-post-item .post_cover { + overflow: hidden; + width: 70%; + height: 200px; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover { + width: 100%; + height: 200px; + } +} +#recent-posts > .recent-post-item .post_cover img.post_bg { + border-radius: 0px; + height: 100%; + width: 100%; + -webkit-transition: all 0.6s ease 0s; + -moz-transition: all 0.6s ease 0s; + -o-transition: all 0.6s ease 0s; + -ms-transition: all 0.6s ease 0s; + transition: all 0.6s ease 0s; + object-fit: cover; +} +#recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 1; + -moz-box-ordinal-group: 1; + -o-box-ordinal-group: 1; + -ms-flex-order: 1; + -webkit-order: 1; + order: 1; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + } +} +#recent-posts > .recent-post-item >.recent-post-info { + height: 174px; + width: 100%; + cursor: pointer; + position: relative; + padding: 0; + display: inline-block; + overflow: hidden; +} +#recent-posts > .recent-post-item >.recent-post-info .sticky-warp { + line-height: 23px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 8px; +} +#recent-posts > .recent-post-item >.recent-post-info .sticky-warp .sticky { + color: #ff7242; + font-size: 12px; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info { + width: 100%; + min-height: 140px; + } +} +#recent-posts > .recent-post-item >.recent-post-info.no-cover { + width: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info.no-cover { + padding: 30px 20px; + } +} +#recent-posts > .recent-post-item >.recent-post-info.no-cover:hover { + color: #425aef; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + position: absolute; + padding: 0 32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + left: 0; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + white-space: nowrap; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + bottom: 0px; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap { + bottom: 20px; + } +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + color: var(--anzhiyu-fontcolor); + font-size: 0.875rem; + white-space: nowrap; + overflow: hidden; + display: inline-block; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +@media screen and (max-width: 500px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + font-size: 13px; + } +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap i { + margin: 0 4px 0 0; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-label { + display: none; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-separator { + margin: 0 6px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-link { + margin: 0 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a { + color: var(--anzhiyu-fontcolor); + font-size: 14px; + margin-right: 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a span { + pointer-events: none; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a:hover { + color: #425aef; +} +#recent-posts > .recent-post-item >.recent-post-info > .content { + -webkit-line-clamp: 2; +} +#topPostGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + margin-top: 10px; + height: 128px; + -ms-flex-line-pack: justify; + -webkit-align-content: space-between; + align-content: space-between; + width: 100%; +} +#home_top { + margin: 0 auto 0; + padding: 0px 1.5rem 0px; + max-width: 1400px; + width: 100%; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; + overflow: hidden; +} +@media screen and (max-width: 768px) { + #topPostGroup { + height: 240px; + } + #swiper_container_blog { + padding: 10px; + } + #home_top { + padding: 0px 20px 0px; + } +} +#content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; +} +@media screen and (max-width: 1200px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-title { + line-height: 30px; + font-weight: bold; + color: var(--anzhiyu-fontcolor); + width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 1.2rem; + -webkit-line-clamp: 2; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + } +} +@media screen and (max-width: 768px) { + #content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; + } +} +@media screen and (min-width: 1201px) { + #recent-posts { + -ms-flex-line-pack: start; + -webkit-align-content: flex-start; + align-content: flex-start; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + } + #recent-posts>.recent-post-item { + margin-top: 1rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + height: auto; + width: 49%; + -webkit-flex-direction: column; + -ms-flex-direction: column; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto !important; + } + #recent-posts>.recent-post-item .recent-post-info .content { + display: none; + } + #recent-posts>.recent-post-item .post_cover { + width: 100%; + height: 225px; + -webkit-transition: 1s !important; + -moz-transition: 1s !important; + -o-transition: 1s !important; + -ms-transition: 1s !important; + transition: 1s !important; + } + #recent-posts>.recent-post-item .post_cover img.post_bg { + width: 100%; + height: 100%; + } + #recent-posts>.recent-post-item .left_radius { + border-radius: 8px 8px 0 0; + } + #recent-posts>.recent-post-item .right_radius { + border-radius: 8px 8px 0 0; + } +} +#content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + line-height: 1.4; + color: var(--anzhiyu-secondtext); + margin-top: 0.5rem; + font-size: 14px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; +} +#popup-window { + min-width: 300px; + background: var(--anzhiyu-maskbgdeep); + color: var(--anzhiyu-fontcolor); + padding: 8px 16px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + bottom: 20px; + right: 20px; + position: fixed; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + z-index: 1002; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: saturate(180%) blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + border: var(--style-border); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; +} +#popup-window.show-popup-window { + -webkit-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + opacity: 1; + -ms-filter: none; + filter: none; + pointer-events: all; + cursor: pointer; +} +#popup-window.no-url:hover { + background: var(--anzhiyu-maskbgdeep); + color: var(--anzhiyu-fontcolor); + border: var(--style-border); + cursor: pointer; +} +#popup-window.no-url .popup-window-content .popup-link { + display: none; +} +#popup-window:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border: var(--style-border-hover); +} +#popup-window:hover .popup-window-content .popup-link i { + color: var(--anzhiyu-white); +} +#popup-window.popup-hide { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +#popup-window .popup-window-title { + font-size: 12px; + font-weight: 700; + color: var(--anzhiyu-card-bg); + margin-right: 8px; + background: var(--anzhiyu-fontcolor); + line-height: 1; + padding: 4px; + border-radius: 4px; + width: fit-content; +} +#popup-window .popup-window-divider { + width: 100%; + border-bottom: var(--style-border); + margin-top: 6px; +} +#popup-window .popup-window-content { + font-size: 14px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#popup-window .popup-window-content .popup-link { + margin-left: auto; + font-size: 16px; +} +#popup-window .popup-window-content .popup-link i { + font-size: 16px; +} +body[data-type="post"] #popup-window { + top: 70px; + bottom: auto; +} +body[data-type="post"] #popup-window.show-popup-window { + -webkit-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + opacity: 1; + -ms-filter: none; + filter: none; +} +body[data-type="post"] #popup-window.popup-hide { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +body[data-type="music"] { + background: #0d0d0d; +} +body[data-type="music"] #body-wrap { + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} +body[data-type="music"] #center-console + label i { + background: var(--anzhiyu-white) !important; +} +body[data-type="music"] .layout { + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} +body[data-type="music"] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="music"] #page .page-title { + display: none; +} +body[data-type="music"] #page-header #nav { + backdrop-filter: none !important; + background: 0 0 !important; + border-bottom: none !important; +} +body[data-type="music"] #page-header #nav #blog_name a, +body[data-type="music"] #page-header #nav .mask-name-container a, +body[data-type="music"] #page-header #nav #menus a, +body[data-type="music"] #page-header #nav #nav-right .nav-button a, +body[data-type="music"] #page-header #nav #nav-right #toggle-menu a, +body[data-type="music"] #page-header #nav #blog_name .back-home-button, +body[data-type="music"] #page-header #nav .mask-name-container .back-home-button, +body[data-type="music"] #page-header #nav #menus .back-home-button, +body[data-type="music"] #page-header #nav #nav-right .nav-button .back-home-button, +body[data-type="music"] #page-header #nav #nav-right #toggle-menu .back-home-button { + color: var(--anzhiyu-white); +} +body[data-type="music"] #footer, +body[data-type="music"] #nav-music { + display: none; +} +body[data-type="music"] #an_music_bg { + display: block; +} +body[data-type="music"] #web_bg { + display: none; +} +body[data-type="music"] .s-sticker div { + color: var(--anzhiyu-white) !important; +} +[data-theme="dark"] body[data-type="music"] .page #page-header:before { + background-color: transparent; +} +#an_music_bg { + display: none; + filter: blur(63px); + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + position: fixed; + z-index: -999; + background-attachment: local; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + width: 200%; + height: 200%; + top: -50%; + left: -50%; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +body:has(#console.show) #nav-music { + display: none !important; +} +@media screen and (max-width: 1400px) { + body #anMusic-page #anMusicSwitching, + body #anMusic-page #anMusicRefreshBtn, + body #anMusic-page #anMusicBtnGetSong { + right: 7vw; + } + body #anMusic-page #anMusicSwitching { + bottom: 100px; + } + body #anMusic-page #anMusicRefreshBtn { + bottom: 160px; + } + body #anMusic-page #anMusicBtnGetSong { + bottom: 220px; + } +} +#anMusic-page #anMusicRefreshBtn, +#anMusic-page #anMusicBtnGetSong, +#anMusic-page #anMusicSwitching { + position: fixed; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 50px; + height: 50px; + bottom: 100px; + padding: 5px; + background: var(--anzhiyu-white-op); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + border-radius: 50%; + color: #fff; + text-align: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + cursor: pointer; + z-index: 2; +} +#anMusic-page #anMusicBtnGetSong { + right: 11vw; +} +#anMusic-page #anMusicRefreshBtn { + right: 7vw; +} +#anMusic-page #anMusicSwitching { + right: 15vw; +} +@media screen and (max-width: 768px) { + #anMusic-page div#anMusicBtnGetSong { + right: 80px; + bottom: 150px; + } + #anMusic-page div#anMusicRefreshBtn { + right: 20px; + bottom: 150px; + } + #anMusic-page div#anMusicSwitching { + right: 140px; + bottom: 150px; + } +} +#anMusic-page meting-js .aplayer { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-direction: reverse; + -moz-box-direction: reverse; + -o-box-direction: reverse; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + background: rgba(0,0,0,0); + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} +#anMusic-page meting-js .aplayer .aplayer-body { + width: 40%; + height: calc(100vh - 169px); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-pic { + float: none; + width: 180px; + height: 180px; + border-radius: 12px; + margin: auto; + left: 0; + right: 0; + -webkit-transition: background-image 0.5s ease-in-out; + -moz-transition: background-image 0.5s ease-in-out; + -o-transition: background-image 0.5s ease-in-out; + -ms-transition: background-image 0.5s ease-in-out; + transition: background-image 0.5s ease-in-out; + background-size: cover; + background-color: transparent !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info { + margin: 0 20px 0 20px; + border-bottom: none; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music { + text-align: center; + height: auto; + margin: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music .aplayer-author, +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music .aplayer-title { + font-size: 2rem; + font-weight: 700; + color: #fff; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc { + height: 800%; + margin-top: 10px; + mask-image: linear-gradient(to bottom, #000, #000, #000, #000, #000, #000, #000, #000, #000, #000, rgba(0,0,0,0), rgba(0,0,0,0)); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p { + font-size: 20px; + line-height: 20px !important; + height: 20px !important; + margin: 20px 0 !important; + color: #fff; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p.aplayer-lrc-current { + min-height: 20px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc::after, +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc::before { + display: none; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller { + position: fixed; + max-width: 1500px; + margin: auto; + left: 0; + right: 0; + bottom: 50px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0 160px 0 150px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 6px; + border-radius: 4px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 6px; + border-radius: 4px; + background: var(--anzhiyu-white) !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + width: 20px; + height: 20px; + margin-top: -7px; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; + background: #fff !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 6px; + border-radius: 4px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time { + position: absolute; + width: 100%; + bottom: 21px; + height: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-volume-wrap .aplayer-volume-bar-wrap { + bottom: 0; + right: -5px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon { + width: 2rem; + height: 2rem; + margin-left: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { + fill: var(--anzhiyu-white); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop { + margin-right: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + margin-right: 18px; + margin-top: -8px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-back { + position: absolute; + left: 0; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-play { + position: absolute; + left: 40px; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-forward { + position: absolute; + left: 80px; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-menu { + display: none; +} +#anMusic-page meting-js .aplayer .aplayer-list { + width: 60%; + height: 100%; +} +#anMusic-page meting-js .aplayer ol { + padding-right: 25px; +} +#anMusic-page meting-js .aplayer ol > li { + border-top: 1px solid transparent; + font-size: 14px; +} +#anMusic-page meting-js .aplayer ol > li:hover { + background: rgba(255,255,255,0.2); + border-radius: 6px; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light { + background: rgba(255,255,255,0.2); + border-radius: 6px; + padding: 20px 15px; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light span.aplayer-list-title { + font-weight: bolder; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light .aplayer-list-cur { + display: none; +} +#anMusic-page meting-js .aplayer ol > li span { + color: var(--anzhiyu-white); +} +#anMusic-page meting-js .aplayer ol > li span.aplayer-list-author { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +@media screen and (max-width: 768px) { + body[data-type="music"] #rightside { + display: none; + } + body[data-type="music"] #content-inner, + body[data-type="music"] #page { + z-index: auto; + } + #anMusic-page meting-js .aplayer .aplayer-list { + position: fixed; + z-index: 1002; + width: 100%; + bottom: -88%; + left: 0; + background: var(--sidebar-bg); + height: auto; + border-radius: 15px 15px 0px 0px; + padding: 15px 0px; + } + #anMusic-page meting-js .aplayer .aplayer-list.aplayer-list-hide { + bottom: 0% !important; + } + #anMusic-page meting-js .aplayer .aplayer-list ol { + max-height: 60vh !important; + padding-right: 0px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 0 10px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span { + color: var(--font-color); + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span.aplayer-list-title { + width: 30%; + max-width: 55%; + width: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span.aplayer-list-author { + position: absolute; + right: 10px; + width: auto; + max-width: 35%; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light { + background: #33a673; + padding: 5px 20px; + border-radius: 10px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light span { + color: #fff; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light span.aplayer-list-author { + right: 15px; + } + #anMusic-page meting-js .aplayer .aplayer-body { + width: 100%; + position: fixed; + margin: auto; + left: 0; + right: 0; + top: 100px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc { + margin-top: 40px; + height: auto; + max-height: 200%; + min-height: 100%; + mask-image: linear-gradient(to bottom, #000, #000, #000, #000, rgba(0,0,0,0), rgba(0,0,0,0)); + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p.aplayer-lrc-current { + color: #33a673; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller { + width: 100%; + bottom: 100px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-volume-wrap { + left: -66px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap { + bottom: 0px; + right: 7px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0 30px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time { + bottom: -40px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + position: absolute; + width: 100%; + margin-right: 0; + margin-top: -33px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner .aplayer-dtime { + position: absolute; + right: 30px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner .aplayer-ptime { + position: absolute; + left: 35px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-back { + margin: auto; + right: 110px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-play { + margin: auto; + right: 0; + left: 0; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-forward { + margin: auto; + left: 110px; + right: 0; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-order { + position: absolute; + left: 22px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-loop { + position: absolute; + right: 25px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-menu { + display: inline; + position: absolute; + right: 25px; + top: -90px; + } +} +.reward #con { + width: 350px; + height: 85px; + position: relative; + border-radius: 4px; +} +.reward #TA-con { + width: 157px; + height: 50px; + background-color: #f25d8e; + -webkit-box-shadow: 0 4px 4px rgba(255,112,159,0.3); + box-shadow: 0 4px 4px rgba(255,112,159,0.3); + position: absolute; + top: 50%; + left: 10%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + border-radius: 4px; + cursor: pointer; +} +@media screen and (max-width: 768px) { + .reward #TA-con { + width: 125px; + left: 54px; + } +} +.reward #TA-con:hover { + background-color: #ff6b9a; +} +.reward #text-con { + width: 100px; + height: 100%; + margin: 0 auto; + position: relative; +} +.reward #linght { + width: 0; + height: 0; + position: absolute; + top: 36%; + left: 4px; + border-color: transparent; + border-style: solid; + border-width: 10px; + border-top: 10px solid #fff; + border-radius: 4px; + -webkit-transform: rotate(-55deg); + -moz-transform: rotate(-55deg); + -o-transform: rotate(-55deg); + -ms-transform: rotate(-55deg); + transform: rotate(-55deg); +} +.reward #linght::after { + position: absolute; + top: -13px; + left: -11px; + content: ""; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 10px; + border-top: 10px solid #fff; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + border-radius: 4px; +} +.reward #TA { + float: right; + line-height: 50px; + font-size: 15px; + color: #fff; +} +.reward #tube-con { + width: 157px; + height: 55px; + position: absolute; + right: -5px; + top: 15px; +} +.reward svg { + width: 100%; + height: 100%; +} +.reward #mask { + width: 0px; + height: 100%; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +.reward #mask svg { + width: 157px; + height: 55px; +} +.reward #TA-con:hover + #tube-con > #mask { + width: 157px; +} +.reward #TA-con:hover + #tube-con > #orange-mask { + -webkit-animation: move1 0.5s linear 0.2s infinite; + -moz-animation: move1 0.5s linear 0.2s infinite; + -o-animation: move1 0.5s linear 0.2s infinite; + -ms-animation: move1 0.5s linear 0.2s infinite; + animation: move1 0.5s linear 0.2s infinite; +} +.reward #TA-con:hover + #tube-con > #orange-mask svg { + -webkit-animation: movetwo 0.5s linear 0.2s infinite; + -moz-animation: movetwo 0.5s linear 0.2s infinite; + -o-animation: movetwo 0.5s linear 0.2s infinite; + -ms-animation: movetwo 0.5s linear 0.2s infinite; + animation: movetwo 0.5s linear 0.2s infinite; +} +.reward #orange-mask { + width: 18px; + height: 100%; + overflow: hidden; + position: absolute; + left: -15px; + top: 0px; +} +.reward #orange-mask svg { + position: absolute; + top: 0; + left: 15px; + width: 157px; + height: 55px; +} +.reward #people { + position: absolute; + right: 10px; + top: 4px; + font-size: 12px; + font-family: "雅黑"; + color: #aaa; +} +.reward #people > b { + color: #777; +} +@-moz-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-webkit-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-o-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-moz-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@-webkit-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@-o-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +#tag #tag-page-tags { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; +} +#tag #tag-page-tags a { + line-height: 1.6; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-fontcolor) !important; + padding: 0.1rem 0.5rem; + margin: 0.25rem; + border-radius: 8px; + border: var(--style-border-always); +} +#tag #tag-page-tags a.selected { + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-theme); + border: var(--style-border-none); +} +#tag #tag-page-tags a.select .tagsPageCount { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); +} +#post .tag_share .post-meta__box__tags span.tagsPageCount, +#tag-page-tags .tagsPageCount { + padding: 4px 6px; + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + min-width: 22.5px; + display: inline-block; + border-radius: 4px; + line-height: 0.6rem; + text-align: center; + font-size: 0.7rem; + color: var(--anzhiyu-fontcolor); + margin-left: 4px; +} +#tag #tag-page-tags a:hover .tagsPageCount, +#post .tag_share .post-meta__box__tags:hover span.tagsPageCount { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); +} +#tag #tag-page-tags a { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-size: 0.9em; +} +#tag #tag-page-tags a:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-theme); + border: var(--style-border-none); +} +span.tags-punctuation, +span.categoryes-punctuation { + margin-right: 4px; +} +span.tags-punctuation .icon-biaoqian, +span.categoryes-punctuation .icon-biaoqian { + font-size: 13px; +} +.tagsPageCount { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; +} +[data-theme="light"] #post .tag_share .post-meta__box__tags span.tagsPageCount { + background-color: transparent; + color: #fff; +} +[data-theme="light"] #post .tag_share .post-meta__box__categoryes span.categoryesPageCount { + background-color: transparent; + color: #fff; +} +#post .tag_share .post-meta__box__categoryes span.categoryesPageCount { + padding: 4px 6px; + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + min-width: 22.5px; + display: inline-block; + border-radius: 4px; + line-height: 0.6rem; + text-align: center; + font-size: 0.7rem; + color: var(--anzhiyu-fontcolor); + margin-left: 4px; +} +.post-meta__box__categories { + border-radius: 12px; +} +.post-meta__box a { + color: var(--anzhiyu-white); + border: none; +} +[data-theme="dark"] .post-meta__box a { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); +} +[data-theme="dark"] .post-reward .reward-button, +[data-theme="dark"] .reward-link.mode { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); +} +.post-meta__box__tag-list a:nth-child(5n) { + background-color: #4a4a4a; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 1) { + background-color: #ff5e5c; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 2) { + background-color: #ffbb50; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 3) { + background-color: #1ac756; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 4) { + background-color: #19b5fe; + color: #fff; +} +.post-meta__box__tag-list a:hover { + background-color: var(--anzhiyu-main); + color: #fff; +} +[data-theme="dark"] .post-meta__box__tag-list a:hover { + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n) { + background-color: #4a4a4a; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 1) { + background-color: #1ac756; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 2) { + background-color: #ffbb50; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 3) { + background-color: #19b5fe; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 4) { + background-color: #ff5e5c; + color: #fff; +} +body[data-type="tags"] #page, +body[data-type="categories"] #page { + border-radius: 12px; +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #page #tag, + body[data-type="categories"] #page #tag { + padding: 0px 15px 20px; + } + body[data-type="tags"] #page .page-title, + body[data-type="categories"] #page .page-title { + margin: 8px 0 0px; + } +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #body-wrap .layout, + body[data-type="categories"] #body-wrap .layout { + padding: 0 20px 15px; + } +} +body[data-type="tags"] #tag #tag-page-tags, +body[data-type="categories"] #tag #tag-page-tags { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +body[data-type="tags"] #tag #tag-page-tags a, +body[data-type="categories"] #tag #tag-page-tags a { + font-size: 1.4rem; + margin: 0.3rem 0.65rem; +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #tag #tag-page-tags a, + body[data-type="categories"] #tag #tag-page-tags a { + font-size: 1.8rem; + margin: 0.6rem 0.8rem; + } +} +.tag-cloud-list a { + display: inline-block; + padding: 0 8px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.tag-cloud-list a:hover { + color: #425aef !important; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +@media screen and (max-width: 768px) { + .tag-cloud-list a { + zoom: 0.85; + } +} +.tag-cloud-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .tag-cloud-title { + font-size: 2em; + } +} +h1.page-title + .tag-cloud-list { + text-align: left; +} +@media screen and (min-width: 1201px) and (max-width: 768px) { + #recent-posts>.recent-post-item { + width: 100%; + } + #recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .tags > .article-meta__separator { + display: none; + } +} +#error-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + margin-top: 1rem; + position: relative; +} +@media screen and (max-width: 768px) { + #error-wrap { + margin-top: 0; + } +} +#error-wrap .error-content { + -webkit-box-shadow: none !important; + box-shadow: none !important; + border-radius: 12px; + background: var(--anzhiyu-card-bg) !important; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 0px 1rem; + height: 22rem; + max-width: 800px; + border-radius: 5px; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + border: var(--style-border-always); + position: relative; + width: 100%; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content { + -webkit-box-orient: vertical; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 0px; + height: 25rem; + width: 100%; + } +} +#error-wrap .error-content .error-img { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + height: 90%; + width: 600px; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + background-color: #307af6; + background-position: center center; + background-size: cover; + height: 100%; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-img { + -webkit-box-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + width: 100%; + border-radius: 12px; + } +} +#error-wrap .error-content .error-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + padding: 0.5rem; + text-align: center; + font-size: 14px; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-info { + -webkit-box-flex: 1.1; + -webkit-box-flex: 1.1; + -moz-box-flex: 1.1; + -o-box-flex: 1.1; + box-flex: 1.1; + -webkit-flex: 1.1 1 0%; + -ms-flex: 1.1 1 0%; + flex: 1.1 1 0%; + width: 100%; + padding-bottom: 2rem; + } +} +#error-wrap .error-content .error-info .error_title { + font-size: 9em; + line-height: 1; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-info .error_title { + font-size: 4rem; + } +} +#error-wrap .error-content .error-info .error_subtitle { + word-break: break-word; + font-size: 1.6em; + -webkit-line-clamp: 2; +} +#error-wrap .error-content .error-info a { + display: inline-block; + margin-top: 0.5rem; + padding: 0.3rem 1.5rem; + background: var(--btn-bg); + color: var(--btn-color); +} +#error-wrap .error-content .error-info a i { + padding-right: 0.3rem; +} +.button--animated { + border-radius: 8px !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: relative; + z-index: 1; + -webkit-transition: color 1s ease 0s; + -moz-transition: color 1s ease 0s; + -o-transition: color 1s ease 0s; + -ms-transition: color 1s ease 0s; + transition: color 1s ease 0s; +} +#body-wrap .error-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 1rem; + padding-top: 0px; + position: relative; +} +#body-wrap .error-box .aside-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + margin: 1rem; + max-width: 100%; +} +@media screen and (max-width: 768px) { + #body-wrap .error-box .aside-list { + margin: 0; + } +} +#body-wrap .error-box .aside-list .aside-list-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + max-width: 800px; + margin: 0 auto; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#body-wrap .error-box .aside-list .aside-list-item { + padding: 0.5rem 0; + width: 49%; +} +#body-wrap .error-box .aside-list .aside-list-item .thumbnail { + overflow: hidden; + width: 100%; + height: 200px; + background: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 12px; +} +@media screen and (max-width: 768px) { + #body-wrap .error-box .aside-list .aside-list-item .thumbnail { + height: 100px; + } +} +#body-wrap .error-box .aside-list .aside-list-item img { + width: 100%; + object-fit: cover; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transition: filter 300ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 300ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 300ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 300ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 300ms ease-in 0.2s, transform 0.6s; +} +#body-wrap .error-box .aside-list .aside-list-item:hover img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + filter: brightness(0.82); +} +#body-wrap .error-box .aside-list .aside-list-item .content .title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + padding-top: 0.5rem; + font-size: 16px; + font-weight: bold; +} +#body-wrap .error-box .aside-list .aside-list-item .content time { + display: none; +} +@media screen and (max-width: 768px) { + .post #aside-content { + background: var(--anzhiyu-background); + border: none; + z-index: 99; + margin-top: -1px; + } +} +#aside-content { + width: 300px; + -webkit-animation: slide-in 0.6s 0.3s backwards; + -moz-animation: slide-in 0.6s 0.3s backwards; + -o-animation: slide-in 0.6s 0.3s backwards; + -ms-animation: slide-in 0.6s 0.3s backwards; + animation: slide-in 0.6s 0.3s backwards; +} +@media screen and (min-width: 1200px) { + #aside-content { + padding-left: 15px; + } +} +@media screen and (max-width: 1200px) { + #aside-content { + width: 100%; + padding: 20px; + } +} +@media screen and (max-width: 768px) { + #aside-content { + padding: 0 20px 20px; + } +} +#aside-content > .card-widget:first-child { + margin-top: 0; +} +@media screen and (max-width: 1200px) { + #aside-content > .card-widget:first-child { + margin-top: 20px; + } +} +@media screen and (max-width: 768px) { + #aside-content > .card-widget:first-child { + margin-top: 0px; + } +} +#aside-content .card-widget { + position: relative; + overflow: hidden; + margin-top: 20px; + padding: 20px 24px; +} +#aside-content .card-widget .author-info__bottom-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#aside-content .card-widget .author-info__bottom-group .author-info__name { + text-align: left; + font-weight: 700; + color: var(--anzhiyu-white); + font-size: 20px; + line-height: 1; + margin-bottom: 5px; + margin-top: 0; +} +#aside-content .card-widget .author-info__bottom-group .author-info__desc { + font-size: 12px; + color: var(--anzhiyu-white); + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + line-height: 1; +} +#aside-content .card-widget .author-info__description { + position: absolute; + top: 50px; + width: 100%; + left: 0; + padding: 1rem 1.2rem; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + color: var(--anzhiyu-white); +} +#aside-content .card-widget .banner-button-group .banner-button { + padding: 20px 12px; + color: var(--anzhiyu-white); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + cursor: pointer; +} +#aside-content .card-widget .banner-button-group .banner-button .anzhiyufont .anzhiyu-icon-arrow-circle-right { + font-size: 1.3rem; + margin-right: 10px; +} +#aside-content .card-widget .author-info-avatar { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#aside-content .card-widget .author-info-avatar img { + filter: blur(0) brightness(1); +} +#aside-content .card-widget .author-info-avatar .author-status { + position: absolute; + bottom: 2px; + right: 2px; + width: 33px; + height: 33px; + border-radius: 2em; + background-color: var(--anzhiyu-white); + overflow: hidden; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: 0.3s 0.2s; + -moz-transition: 0.3s 0.2s; + -o-transition: 0.3s 0.2s; + -ms-transition: 0.3s 0.2s; + transition: 0.3s 0.2s; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#aside-content .card-widget .author-info-avatar .author-status img { + width: 26px; + height: 26px; + border-radius: 0px; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +#aside-content .card-widget .card-info-social-icons { + margin: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + cursor: pointer; +} +#aside-content .card-widget .card-info-social-icons .social-icon { + margin: 0 0 0 10px; + color: var(--anzhiyu-fontcolor); + font-size: 1.4em; + cursor: pointer; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#aside-content .card-widget .card-info-social-icons .social-icon i, +#aside-content .card-widget .card-info-social-icons .social-icon svg { + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + font-size: 1rem; + width: 40px; + height: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + padding: 8px; + border-radius: 32px; +} +#aside-content .card-widget .card-info-social-icons .social-icon i:hover, +#aside-content .card-widget .card-info-social-icons .social-icon svg:hover { + background: var(--anzhiyu-secondbg); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + color: var(--anzhiyu-main); + -webkit-box-shadow: none; + box-shadow: none; +} +#aside-content .card-widget #card-info-btn { + display: block; + margin-top: 14px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + line-height: 2.4; +} +#aside-content .card-widget #card-info-btn:hover { + background-color: var(--btn-hover-color); +} +#aside-content .card-widget #card-info-btn span { + padding-left: 10px; +} +#aside-content .item-headline { + padding-bottom: 0; + margin-left: 8px; + font-size: 1em; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#aside-content .item-headline span { + margin-left: 6px; +} +@media screen and (min-width: 1200px) { + #aside-content .sticky_layout { + position: sticky; + position: -webkit-sticky; + top: 20px; + -webkit-transition: top 0.3s; + -moz-transition: top 0.3s; + -o-transition: top 0.3s; + -ms-transition: top 0.3s; + transition: top 0.3s; + } +} +#aside-content .card-tag-cloud a { + display: inline-block; + padding: 0 4px; +} +#aside-content .card-tag-cloud a:hover { + color: #425aef !important; +} +#aside-content .aside-list > span { + display: block; + margin-bottom: 10px; + text-align: center; +} +#aside-content .aside-list > .aside-list-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 6px 0; +} +#aside-content .aside-list > .aside-list-item:first-child { + padding-top: 0; +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed #f5f5f5; +} +#aside-content .aside-list > .aside-list-item:last-child { + padding-bottom: 0; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + overflow: hidden; + width: 4.2em; + height: 4.2em; +} +#aside-content .aside-list > .aside-list-item .content { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-left: 10px; + word-break: break-all; + width: 4.2em; + height: 4.2em; +} +#aside-content .aside-list > .aside-list-item .content > .name { + -webkit-line-clamp: 1; +} +#aside-content .aside-list > .aside-list-item .content > time, +#aside-content .aside-list > .aside-list-item .content > .name { + display: block; + color: var(--anzhiyu-fontcolor); + font-size: 85%; +} +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment { + color: var(--font-color); + font-size: 95%; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#aside-content .aside-list > .aside-list-item .content > .title:hover, +#aside-content .aside-list > .aside-list-item .content > .comment:hover { + color: #425aef; +} +#aside-content .aside-list > .aside-list-item.no-cover { + min-height: 4.4em; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + margin: 0; + padding: 0; + list-style: none; +} +#aside-content .card-archives .item-headline { + display: none; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 3px 10px; + color: var(--font-color); + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + background-color: var(--text-bg-hover); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +#aside-content .card-categories .card-category-list.child { + padding: 0 0 0 16px; +} +#aside-content .card-categories .card-category-list > .parent > a.expand i { + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +#aside-content .card-categories .card-category-list > .parent > a.expand + .child { + display: block; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-name { + width: 70% !important; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-count { + width: calc(100% - 70% - 20px); + text-align: right; +} +#aside-content .card-categories .card-category-list > .parent > a i { + float: right; + margin-right: -0.5em; + padding: 0.5em; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#aside-content .card-webinfo .item-headline { + display: none; +} +#aside-content .card-webinfo .webinfo .webinfo-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 2px 10px 0; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#aside-content .card-webinfo .webinfo .webinfo-item .webinfo-item-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#aside-content .card-webinfo .webinfo .webinfo-item .webinfo-item-title i { + line-height: 2; + margin-right: 6px; + width: 16px; + text-align: center; +} +#aside-content .card-webinfo .webinfo .webinfo-item div:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-right: 20px; +} +@media screen and (min-width: 901px) { + #aside-content #card-toc { + right: 0 !important; + max-height: calc(100vh - 100px); + } +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc { + position: fixed; + right: 55px; + bottom: 30px; + z-index: 100; + max-width: 380px; + max-height: calc(100% - 60px); + width: calc(100% - 80px); + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: right bottom; + -moz-transform-origin: right bottom; + -o-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + } + #aside-content #card-toc.open { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +#aside-content #card-toc .toc-percentage { + display: none; + float: right; + margin-top: -9px; + color: #a9a9a9; + font-style: italic; + font-size: 140%; +} +#aside-content #card-toc .toc-content { + overflow-y: scroll; + overflow-y: overlay; + margin: 0 -24px; + max-height: calc(100vh - 120px); + width: calc(100% + 48px); +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc .toc-content { + max-height: calc(100vh - 140px); + } +} +#aside-content #card-toc .toc-content > * { + margin: 0 20px !important; +} +#aside-content #card-toc .toc-content > * > .toc-item > .toc-child { + margin-left: 10px; + padding-left: 10px; +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: none; +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: block !important; + } +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child { + display: block; +} +#aside-content #card-toc .toc-content ol, +#aside-content #card-toc .toc-content li { + list-style: none; +} +#aside-content #card-toc .toc-content > ol { + padding: 0 !important; +} +#aside-content #card-toc .toc-content ol { + margin: 0; + padding-left: 18px; +} +#aside-content #card-toc .toc-content .toc-link { + display: block; + margin: 4px 0; + padding: 1px 6px; + color: var(--toc-link-color); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#aside-content #card-toc .toc-content .toc-link:hover { + color: var(--anzhiyu-lighttext); +} +#aside-content #card-toc .toc-content .toc-link.active { + background: #425aef; + color: #fff; +} +#aside-content :only-child > .card-widget { + margin-top: 0; +} +#aside-content .card-more-btn { + float: right; + color: inherit; +} +#aside-content .card-more-btn:hover { + -webkit-animation: more-btn-move 1s infinite; + -moz-animation: more-btn-move 1s infinite; + -o-animation: more-btn-move 1s infinite; + -ms-animation: more-btn-move 1s infinite; + animation: more-btn-move 1s infinite; +} +#aside-content .card-announcement .item-headline i { + color: #f00; +} +.avatar-img { + width: 118px; + height: 118px; + right: 0; + top: 0; + border-radius: 500px; + object-fit: cover; + position: absolute; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border-avatar); +} +.avatar-img img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +.site-data { + display: table; + width: 100%; + table-layout: fixed; +} +.site-data > a { + display: table-cell; +} +.site-data > a div { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.site-data > a:hover div { + color: #425aef !important; +} +.site-data > a .headline { + color: var(--font-color); +} +.site-data > a .length-num { + margin-top: -0.32em; + color: var(--text-highlight-color); + font-size: 1.2em; +} +@media screen and (min-width: 1200px) { + html.hide-aside .layout { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + html.hide-aside .layout > .aside-content { + display: none; + } + html.hide-aside .layout > div:first-child { + width: 80%; + } +} +@media screen and (max-width: 1200px) { + .aside-content { + max-width: none !important; + display: none; + } +} +@media screen and (max-width: 768px) { + .aside-content { + display: block; + } +} +.page .sticky_layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +#aside-content >.card-widget.card-info { + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); + position: relative; + padding: 0; +} +@media screen and (max-width: 768px) { + #aside-content >.card-widget.card-info { + display: none; + } +} +#aside-content >.card-widget.card-info > .card-content { + padding: 1rem 1.2rem; + min-height: 320px; + position: relative; +} +#aside-content >.card-widget.card-info::before { + background: -webkit-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -moz-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -o-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -ms-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: linear-gradient(-25deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background-size: 400%; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + content: ''; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; +} +#aside-content .card-info:hover .author-info-avatar { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +#aside-content .card-info:hover .author-info__description { + opacity: 1; + -ms-filter: none; + filter: none; +} +#aside-content .card-info:hover .author-status { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +#aside-content .card-info .author-info-avatar { + margin: 45px auto; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 118px; + height: 118px; + -webkit-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -moz-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -o-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -ms-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -webkit-transform-origin: bottom; + -moz-transform-origin: bottom; + -o-transform-origin: bottom; + -ms-transform-origin: bottom; + transform-origin: bottom; + position: relative; +} +@media screen and (max-width: 768px) { + #aside-content .card-info .author-info-avatar { + display: none; + } +} +#aside-content .card-info #author-info__sayhi { + text-align: left; + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + font-size: 12px; + margin: auto; + padding: 2px 8px; + border-radius: 12px; + width: fit-content; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#aside-content .card-info #author-info__sayhi:hover { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#aside-content .card-info .banner-button-group .banner-button { + border-radius: 35px; + background: var(--anzhiyu-white-op); +} +#aside-content .card-info .banner-button-group .banner-button:hover { + background: var(--anzhiyu-white); + color: var(--anzhiyu-black); +} +[data-theme="dark"] #aside-content > .card-info { + background: var(--anzhiyu-card-bg); +} +@media screen and (max-width: 992px) { + #aside-content > .card-info { + background-size: 100% 70%; + } +} +@-moz-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-webkit-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-o-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-moz-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +.banners-title { + top: 2.9rem; + left: 3rem; + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.banners-title-big { + font-size: 36px; + line-height: 1; + font-weight: bold; + margin-bottom: 8px; +} +.banners-title-small { + font-size: 12px; + line-height: 1; + color: var(--anzhiyu-secondtext); + margin-top: 8px; + margin-bottom: 0.5rem; +} +.banner-button { + padding: 8px 12px; + background: var(--anzhiyu-fontcolor); + border-radius: 12px; + color: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + cursor: pointer; + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); +} +.banner-button.secondary { + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + color: var(--anzhiyu-lighttext); + margin-right: 1rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container > header { + height: 0; + text-indent: -9999px; +} +#article-container > header time, +#article-container > header span { + height: 0; + display: block; +} +#article-container > header h1 { + z-index: -1; + pointer-events: none; +} +#article-container > header a { + background: none !important; + border-bottom: none !important; +} +#post-comment .comment-head { + margin-bottom: 20px; + font-size: 0.8em !important; + margin-bottom: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#post-comment .comment-head .comment-headline { + display: inline-block; + vertical-align: middle; + font-weight: 700; + font-size: 1.43em; +} +#post-comment .comment-head .comment-randomInfo { + margin-left: auto; + font-size: 13px; +} +#post-comment .comment-head .comment-switch { + display: inline-block; + float: right; + margin: 2px auto 0; + padding: 4px 16px; + width: max-content; + border-radius: 8px; + background: #f6f8fa; +} +#post-comment .comment-head .comment-switch .first-comment { + color: #425aef; +} +#post-comment .comment-head .comment-switch .second-comment { + color: #ff7242; +} +#post-comment .comment-head .comment-switch #switch-btn { + position: relative; + display: inline-block; + margin: -4px 8px 0; + width: 42px; + height: 22px; + border-radius: 34px; + background-color: #425aef; + vertical-align: middle; + cursor: pointer; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-head .comment-switch #switch-btn:before { + position: absolute; + bottom: 4px; + left: 4px; + width: 14px; + height: 14px; + border-radius: 50%; + background-color: #fff; + content: ''; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-wrap > div { + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +#post-comment .comment-wrap > div:nth-child(2) { + display: none; +} +#post-comment.move #switch-btn { + background-color: #ff7242; +} +#post-comment.move #switch-btn:before { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -o-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); +} +#post-comment.move .comment-wrap > div:first-child { + display: none; +} +#post-comment.move .comment-wrap > div:last-child { + display: block; +} +#footer { + position: relative; + background: -webkit-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -moz-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -o-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -ms-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: linear-gradient(180deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background-attachment: scroll; + background-position: bottom; + background-size: cover; +} +@media screen and (max-width: 768px) { + #footer { + z-index: 3; + margin-top: -1px; + } +} +#footer-bar { + padding: 1rem; + color: var(--anzhiyu-fontcolor); + margin-top: 1rem; + background: var(--anzhiyu-secondbg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + overflow: hidden; + z-index: 1002; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#footer-bar a:hover { + color: var(--anzhiyu-lighttext); +} +#footer-bar .footer-bar-link { + margin-top: 8px; + margin-bottom: 8px; + margin-right: 1rem; + color: var(--anzhiyu-fontcolor); + font-size: 1rem; + font-weight: bold; + white-space: nowrap; +} +#footer-bar .footer-bar-link.cc i { + margin-right: 0.7rem; + font-size: 18px; +} +#footer-bar .footer-bar-links { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + max-width: 1400px; + width: 100%; + margin: 0 auto; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + line-height: 1; +} +#footer-bar .footer-bar-links .footer-bar-left { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + min-height: 32px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-bar .footer-bar-links .footer-bar-right { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-wrap { + position: relative; + padding: 40px 20px 0; + color: var(--light-grey); + text-align: center; +} +@media screen and (max-width: 768px) { + #footer-wrap { + padding: 0; + } +} +#footer-wrap #footer_deal { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +@media screen and (max-width: 768px) { + #footer-wrap #footer_deal { + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } +} +#footer-wrap #footer_deal .deal_link { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 1rem 27px; + color: var(--anzhiyu-card-bg); + border-radius: 3rem; + width: 32px; + height: 32px; + background: var(--anzhiyu-fontcolor); + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#footer-wrap #footer_deal .deal_link:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); +} +#footer-wrap #footer_deal .footer_mini_logo { + width: 50px; + height: 50px; + object-fit: cover; + border-radius: 50%; + margin: 0 1rem; + cursor: pointer; + -webkit-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -moz-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -o-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -ms-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -webkit-user-select: none; +} +@media screen and (max-width: 768px) { + #footer-wrap #footer_deal .footer_mini_logo { + display: none; + } +} +#footer-wrap #anzhiyu-footer { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + width: 100%; + max-width: 1200px; + margin: 1rem auto; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0 2rem; +} +#footer-wrap #anzhiyu-footer .footer-group { + min-width: 120px; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group a { + margin-left: 8px; + line-height: 32px; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group i { + line-height: 1; + color: var(--anzhiyu-secondtext); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 16px; + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +#footer-wrap #anzhiyu-footer .footer-title { + color: var(--anzhiyu-secondtext); + font-size: 1rem; + text-align: left; + font-weight: 600; + margin: 1rem 0; +} +#footer-wrap #anzhiyu-footer .footer-links { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +#footer-wrap #anzhiyu-footer .footer-item { + font-size: 1rem; + line-height: 1rem; + margin: 8px 0; + color: var(--anzhiyu-fontcolor); + margin-right: auto; + overflow: hidden; + white-space: nowrap; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + max-width: 120px; + cursor: pointer; + padding: 2px 0; + text-decoration: none; +} +#footer-wrap #anzhiyu-footer .footer-item:hover { + color: var(--anzhiyu-theme); +} +#footer-wrap a { + color: var(--light-grey); +} +#footer-wrap i { + font-size: 1rem; + line-height: 1rem; + height: 1rem; +} +#footer-wrap .footer-separator { + margin: 0 4px; +} +#footer-wrap .icp-icon { + padding: 0 4px; + max-height: 1.4em; + width: auto; + vertical-align: text-bottom; +} +@media screen and (max-width: 768px) { + [data-theme=light] .post #footer { + background: -webkit-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -moz-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -o-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -ms-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: linear-gradient(180deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + } +} +#page-header { + position: relative; + width: 100%; + -webkit-transition: all 0.5s ease 0s; + -moz-transition: all 0.5s ease 0s; + -o-transition: all 0.5s ease 0s; + -ms-transition: all 0.5s ease 0s; + transition: all 0.5s ease 0s; +} +#page-header #nav { + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.full_page { + height: 100vh; + background-attachment: fixed; + border-radius: 0; +} +#page-header #site-title, +#page-header #site-subtitle, +#page-header #scroll-down .scroll-down-effects { + text-align: center; + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + line-height: 1.5; +} +#page-header #site-title { + margin: 0; + color: var(--white); + font-size: 1.85em; +} +@media screen and (min-width: 768px) { + #page-header #site-title { + font-size: 2.85em; + } +} +#page-header #site-subtitle { + color: var(--light-grey); + font-size: 1.15em; +} +@media screen and (min-width: 768px) { + #page-header #site-subtitle { + font-size: 1.72em; + } +} +#page-header #site_social_icons { + display: none; + margin: 0 auto; + width: 300px; + text-align: center; +} +@media screen and (max-width: 768px) { + #page-header #site_social_icons { + display: block; + } +} +#page-header #site_social_icons .social-icon { + margin: 0 10px; + color: var(--light-grey); + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-size: 1.43em; +} +#page-header #scroll-down { + position: absolute; + bottom: 0; + width: 100%; + cursor: pointer; + z-index: 11; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#page-header #scroll-down .scroll-down-effects { + position: relative; + width: 100%; + color: var(--light-grey); + font-size: 30px; +} +#page-header.not-home-page { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.not-home-page { + height: 280px; + } +} +#page-header #page-site-info { + position: absolute; + top: 200px; + padding: 0 10px; + width: 100%; +} +@media screen and (max-width: 768px) { + #page-header #page-site-info { + top: 140px; + } +} +#page-header.post-bg { + height: 31.25rem; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + overflow: hidden; + background-color: transparent; +} +#page-header.post-bg #nav { + -webkit-transition: all 0.5s, border 0.3s; + -moz-transition: all 0.5s, border 0.3s; + -o-transition: all 0.5s, border 0.3s; + -ms-transition: all 0.5s, border 0.3s; + transition: all 0.5s, border 0.3s; +} +#page-header.post-bg .post-meta:has(.bldbanner), +#page-header.post-bg .post-meta:has(.bili-banner), +#page-header.post-bg .post-meta:has(.blqbanner) { + pointer-events: all; +} +#page-header.post-bg .bili-banner { + margin-top: 0 !important; +} +#page-header.post-bg #post-info:has(.bldbanner), +#page-header.post-bg #post-info:has(.bili-banner), +#page-header.post-bg #post-info:has(.blqbanner) { + pointer-events: none; +} +#page-header.post-bg:has(.bldbanner), +#page-header.post-bg:has(.blqbanner) { + height: 15rem; +} +#page-header.post-bg:has(.bldbanner) img, +#page-header.post-bg:has(.blqbanner) img { + border-radius: 0px; +} +#page-header.post-bg:has(.bili-banner) { + height: 11rem; +} +#page-header.post-bg:has(.bili-banner) img { + border-radius: 0px; +} +#page-header.post-bg #post-top-cover { + width: 70%; + height: 100%; + position: relative; + margin: 0 -20% 0 auto; + overflow: hidden; + margin-bottom: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + will-change: transform; + filter: blur(10px) brightness(60%); + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; + -webkit-transition: filter 0s; + -moz-transition: filter 0s; + -o-transition: filter 0s; + -ms-transition: filter 0s; + transition: filter 0s; + margin: auto; + width: auto; +} +#page-header.post-bg #post-top-cover::after { + display: none; +} +#page-header.post-bg #post-top-cover img { + border-radius: 0; +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover { + margin: 0 0 0 auto; + -webkit-transform: rotate(0deg) translateY(0) scale(1); + -moz-transform: rotate(0deg) translateY(0) scale(1); + -o-transform: rotate(0deg) translateY(0) scale(1); + -ms-transform: rotate(0deg) translateY(0) scale(1); + transform: rotate(0deg) translateY(0) scale(1); + filter: blur(0px); + width: 100%; + position: absolute; + height: 100vh; + z-index: 1; + } +} +#page-header.post-bg #post-top-cover::after { + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + -webkit-box-shadow: 110px -130px 300px 60px var(--anzhiyu-bar-background) inset; + box-shadow: 110px -130px 300px 60px var(--anzhiyu-bar-background) inset; +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover::after { + -webkit-box-shadow: 0 0 205px 59px var(--anzhiyu-main) inset; + box-shadow: 0 0 205px 59px var(--anzhiyu-main) inset; + } +} +#page-header.post-bg #post-top-cover #post-top-bg { + width: 100%; + height: 100%; + object-fit: cover; + min-width: 50vw; + min-height: 20rem; +} +@media screen and (min-width: 768px) { + #page-header.post-bg #post-top-cover #post-top-bg { + -webkit-animation: slide-in 0.6s 0.3s backwards; + -moz-animation: slide-in 0.6s 0.3s backwards; + -o-animation: slide-in 0.6s 0.3s backwards; + -ms-animation: slide-in 0.6s 0.3s backwards; + animation: slide-in 0.6s 0.3s backwards; + } +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover #post-top-bg { + min-height: 15rem !important; + height: 100% !important; + opacity: 1 !important; + -ms-filter: none !important; + filter: none !important; + } +} +#page-header.post-bg #nav { + backdrop-filter: none; + background: transparent; + border-bottom: none; +} +#page-header.post-bg.nav-fixed #nav { + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +@media screen and (max-width: 768px) { + #page-header.post-bg.nav-fixed #nav { + border-bottom: none; + } +} +@media screen and (max-width: 768px) { + #page-header.post-bg { + margin-bottom: -12px; + -webkit-transition: 0s !important; + -moz-transition: 0s !important; + -o-transition: 0s !important; + -ms-transition: 0s !important; + transition: 0s !important; + min-height: 450px; + } + #page-header.post-bg.nav-fixed #nav { + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + } +} +#page-header #post-info { + position: absolute; + top: 0; + left: calc((100% - 1400px + 3rem) / 2); + width: calc(100% - (100% - 1400px + 3rem)); + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + z-index: 3; +} +@media screen and (min-width: 768px) { + #page-header #post-info { + --anzhiyu-header-translateY: 0; + -webkit-animation: post-info-slide-in 0.6s 0.3s backwards; + -moz-animation: post-info-slide-in 0.6s 0.3s backwards; + -o-animation: post-info-slide-in 0.6s 0.3s backwards; + -ms-animation: post-info-slide-in 0.6s 0.3s backwards; + animation: post-info-slide-in 0.6s 0.3s backwards; + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -webkit-transform-origin: left top; + -moz-transform-origin: left top; + -o-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; + will-change: transform; + } +} +@media screen and (max-width: 1400px) { + #page-header #post-info { + padding: 0 3.5rem; + width: 100%; + left: 0; + } +} +@media screen and (max-width: 768px) { + #page-header #post-info { + padding: 11rem 6% 0; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } +} +#page-header.not-top-img { + margin-bottom: 10px; + height: 60px; + background: 0; +} +#page-header.not-top-img #nav #menus .menus_item:hover > a { + background: var(--anzhiyu-main); +} +#page-header.not-top-img #travellings_button::after { + background: var(--anzhiyu-main) !important; +} +#page-header.not-top-img #nav #blog_name .back-home-button:hover, +#page-header.not-top-img #nav #blog_name #site-name:hover, +#page-header.not-top-img #nav #nav-right .nav-button a:hover, +#page-header.not-top-img #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#page-header.not-top-img .post-meta-categories { + background: rgba(0,0,0,0.2); +} +#page-header.not-top-img #nav #blog_name a, +#page-header.not-top-img #nav .mask-name-container a, +#page-header.not-top-img #nav #menus a, +#page-header.not-top-img #nav #nav-right .nav-button a, +#page-header.not-top-img #nav #nav-right #toggle-menu a { + color: var(--font-color); + text-shadow: none; +} +#page-header.not-top-img #nav #center-console + label i { + background: var(--font-color); +} +#page-header.nav-fixed #nav { + position: fixed; + z-index: 91; + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + top: 0; +} +#page-header.nav-fixed #nav #toggle-menu { + color: var(--font-color); + text-shadow: none; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +#page-header.nav-fixed #nav #blog_name a, +#page-header.nav-fixed #nav .mask-name-container a, +#page-header.nav-fixed #nav #menus a, +#page-header.nav-fixed #nav #nav-right .nav-button a, +#page-header.nav-fixed #nav #nav-right #toggle-menu a { + color: var(--font-color); + text-shadow: none; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +#page-header.nav-fixed #name-container { + z-index: 101; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 10px; +} +#page-header.nav-fixed #name-container #page-name { + display: inline; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + line-height: 2; +} +@media screen and (min-width: 768px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 15.5rem; + } +} +@media screen and (min-width: 900px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 25.5rem; + } +} +@media screen and (min-width: 1200px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 35.5rem; + } +} +@media screen and (min-width: 2000px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 45.5rem; + } +} +#page-header.nav-fixed #nav #menus { + z-index: 100; +} +#page-header.nav-fixed #nav #menus div.menus_items { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + height: 40px; + margin: auto 0; + -webkit-transform: translateY(-60px); + -moz-transform: translateY(-60px); + -o-transform: translateY(-60px); + -ms-transform: translateY(-60px); + transform: translateY(-60px); + will-change: transform; +} +#page-header.nav-fixed.nav-visible #page-name { + z-index: 100; + top: 60px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.nav-fixed.nav-visible #nav #menus div.menus_items { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + will-change: transform; +} +#page h1.page-title { + margin: 8px 0 20px; +} +#post > #post-info { + margin-bottom: 30px; +} +#post > #post-info .post-title { + border-bottom: 1px solid var(--light-grey); + color: var(--text-highlight-color); +} +#post > #post-info .post-title .post-edit-link { + float: right; +} +#post > #post-info #post-meta, +#post > #post-info #post-meta a { + color: #78818a; +} +@media screen and (max-width: 768px) { + #post-info:after { + display: none; + -webkit-transition: 0; + -moz-transition: 0; + -o-transition: 0; + -ms-transition: 0; + transition: 0; + } +} +#post-info .post-title { + color: var(--white); + line-height: 1.5; + font-weight: 700; + font-size: 3.3rem; + text-align: left; + margin: 1rem 0 1rem 0; + -webkit-line-clamp: 2; + padding: 0; + overflow: hidden; +} +@media screen and (max-width: 768px) { + #post-info .post-title { + font-size: 1.5rem; + -webkit-line-clamp: 3; + margin: 0.2rem auto !important; + text-align: center; + z-index: 4; + } +} +#post-info .post-title .post-edit-link { + padding-left: 10px; +} +#post-info #post-meta { + color: var(--light-grey); + font-size: 95%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 50rem; + max-width: 100%; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +@media screen and (min-width: 768px) { + #post-info #post-meta > .meta-secondline > span:first-child { + display: none; + } +} +@media screen and (max-width: 768px) { + #post-info #post-meta { + font-size: 90%; + z-index: 4; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } + #post-info #post-meta > .meta-firstline, + #post-info #post-meta > .meta-secondline { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + font-size: 90%; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } +} +#post-info #post-meta .post-meta-separator { + margin: 0 8px; +} +#post-info #post-meta .post-meta-icon { + margin-right: 4px; +} +#post-info #post-meta .post-meta-label { + margin-right: 4px; +} +#post-info #post-meta .post-meta-categories a:not([data-fancybox="gallery"]) { + font-weight: 500; + text-decoration: none; + padding: 0 0.2em; +} +#post-info #post-meta .post-meta-categories a:not([data-fancybox="gallery"]):hover { + color: var(--anzhiyu-white); + background-color: var(--anzhiyu-main); + border-radius: 4px; +} +#post-info #post-meta a { + color: var(--light-grey); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +#post-info #post-meta a:hover { + color: #425aef; + text-decoration: underline; +} +#nav { + position: fixed; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 0; + z-index: 90; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 calc((100% - 1400px + 3rem) / 2); + width: 100%; + height: 60px; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + outline: 1px solid var(--anzhiyu-none); +} +#nav i { + font-size: 1.2rem; + font-weight: bold; +} +@media screen and (max-width: 768px) { + #nav { + padding: 0 16px; + } +} +#nav #toggle-menu { + display: none; + padding: 2px 0 0 6px; + vertical-align: top; + border-radius: 50px; +} +#nav #toggle-menu:hover { + color: var(--white) !important; +} +#nav #blog_name a, +#nav .mask-name-container a, +#nav #menus a, +#nav #nav-right .nav-button a, +#nav #nav-right #toggle-menu a { + color: var(--light-grey); +} +#nav #blog_name a:hover, +#nav .mask-name-container a:hover, +#nav #menus a:hover, +#nav #nav-right .nav-button a:hover, +#nav #nav-right #toggle-menu a:hover { + color: var(--white); +} +#nav #site-name { + font-weight: bold; + cursor: pointer; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; +} +#nav .menus_items { + display: inline; + font-size: 1.3em; +} +#nav .menus_items .menus_item { + padding: 0 0.4rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: auto; + position: relative; + border-radius: 30px; +} +#nav .menus_items .menus_item:first-child .menus_item_child::after { + position: absolute; + top: -60px; + left: 0; + width: 50%; + height: 60px; + content: ""; +} +#nav .menus_items .menus_item:last-child .menus_item_child::after { + position: absolute; + top: -60px; + right: 0; + width: 50%; + height: 60px; + content: ""; +} +#nav .menus_items .menus_item:hover .menus_item_child { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + opacity: 1; + -ms-filter: none; + filter: none; + pointer-events: all; + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); +} +#nav .menus_items .menus_item:hover > a > i:last-child { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +#nav .menus_items .menus_item > a > i:last-child { + padding: 4px; + -webkit-transition: -webkit-transform 0.2s; + -moz-transition: -moz-transform 0.2s; + -o-transition: -o-transform 0.2s; + -ms-transition: -ms-transform 0.2s; + transition: transform 0.2s; +} +#nav .menus_items .menus_item .menus_item_child { + position: absolute; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + width: max-content; + border-radius: 5px; + top: 35px; + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); + border: var(--style-border); + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + background-color: var(--anzhiyu-card-bg); + border-radius: 50px; + right: auto; + left: auto; + padding: 6px 4px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + line-height: 35px; + -webkit-transform: translateY(-10px) scale(0); + -moz-transform: translateY(-10px) scale(0); + -o-transform: translateY(-10px) scale(0); + -ms-transform: translateY(-10px) scale(0); + transform: translateY(-10px) scale(0); + -webkit-transform-origin: top; + -moz-transform-origin: top; + -o-transform-origin: top; + -ms-transform-origin: top; + transform-origin: top; + pointer-events: none; + margin-top: 8px; +} +#nav .menus_items .menus_item .menus_item_child:before { + position: absolute; + top: -12px; + left: 0; + width: 100%; + height: 16px; + content: ''; +} +#nav .menus_items .menus_item .menus_item_child li { + list-style: none; +} +#nav .menus_items .menus_item .menus_item_child li:hover { + background: var(--text-bg-hover); +} +#nav .menus_items .menus_item .menus_item_child li:first-child { + border-top-left-radius: 50px; + border-top-right-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li:last-child { + border-bottom-right-radius: 50px; + border-bottom-left-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li a { + display: inline-block; + padding: 0.5625rem 1rem; + width: 100%; + color: var(--font-color) !important; + text-shadow: none !important; +} +#nav .menus_items .menus_item .menus_item_child li a:hover { + color: var(--anzhiyu-white) !important; + padding: 0.125rem 1.25rem; + -webkit-transform: scale(1) !important; + -moz-transform: scale(1) !important; + -o-transform: scale(1) !important; + -ms-transform: scale(1) !important; + transform: scale(1) !important; + background: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + -webkit-transform: scale(1) !important; + -moz-transform: scale(1) !important; + -o-transform: scale(1) !important; + -ms-transform: scale(1) !important; + transform: scale(1) !important; +} +#nav.hide-menu #toggle-menu { + display: inline-block !important; +} +#nav.hide-menu #toggle-menu .site-page { + font-size: inherit; + width: 30px; + height: 30px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#nav.hide-menu #toggle-menu .site-page i { + font-size: 1.35rem; +} +#nav.hide-menu .menus_items { + display: none; +} +#nav.hide-menu #search-button span { + display: none; +} +#nav #search-button { + display: inline; + padding: 0 0 0 14px; +} +#nav .site-page { + position: relative; + padding-bottom: 6px; + font-size: 0.78em; + cursor: pointer; +} +#nav .site-page:hover { + color: var(--anzhiyu-white) !important; +} +.main-hero-waves-area { + width: 100%; + position: absolute; + left: 0; + bottom: -11px; + z-index: 5; + pointer-events: none; +} +.waves-area .waves-svg { + width: 100%; + height: 3.75rem; +} +.parallax > use { + -webkit-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -moz-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -o-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -ms-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + will-change: transform; +} +.parallax > use:nth-child(1) { + -webkit-animation-delay: -2s; + -moz-animation-delay: -2s; + -o-animation-delay: -2s; + -ms-animation-delay: -2s; + animation-delay: -2s; + -webkit-animation-duration: 7s; + -moz-animation-duration: 7s; + -o-animation-duration: 7s; + -ms-animation-duration: 7s; + animation-duration: 7s; + fill: rgba(247,249,254,0.741); +} +.parallax > use:nth-child(2) { + -webkit-animation-delay: -3s; + -moz-animation-delay: -3s; + -o-animation-delay: -3s; + -ms-animation-delay: -3s; + animation-delay: -3s; + -webkit-animation-duration: 10s; + -moz-animation-duration: 10s; + -o-animation-duration: 10s; + -ms-animation-duration: 10s; + animation-duration: 10s; + fill: rgba(247,249,254,0.51); +} +.parallax > use:nth-child(3) { + -webkit-animation-delay: -4s; + -moz-animation-delay: -4s; + -o-animation-delay: -4s; + -ms-animation-delay: -4s; + animation-delay: -4s; + -webkit-animation-duration: 13s; + -moz-animation-duration: 13s; + -o-animation-duration: 13s; + -ms-animation-duration: 13s; + animation-duration: 13s; + fill: rgba(247,249,254,0.212); +} +.parallax > use:nth-child(4) { + -webkit-animation-delay: -5s; + -moz-animation-delay: -5s; + -o-animation-delay: -5s; + -ms-animation-delay: -5s; + animation-delay: -5s; + -webkit-animation-duration: 20s; + -moz-animation-duration: 20s; + -o-animation-duration: 20s; + -ms-animation-duration: 20s; + animation-duration: 20s; + fill: #f7f9fe; +} +[data-theme="dark"] .parallax > use:nth-child(1) { + fill: rgba(24,23,29,0.784); +} +[data-theme="dark"] .parallax > use:nth-child(2) { + fill: rgba(24,23,29,0.502); +} +[data-theme="dark"] .parallax > use:nth-child(3) { + fill: rgba(24,23,29,0.243); +} +[data-theme="dark"] .parallax > use:nth-child(4) { + fill: #000; +} +#post-firstinfo { + text-align: left; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + white-space: nowrap; + -webkit-user-select: none; +} +@media screen and (max-width: 768px) { + #post-firstinfo { + z-index: 4; + } +} +#post-firstinfo .meta-firstline { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + height: 32px; +} +#post-firstinfo .meta-firstline a.post-meta-original { + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + padding: 0 0.7rem; + font-size: 0.9rem; + margin: auto; + border-radius: 8px; + font-weight: bold; + height: 32px; + line-height: 32px; + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#post-firstinfo .meta-firstline span.post-meta-categories { + color: var(--anzhiyu-white); + font-size: 0.9rem; + margin: auto; + font-weight: bold; + height: 32px; + line-height: 32px; + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#post-firstinfo .meta-firstline span.post-meta-categories i { + display: none; +} +#post-firstinfo .meta-firstline span.post-meta-categories a.post-meta-categories { + border-radius: 8px; + padding: 0 0.7rem; + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + font-size: 0.9rem; + width: 100%; + height: 100%; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-left: 0.4rem; +} +#post-firstinfo .meta-firstline .article-meta.tags { + margin-left: 1.2rem; +} +@media screen and (max-width: 768px) { + #post-firstinfo .meta-firstline .article-meta.tags { + display: none; + } +} +#post-firstinfo .meta-firstline .article-meta__tags { + color: var(--anzhiyu-white); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + margin-right: 8px; +} +#post-firstinfo .meta-firstline .anzhiyu-icon-hashtag:before { + font-size: 17px; +} +#post-firstinfo .meta-firstline .anzhiyu-icon-location-dot { + margin-right: 4px; +} +#post #post-info #post-firstinfo .meta-firstline a.post-meta-original { + background: var(--anzhiyu-black); +} +#post #post-info #post-firstinfo .meta-firstline .article-meta__tags { + color: var(--anzhiyu-black); +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + z-index: 10; + } + .post-bg:has(.bldbanner) #post-info:after, + .post-bg:has(.bili-banner) #post-info:after, + .post-bg:has(.blqbanner) #post-info:after { + -webkit-box-shadow: 0px -214px 287px 45px var(--anzhiyu-black-op) inset; + box-shadow: 0px -214px 287px 45px var(--anzhiyu-black-op) inset; + } + .waves-area .waves-svg { + height: 40px; + min-height: 40px; + } + .main-hero-waves-area { + display: none; + visibility: hidden; + } +} +@-moz-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-webkit-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-o-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-moz-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@-webkit-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@-o-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +#random-banner { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 76%; + background: var(--anzhiyu-card-bg); + margin-bottom: 0.5rem; + border: var(--style-border); + border-radius: 12px; + overflow: hidden; + position: relative; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow: hidden; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + will-change: transform; +} +#random-banner:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#random-banner:hover #random-hover { + opacity: 1; + -ms-filter: none; + filter: none; + padding-left: 2rem; + background: var(--anzhiyu-theme-op-deep); + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background-size: 200%; + cursor: pointer; +} +#random-banner #skills-tags-group-all .tags-group-wrapper { + margin-top: 7rem; +} +#random-banner #skills-tags-group-all { + -webkit-transform: rotate(-30deg); + -moz-transform: rotate(-30deg); + -o-transform: rotate(-30deg); + -ms-transform: rotate(-30deg); + transform: rotate(-30deg); +} +#random-banner #random-hover { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding-left: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -moz-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -o-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -ms-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + font-size: 60px; +} +#random-banner #random-hover .bannerText { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#random-banner #random-hover i { + font-size: 80px; + margin-left: 10px; + line-height: 1; +} +@media screen and (max-width: 1200px) { + #random-banner { + display: none; + } +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0px; + list-style: none; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#sidebar #sidebar-menus .menus_item_child li { + width: calc(50% - 8px); + margin: 4px; +} +#sidebar #sidebar-menus .menus_item_child .site-page.child { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 8px; + border-radius: 12px; + border: var(--style-border-always); + background: var(--anzhiyu-card-bg); + font-size: 14px; + height: 4.2rem; + width: 7rem; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#sidebar .menus_item ul { + padding-left: 0px; +} +#nav-group { + max-width: 1400px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#page-header.nav-fixed #center-console + label i { + background: var(--font-color); +} +#center-console { + display: none; +} +#center-console + label { + --icon-size: 1.375rem; + position: relative; + right: 0; + top: 0; + bottom: 0; + height: var(--icon-size); + width: var(--icon-size); + cursor: pointer; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + -ms-transition: 1s; + transition: 1s; + margin-left: 1rem; +} +#center-console + label:hover i.left { + width: calc(var(--icon-size) / 2.5); +} +#center-console + label:hover i.center { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + width: calc(var(--icon-size) / 2.5); +} +#center-console + label:hover i.right { + width: calc(var(--icon-size) / 2.5); + height: calc(var(--icon-size) / 1.15); + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; +} +#center-console + label i { + background: var(--light-grey); + position: absolute; + border-radius: calc(var(--icon-size) * 0.15); + -webkit-transition: 0.5s var(--animation-on); + -moz-transition: 0.5s var(--animation-on); + -o-transition: 0.5s var(--animation-on); + -ms-transition: 0.5s var(--animation-on); + transition: 0.5s var(--animation-on); + inset: 0; + margin: auto; + right: auto; + width: calc(var(--icon-size) / 3); + height: calc(var(--icon-size) / 3); + -webkit-transform: translateY(calc(var(--icon-size) / 4)); + -moz-transform: translateY(calc(var(--icon-size) / 4)); + -o-transform: translateY(calc(var(--icon-size) / 4)); + -ms-transform: translateY(calc(var(--icon-size) / 4)); + transform: translateY(calc(var(--icon-size) / 4)); +} +#center-console + label i.left { + width: 100%; + -webkit-transform: translateY(calc(var(--icon-size) / -4)); + -moz-transform: translateY(calc(var(--icon-size) / -4)); + -o-transform: translateY(calc(var(--icon-size) / -4)); + -ms-transform: translateY(calc(var(--icon-size) / -4)); + transform: translateY(calc(var(--icon-size) / -4)); +} +#center-console + label i.right { + left: auto; + right: 0; + width: calc(var(--icon-size) / 2); +} +#center-console:checked + label { + right: 0; + top: 0.5rem; + z-index: 31; +} +#center-console:checked + label:hover::after { + background: var(--anzhiyu-main) !important; +} +#center-console:checked + label::after { + content: ""; + width: 35px; + height: 35px; + display: block; + position: absolute; + z-index: -1; + top: -6px; + left: -6.3px; + background: var(--anzhiyu-fontcolor) !important; + border-radius: 50px; +} +#center-console:checked + label:is(.widget, +#center-console:checked + label .widget:hover) i { + height: calc(var(--icon-size) / 4.5); + background: var(--anzhiyu-white) !important; +} +#center-console:checked + label i.left { + width: 100% !important; + -webkit-transform: rotate(-45deg) !important; + -moz-transform: rotate(-45deg) !important; + -o-transform: rotate(-45deg) !important; + -ms-transform: rotate(-45deg) !important; + transform: rotate(-45deg) !important; +} +#center-console:checked + label i.center { + width: 0 !important; +} +#center-console:checked + label i.right { + width: 100% !important; + -webkit-transform: rotate(45deg) !important; + -moz-transform: rotate(45deg) !important; + -o-transform: rotate(45deg) !important; + -ms-transform: rotate(45deg) !important; + transform: rotate(45deg) !important; +} +[data-theme="dark"] #center-console:checked + label:is(.widget, +#center-console:checked + label .widget:hover) i { + background: var(--anzhiyu-black) !important; +} +#body-wrap .nav-fixed #travellings_button::after { + background: var(--anzhiyu-main) !important; +} +#body-wrap #travellings_button { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#body-wrap #travellings_button:hover::after { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; + visibility: visible; +} +#body-wrap #travellings_button:hover a { + background: var(--anzhiyu-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#body-wrap #travellings_button:hover a i { + color: var(--anzhiyu-white); +} +#body-wrap #travellings_button::after { + --height: 2rem; + content: attr(title); + position: fixed; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-nav); + box-shadow: var(--anzhiyu-shadow-nav); + border-radius: var(--anzhiyu-radius-full); + width: fit-content; + height: var(--height); + font-size: var(--global-font-size); + white-space: nowrap; + margin: auto; + padding: 0 4em; + top: calc((60px - var(--height)) / 2); + right: 0; + left: 0; + line-height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + z-index: 1; + visibility: hidden; + -webkit-transform: scaleX(1.1); + -moz-transform: scaleX(1.1); + -o-transform: scaleX(1.1); + -ms-transform: scaleX(1.1); + transform: scaleX(1.1); + pointer-events: none; + -webkit-transition: 0.5s; + -moz-transition: 0.5s; + -o-transition: 0.5s; + -ms-transition: 0.5s; + transition: 0.5s; +} +@media screen and (max-width: 900px) { + #body-wrap #travellings_button::after { + padding: 0 2em; + } +} +#body-wrap:has(#travellings_button:hover) #page-name, +#body-wrap:has(#travellings_button:hover) #nav #menus { + display: none; +} +#body-wrap .page #travellings_button:hover::after { + background: var(--anzhiyu-main) !important; +} +@media screen and (max-width: 768px) { + #page-header #nav { + padding: 20px; + } + .cardHover, + .error404 #error-wrap .error-content, + .layout > div:first-child:not(.recent-posts), + #recent-posts > .recent-post-item, + #aside-content .card-widget, + .layout > .recent-posts .pagination > *:not(.space), + .layout > .recent-posts .pagination > *:not(.space):not(pangu) { + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + #sidebar #sidebar-menus .menus_items .site-page:hover { + background: none; + } + div#travellings_button { + display: none !important; + } +} +#nav #blog_name a:hover, +#nav .mask-name-container a:hover, +#nav #menus a:hover, +#nav #nav-right .nav-button a:hover, +#nav #nav-right #toggle-menu a:hover { + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.not-top-img { + margin-bottom: 0px; +} +#page-header:not(.nav-fixed) #percent { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header #nav #nav-right > div { + margin-left: 1rem; + padding: 0; +} +.nav-button { + cursor: pointer; +} +#nav #menus { + padding: 0 calc((100% - 1400px + 3rem) / 2); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + position: absolute; + height: 60px; + left: 0; + margin: 0; + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + will-change: auto; +} +#nav .site-page { + padding-bottom: 0px; +} +#nav *::after { + background-color: transparent !important; +} +#nav .menus_items .menus_item a { + border-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li a { + padding: 2px 16px; + border-radius: 50px; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; +} +#nav .menus_items .menus_item .menus_item_child li:hover a { + color: #fff !important; +} +#nav .menus_items .menus_item .menus_item_child li { + border-radius: 50px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + display: inline-block; + margin: 0 3px; +} +#site-name, +.shuoshuo { + white-space: nowrap; + overflow: hidden; +} +#site-name { + padding: 0 2px; + height: 35px; + line-height: 35px; + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#nav .menus_items { + position: relative; + width: fit-content; + text-align: center; + left: 0px; + right: 0px; + top: 0px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#nav #blog_name a, +#nav .mask-name-container a, +#nav #menus a, +#nav #nav-right .nav-button a, +#nav #nav-right #toggle-menu a { + border-radius: 50px; +} +.page #nav #blog_name a:hover, +.page #nav .mask-name-container a:hover, +.page #nav #menus a:hover, +.page #nav #nav-right .nav-button a:hover, +.page #nav #nav-right #toggle-menu a:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +.post #nav #blog_name .back-home-button:hover, +.post #nav #blog_name #site-name:hover, +.post #nav #nav-right .nav-button a:hover, +.post #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.post #nav #menus .menus_item:hover > a { + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.post .nav-fixed #nav #menus .menus_item:hover > a.site-page { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +.post .nav-fixed #nav #blog_name #site-name:hover, +.post .nav-fixed #nav #blog_name .back-home-button:hover, +.post .nav-fixed #nav #nav-right .nav-button a:hover, +.post .nav-fixed #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#page-header.nav-fixed #nav #page-name { + background: none; + text-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + font-weight: bold; + border-radius: 100px; + min-width: 100px; + line-height: 1.5rem; +} +#name-container { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 12px; + height: 40px; + position: absolute; + top: 62px; + left: 0px; + right: 0px; + margin: auto; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; +} +#page-header.nav-fixed.nav-visible #name-container { + z-index: 100; + top: 60px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.nav-fixed #nav #page-name:hover { + color: var(--anzhiyu-main); +} +@media screen and (min-width: 900px) { + #page-header.nav-fixed #nav #page-name::after { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + content: "回到顶部"; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + position: absolute; + left: 0; + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + margin: auto; + color: var(--anzhiyu-white) !important; + font-weight: 700; + line-height: 2; + } +} +@media screen and (min-width: 1200px) { + #page-header.nav-fixed #nav #page-name:hover:after { + opacity: 1; + -ms-filter: none; + filter: none; + } + #page-header.nav-fixed #nav #page-name:hover { + background: var(--anzhiyu-main); + } +} +#page-header #nav #page-name { + display: inline; + font-weight: bold; + padding: 4px 8px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; + text-align: center; + cursor: pointer; + top: 0; + font-size: 1.1rem; + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + animation-timing-function: ease-in; + -webkit-animation-timing-function: ease-in; +} +#menus > div.menus_items > div > a { + letter-spacing: 0.3rem; + font-weight: 700; + padding: 0em 0.8em 0em 1em; + height: 35px; + line-height: 35px; + -webkit-transition: color 0s !important; + -moz-transition: color 0s !important; + -o-transition: color 0s !important; + -ms-transition: color 0s !important; + transition: color 0s !important; +} +#nav div#toggle-menu { + padding: 2px 0 4px 6px; +} +#page-name:hover:before { + opacity: 1; + -ms-filter: none; + filter: none; +} +::backdrop { + display: block; + position: fixed; + top: 0px; +} +.mask-name-container { + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; + left: 0; +} +#nav .menus_items .menus_item > a > i:last-child { + display: none; +} +#nav #search-button { + font-size: 1.3em; +} +.back-home-button:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +.back-home-button { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 35px; + height: 35px; + padding: 0 !important; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 4px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 8px; +} +.back-home-button:hover .back-menu-list-groups { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 55px; + pointer-events: auto; + left: 0rem; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +.back-home-button .back-menu-list-groups { + position: absolute; + top: 45px; + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + -webkit-transform-origin: top left; + -moz-transform-origin: top left; + -o-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + left: 0rem; + background-color: var(--anzhiyu-maskbgdeep); + border-radius: 12px; + border: var(--style-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + font-size: 12px; + color: var(--anzhiyu-secondtext); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; + backdrop-filter: blur(20px); +} +.back-home-button .back-menu-list-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.back-home-button .back-menu-list-group .back-menu-list-title { + margin: 8px 0 0 16px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.back-home-button .back-menu-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + width: 340px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.back-home-button .back-menu-list::before { + position: absolute; + top: -24px; + left: 0px; + width: 100%; + height: 25px; + content: ""; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +.back-home-button .back-menu-list-groups .back-menu-list-group:last-child .back-menu-list { + margin: 0 0 8px; +} +.back-home-button .back-menu-list-group:hover .back-menu-list-title { + color: var(--anzhiyu-main); +} +.back-home-button .back-menu-list-groups:hover { + border: var(--style-border-hover); +} +.back-home-button .back-menu-list .back-menu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 4px 8px; + padding: 4px 8px !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + width: 150px; + border-radius: 8px !important; + -webkit-transition: 0.2s !important; + -moz-transition: 0.2s !important; + -o-transition: 0.2s !important; + -ms-transition: 0.2s !important; + transition: 0.2s !important; +} +.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text { + font-size: var(--global-font-size); + margin-left: 0.5rem; + color: var(--anzhiyu-fontcolor); + white-space: nowrap; +} +@media screen and (max-width: 768px) { + .back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text { + font-size: 14px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } +} +.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-icon { + width: 24px; + height: 24px; + border-radius: 24px; + background: var(--anzhiyu-secondbg); +} +#page-header #nav .back-home-button { + cursor: pointer; + position: relative; +} +#page-header:not(.not-top-img) #nav .back-home-button { + color: var(--light-grey); +} +#page-header.nav-fixed:not(.not-top-img) #nav .back-home-button { + color: var(--font-color); +} +.back-home-button .back-menu-list .back-menu-item:hover .back-menu-item-text { + color: var(--anzhiyu-white); +} +.back-menu-item-icon.loading img { + width: 25px; +} +#page-header #nav #menus .nav-button.long a.totopbtn span { + border-radius: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + white-space: nowrap; +} +#page-header #nav #menus .nav-button.long a.totopbtn:hover { + border-radius: 35px; + height: 30px; +} +#nav #search-button { + padding-left: 0; +} +#search-button a.site-page.social-icon.search span { + display: none; +} +#nav .nav-button a:hover { + color: var(--anzhiyu-white) !important; +} +#menus > div.menus_items a { + font-weight: bold; +} +#menus .menus_item .menus_item_child .site-page.child.faa-parent.animated-hover .anzhiyu-icon-fan.faa-tada { + -webkit-animation: rotate 1.6s linear infinite; + -moz-animation: rotate 1.6s linear infinite; + -o-animation: rotate 1.6s linear infinite; + -ms-animation: rotate 1.6s linear infinite; + animation: rotate 1.6s linear infinite; +} +#nav-right { + z-index: 102; + position: absolute; + right: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + height: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#nav #blog_name { + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + height: 60px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + z-index: 102; +} +#blog_name #site-name i { + position: absolute; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 1rem; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#blog_name #site-name:hover .title { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#blog_name #site-name .title { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + letter-spacing: normal; + font-size: 1.2rem; + padding: 0 5px; + line-height: 2rem; + -webkit-transition: color 0s; + -moz-transition: color 0s; + -o-transition: color 0s; + -ms-transition: color 0s; + transition: color 0s; +} +.post #blog_name #site-name .title { + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +#blog_name #site-name:hover i { + color: #fff; + opacity: 1; + -ms-filter: none; + filter: none; +} +#page-header #nav #nav-right .nav-button a i, +#page-header #nav #nav-left .nav-button a i { + line-height: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header #nav #nav-right .nav-button a:hover i, +#page-header #nav #nav-left .nav-button a:hover i { + color: var(--anzhiyu-white); + -webkit-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -moz-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -o-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + transition: background 0.35s ease-in-out, color 0.2s ease-in-out; +} +@media screen and (max-width: 768px) { + [data-theme="dark"] #page-header #nav #nav-right .nav-button a i, + [data-theme="dark"] #page-header #nav #nav-left .nav-button a i, + [data-theme="dark"] #page-header.nav-fixed:not(.not-top-img) #nav .back-home-button { + color: #c9c9c9 !important; + } +} +#nav-totop { + width: 35px; + height: 35px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 50px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#page-header #nav #nav-right .nav-button a.totopbtn { + width: 25px; + height: 25px; + border-radius: 40px; + background: var(--font-color); + color: var(--card-bg); + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#page-header #nav #nav-right .nav-button:not(.long) a.totopbtn:hover { + height: 35px; + width: 35px; +} +#page-header #nav #nav-right .nav-button:not(.long):hover a.totopbtn { + width: 35px; + height: 35px; + top: 0; + right: 0; +} +#page-header #nav .nav-button a { + height: 35px; + width: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +.nav-fixed #nav-totop #percent, +.page #nav-totop #percent { + font-size: 13px; + border-radius: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + white-space: nowrap; + color: var(--card-bg); + width: 25px; + height: 25px; +} +#nav-totop #percent { + font-weight: 700; +} +#page-header #nav #nav-right .nav-button:hover a.totopbtn { + background: var(--anzhiyu-main); +} +#nav-totop:hover .totopbtn i { + opacity: 1; + -ms-filter: none; + filter: none; + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#nav-totop .totopbtn i { + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#nav-totop.long .totopbtn i { + font-size: 1rem; +} +#nav-totop:hover #percent { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(1.5); + -moz-transform: scale(1.5); + -o-transform: scale(1.5); + -ms-transform: scale(1.5); + transform: scale(1.5); + font-weight: 700; +} +#page-header:not(.nav-fixed) #nav-totop { + width: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin-left: 0 !important; + overflow: hidden; + -webkit-transition: 0.3s ease-in; + -moz-transition: 0.3s ease-in; + -o-transition: 0.3s ease-in; + -ms-transition: 0.3s ease-in; + transition: 0.3s ease-in; +} +#page-header #nav #nav-right .nav-button.long, +#page-header #nav #nav-right .nav-button.long a.totopbtn, +#page-header #nav #nav-right .nav-button.long a.totopbtn span { + width: 70px; +} +#page-header #nav #nav-right .long#nav-totop:hover { + background-color: transparent; +} +@media screen and (max-width: 1390px) { + #nav { + padding: 0 1.5rem; + } + #nav .mask-name-container { + padding: 0 1.5rem; + } + div#menus { + padding: 0 1.5rem; + } +} +@media screen and (min-width: 900px) { + #nav .back-home-button:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +@media screen and (max-width: 768px) { + .mask-name-container { + display: none; + } + #menus { + padding: 20px; + } + #page-header.not-top-img { + margin-bottom: 10px; + } + #nav { + border-bottom: none; + background: var(--anzhiyu-background); + } + #page-header #nav #nav-right div { + margin-left: 0.5rem; + } +} +@media screen and (min-width: 768px) { + .menus_item:hover > a.site-page { + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +#pagination .toPageGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; +} +#pagination .toPageGroup:hover { + background: none; +} +#pagination .pagination { + text-align: center; +} +#pagination .pagination .extend.next .pagination_tips_next { + margin-left: -32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#pagination .page-number.current { + background: #425aef; + color: var(--white); +} +#pagination .pagination-info { + position: absolute; + top: 50%; + padding: 20px 40px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#pagination .prev_info, +#pagination .next_info { + color: var(--white); + font-weight: 500; +} +#pagination .next-post .pagination-info { + text-align: right; +} +#pagination .pull-full { + width: 100% !important; +} +#pagination .prev-post .label, +#pagination .next-post .label { + color: var(--light-grey); + text-transform: uppercase; + font-size: 90%; +} +#pagination .prev-post, +#pagination .next-post { + width: 50%; +} +@media screen and (max-width: 768px) { + #pagination .prev-post, + #pagination .next-post { + width: 100%; + } +} +#pagination .prev-post a, +#pagination .next-post a { + position: relative; + display: block; + overflow: hidden; + height: 150px; +} +#pagination.pagination-post { + overflow: hidden; + margin-top: 1.25rem; + width: 100%; + background: #000; + border-radius: 10px; +} +@media screen and (max-width: 768px) { + #pagination .toPageGroup { + display: none; + } + #pagination .page-number { + display: none !important; + } + #pagination .space { + display: none !important; + } + #pagination .pagination .extend.next { + width: 100%; + height: 3rem; + margin: 0; + border-radius: 12px; + line-height: 3rem; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + margin: 0 20px; + } + #pagination .pagination .extend.next:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + } + #pagination .pagination .extend.next i { + display: none; + } + #pagination .pagination .extend.next .pagination_tips_next { + opacity: 1; + -ms-filter: none; + filter: none; + margin-left: 0; + } + #pagination .pagination .extend.prev { + width: 100%; + height: 3rem; + border-radius: 12px; + line-height: 3rem; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + margin: 0 20px; + } + #pagination .pagination .extend.prev i { + display: none; + } + #pagination .pagination .extend.prev .pagination_tips_prev { + opacity: 1; + -ms-filter: none; + filter: none; + margin-right: 0; + } +} +.layout > .recent-posts .pagination > *:not(pangu) { + display: inline-block; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; +} +.layout > .recent-posts .pagination > *:not(.space):not(pangu) { + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +.layout > div:not(.recent-posts) .pagination .page-number { + display: inline-block; + margin: 0 4px; + min-width: 2.5em; + height: 2.5em; + text-align: center; + line-height: 2.5em; + cursor: pointer; +} +@media screen and (min-width: 1200px) { + #pagination a.extend.next:hover, + #pagination a.extend.prev:hover { + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } +} +@media screen and (min-width: 768px) { + #pagination .page-number.current:hover { + background: var(--anzhiyu-theme); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white); + } + #pagination a.extend.next:hover, + #pagination a.extend.prev:hover { + color: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } + nav#pagination { + overflow: visible; + } + #pagination .page-number.current { + background: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + } + #pagination a.extend.next { + overflow: hidden; + height: 2.5em; + line-height: 2.5em; + } + #pagination a.extend.next, + #pagination a.extend.prev { + width: 5rem !important; + line-height: 1.9rem !important; + border-radius: 8px !important; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border: var(--style-border); + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + overflow: hidden; + -webkit-transition: all 0.3s, color 0s; + -moz-transition: all 0.3s, color 0s; + -o-transition: all 0.3s, color 0s; + -ms-transition: all 0.3s, color 0s; + transition: all 0.3s, color 0s; + position: absolute; + } + #pagination .page-number { + background: var(--anzhiyu-card-bg); + border-radius: 8px !important; + margin: 0 0.3rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + } + #pagination .page-number:hover { + color: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +#pagination .pagination { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#pagination a.extend.next:hover .pagination_tips_next { + margin-left: 2px; + opacity: 1; + -ms-filter: none; + filter: none; + white-space: nowrap; +} +#pagination a.extend.prev .pagination_tips_prev { + margin-right: -32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#pagination a.extend.prev:hover .pagination_tips_prev { + margin-right: 2px; + opacity: 1; + -ms-filter: none; + filter: none; + white-space: nowrap; +} +a.extend.prev { + left: 0; +} +a.extend.next { + right: 0; +} +#pagination { + overflow: hidden; + margin-top: 1rem; + width: 100%; +} +@media screen and (max-width: 768px) { + #site-name { + padding: 0 !important; + } +} +#pagination .pagination input { + width: 2.5em; + height: 2.5em; + border-radius: 8px; + border: var(--style-border-always); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + outline-style: none; + font-size: 16px; + padding-left: 12px; +} +a#toPageButton { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: absolute; + width: 2.5em; + height: 2.5em; + right: 0px; + top: 0px; + border-radius: 8px; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + cursor: pointer; +} +#pagination .pagination .toPageGroup:hover input, +#pagination .pagination .toPageGroup input:focus { + border: var(--style-border-hover-always); + outline-style: none; + width: 100px; +} +#pagination .toPageGroup:hover a#toPageButton, +#pagination .toPageGroup:focus-within a#toPageButton { + width: 30px; + height: 30px; + right: 4px; + top: 5px; + background: var(--anzhiyu-secondbg); + border: 1px solid var(--anzhiyu-none); + border-radius: 4px; +} +blockquote { + border: var(--style-border-always); + background-color: var(--anzhiyu-secondbg); + color: var(--anzhiyu-secondtext); + border-radius: 8px; + margin: 1rem 0; + padding: 0.5rem 0.8rem; +} +#article-container { + word-wrap: break-word; + overflow-wrap: break-word; +} +#article-container h1 .post-content, +#article-container h2 .post-content, +#article-container h3 .post-content, +#article-container h4 .post-content, +#article-container h5 .post-content, +#article-container h6 .post-content { + line-height: 1.6; + border-top: 1px dashed var(--anzhiyu-theme-op); + padding-top: 1.5rem; + padding-left: 0; +} +#article-container a { + color: var(--anzhiyu-fontcolor); +} +#article-container a:hover { + text-decoration: underline; +} +#article-container img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 8px; +} +#article-container p { + margin: 0 0 16px; +} +#article-container iframe { + margin: 0 0 20px; + border-radius: 12px; +} +#article-container kbd { + margin: 0 3px; + padding: 3px 5px; + border: 1px solid #b4b4b4; + border-radius: 3px; + background-color: #f8f8f8; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + color: #34495e; + white-space: nowrap; + font-weight: 600; + font-size: 0.9em; + font-family: Monaco, 'Ubuntu Mono', monospace; + line-height: 1em; +} +#article-container h1 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 2rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h1 .headerlink::before { + font-size: 2rem; +} +#article-container > :first-child:is(h2) { + border-top: none; + padding-top: 0; + margin-top: 0; +} +#article-container h2 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 1.8rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h2 .headerlink::before { + font-size: 1.8rem; +} +#article-container h3 .headerlink, +#article-container h4 .headerlink, +#article-container h5 .headerlink, +#article-container h6 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 1.3rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h3 .headerlink::before, +#article-container h4 .headerlink::before, +#article-container h5 .headerlink::before, +#article-container h6 .headerlink::before { + font-size: 1.3rem; +} +#article-container a.headerlink::before { + content: '\f0c1'; + float: right; + color: var(--headline-presudo); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#article-container a.headerlink:hover:after { + color: var(--pseudo-hover); +} +#article-container a.headerlink h1:hover a.headerlink:after, +#article-container a.headerlink h2:hover a.headerlink:after, +#article-container a.headerlink h3:hover a.headerlink:after, +#article-container a.headerlink h4:hover a.headerlink:after, +#article-container a.headerlink h5:hover a.headerlink:after, +#article-container a.headerlink h6:hover a.headerlink:after { + opacity: 1; + -ms-filter: none; + filter: none; +} +#article-container ol ol, +#article-container ul ol, +#article-container ol ul, +#article-container ul ul { + padding-left: 20px; +} +#article-container ol li, +#article-container ul li { + margin: 4px 0; +} +#article-container ol p, +#article-container ul p { + margin: 0 0 8px; +} +#article-container.post-content h1:before { + margin-left: -26px; + font-size: 20px; +} +#article-container.post-content h1:hover:before { + color: #425aef; +} +#article-container.post-content h2:before { + margin-left: -24px; + font-size: 18px; +} +#article-container.post-content h2:hover:before { + color: #425aef; +} +#article-container.post-content h3:before { + margin-left: -22px; + font-size: 16px; +} +#article-container.post-content h3:hover:before { + color: #425aef; +} +#article-container.post-content h4:before { + margin-left: -20px; + font-size: 14px; +} +#article-container.post-content h4:hover:before { + color: #425aef; +} +#article-container.post-content h5:before { + margin-left: -18px; + font-size: 12px; +} +#article-container.post-content h5:hover:before { + color: #425aef; +} +#article-container.post-content h6:before { + margin-left: -18px; + font-size: 12px; +} +#article-container.post-content h6:hover:before { + color: #425aef; +} +#article-container.post-content ol p, +#article-container.post-content ul p { + margin: 0 0 8px; +} +#article-container.post-content li::marker { + color: #425aef; + font-weight: 600; + font-size: 1.05em; +} +#article-container.post-content li:hover::marker { + color: var(--pseudo-hover); +} +#article-container > :last-child { + margin-bottom: 0 !important; +} +@media screen and (max-width: 768px) { + #post { + background: var(--anzhiyu-background) !important; + border: none; + } +} +#post .post_share { + margin: 8px 0 0; + width: fit-content; + min-width: 205px; +} +#post .tag_share { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; +} +#post .tag_share .post-meta__box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; +} +#post .tag_share .post-meta__box__tag-list, +#post .tag_share .post-meta__box__category-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#post .tag_share .post-meta__box__tags, +#post .tag_share .post-meta__box__categoryes { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + padding: 4px 12px; + width: fit-content; + border-radius: 8px; + font-size: 0.85em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +@media screen and (max-width: 768px) { + #post .tag_share .post-meta__box__tags, + #post .tag_share .post-meta__box__categoryes { + margin: 4px 8px 4px 0 !important; + } +} +#post .tag_share .post-meta__box__tags { + margin: 0px 8px 0px 0; +} +#post .tag_share .post-meta__box__categoryes { + margin: 0px 8px 4px 0; +} +#post .tag_share .post-meta__box__categoryes:hover { + background: #425aef; + color: var(--white); +} +#post .tag_share .post-meta .social-share { + font-size: 0.85em; +} +#post .tag_share .post-meta .social-share .social-share-icon { + margin: 0 4px; + width: 1.85em; + height: 1.85em; + font-size: 1.2em; + line-height: 1.85em; +} +#post .post-copyright { + background: var(--anzhiyu-secondbg); + padding: 1rem 1.3rem; + border: var(--style-border); + border-width: 1px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: relative; + margin: 80px 0 30px; + border-radius: 12px; +} +#post .post-copyright .copyright-cc-box { + position: absolute; + right: 0; + overflow: hidden; + width: 100%; + height: 100%; + top: 0; + pointer-events: none; +} +#post .post-copyright__author_box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 1.5rem; +} +#post .post-copyright__author_box .post-copyright__author_img { + width: 66px; + height: 66px; + margin: auto; + border-radius: 66px; + overflow: hidden; + position: absolute; + left: calc(50% - 33px); + top: -33px; + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#post .post-copyright__author_box .post-copyright__author_img:hover img.post-copyright__author_img_back { + z-index: 21; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); +} +#post .post-copyright__author_box .post-copyright__author_img img.post-copyright__author_img_front { + z-index: 20; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#post .post-copyright__author_box .post-copyright__author_img img.post-copyright__author_img_back { + border-radius: 66px; + z-index: 10; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#post .post-copyright__author_box .post-copyright__author_img img { + position: absolute; + bottom: 0; + left: 0; +} +#post .post-copyright__author_box .post-copyright__author_name { + text-align: center; + font-size: 20px; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + line-height: 1; +} +#post .post-copyright__author_box .post-copyright__author_desc { + text-align: center; + font-size: 14px; + color: var(--anzhiyu-secondtext); + margin-top: 4px; +} +#post .post-copyright__post__info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-top: 0.2rem; +} +#post .post-copyright__original, +#post .post-copyright__reprint { + background: var(--anzhiyu-main); + color: var(--anzhiyu-wihite-font); + padding: 0.2rem 1rem; + font-size: 0.8rem; + border-radius: 8px; + margin-right: 0.5rem; + font-weight: bold; + line-height: 1.5; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#post .post-copyright .anzhiyufont.anzhiyu-icon-copyright { + position: absolute; + font-size: 1.3em; + top: -71px; + right: -20px; + font-size: 8.3em; + z-index: -1; + color: var(--anzhiyu-main); +} +@media screen and (min-width: 1365px) { + #post .post-copyright .anzhiyufont.anzhiyu-icon-copyright { + z-index: 0; + } +} +#post .post-copyright-title { + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + font-weight: 500; + max-width: 70%; +} +#post .post-copyright-title span { + cursor: pointer; +} +#post .post-copyright-title:hover { + color: var(--anzhiyu-fontcolor); +} +#post .post-copyright .post-copyright__notice { + font-size: 12px; +} +#post .post-copyright .post-copyright__notice .post-copyright-info { + padding-left: 0; + color: var(--anzhiyu-secondtext); + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-align: center; +} +@media screen and (max-width: 768px) { + #post .post-copyright .post-copyright__notice .post-copyright-info { + -webkit-line-clamp: 2; + } +} +#post .post-copyright .post-copyright__notice .post-copyright-info a:hover { + color: var(--anzhiyu-main); +} +#post .post-outdate-notice { + position: relative; + margin: 0 0 20px; + padding: 0.5em 1.2em; + border-radius: 3px; + background-color: #ffe6e6; + color: #f66; + padding: 0.5em 1em 0.5em 2.6em; + border-left: 5px solid #ff8080; +} +#post .post-outdate-notice:before { + content: '\e66f'; + position: absolute; + top: 50%; + left: 0.9em; + color: #ff8080; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +#post .ads-wrap { + margin: 40px 0; +} +#post #content-inner.layout #article-container h1, +#post #content-inner.layout #article-container h2, +#post #content-inner.layout #article-container h3, +#post #content-inner.layout #article-container h4, +#post #content-inner.layout #article-container h5, +#post #content-inner.layout #article-container h6 { + padding-left: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-direction: reverse; + -moz-box-direction: reverse; + -o-box-direction: reverse; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; +} +.post-ai-description { + background: var(--anzhiyu-secondbg); + border-radius: 12px; + padding: 12px 16px; + line-height: 1.3; + border: var(--style-border-always); + margin-bottom: 10px; +} +.ai-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--font-color); + border-radius: 8px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 5px; +} +.ai-title i { + font-weight: 800; + font-size: 20px; + line-height: 20px; + height: 20px; +} +.ai-title .anzhiyufont.anzhiyu-icon-circle-dot { + margin-left: auto; + margin-right: 4px; + font-size: 14px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.ai-title .anzhiyufont.anzhiyu-icon-circle-dot:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); +} +.ai-title .anzhiyufont.anzhiyu-icon-arrow-rotate-right { + font-size: 14px; + margin-left: 4px; + cursor: pointer; +} +.ai-title .ai-title-text { + font-weight: bold; + margin-left: 8px; +} +#ai-tag { + font-size: 12px; + background-color: var(--anzhiyu-lighttext); + color: rgba(255,255,255,0.9); + border-radius: 4px; + line-height: 1; + padding: 4px 5px; + cursor: pointer; +} +#ai-Toggle { + font-size: 12px; + background: var(--anzhiyu-lighttext); + color: var(--anzhiyu-card-bg); + padding: 4px; + border-radius: 4px; + margin-left: 6px; + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-weight: bold; +} +#ai-Toggle:hover { + background: var(--anzhiyu-fontcolor); + color: var(--anzhiyu-card-bg); +} +#go-tianli-blog { + display: none; +} +.ai-explanation { + margin-top: 12px; + padding: 8px 12px; + background: var(--anzhiyu-card-bg); + border-radius: 8px; + border: var(--style-border-always); + font-size: 15px; + line-height: 1.4; +} +.ai-cursor { + display: inline-block; + width: 7px; + background: #333; + height: 16px; + margin-bottom: -2px; + opacity: 0.95; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=95)"; + filter: alpha(opacity=95); + margin-left: 3px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +[data-theme="dark"] .ai-cursor { + background: #fff; +} +.ai-btn-box { + font-size: 15.5px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.ai-btn-item { + padding: 5px 10px; + margin: 10px 16px 0px 5px; + width: fit-content; + line-height: 1; + background: var(--anzhiyu-main); + color: #fff; + border-radius: 6px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + cursor: pointer; +} +.ai-btn-item:hover { + background: var(--anzhiyu-theme); +} +.ai-recommend { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.ai-recommend .ai-recommend-item { + width: calc(50% - 20px); + margin: 10px; + background: var(--anzhiyu-secondbg); + border-radius: 4px; + padding: 10px; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; +} +.ai-recommend .ai-recommend-item span.index { + padding: 4px; +} +.ai-recommend .ai-recommend-item:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); +} +.ai-recommend .ai-recommend-item:hover a { + color: var(--anzhiyu-white); +} +@media screen and (max-width: 768px) { + .ai-btn-box { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + .ai-recommend .ai-recommend-item { + width: 100%; + } +} +.post-tools { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-user-select: none; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.post-tools .post-tools-left { + white-space: nowrap; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: 0.5rem; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.post-tools .post-tools-left .rewardLeftButton, +.post-tools .post-tools-left .shareRight { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 10px; +} +@media screen and (max-width: 768px) { + .post-tools .post-tools-left { + margin-top: 1rem; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + } + .post-tools .post-tools-left > div { + margin: 8px; + } +} +.post-tools-right { + padding-right: 0px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-bottom: 0.5rem; +} +@media screen and (max-width: 768px) { + .post-tools-right { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +.share-link { + margin-left: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + position: relative; + text-align: center; +} +.share-link.mobile:hover .share-button { + background: var(--anzhiyu-green); + border-color: var(--anzhiyu-green); + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); + color: var(--anzhiyu-white); +} +.share-link.mobile:hover .share-main { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.share-link .share-qrcode { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.share-link .share-button { + background: var(--anzhiyu-card-bg); + border: var(--style-border); + color: var(--anzhiyu-fontcolor); + border-radius: 8px; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + width: 56px; + height: 40px; +} +.share-link .share-button:hover { + background: var(--anzhiyu-main); + border-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-blue); + box-shadow: var(--anzhiyu-shadow-blue); +} +.share-link .share-button i { + line-height: 38px; + font-size: 1.1rem; +} +.share-link .share-main { + position: absolute; + bottom: 40px; + z-index: 100; + padding-bottom: 15px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transform: translateY(8px); + -moz-transform: translateY(8px); + -o-transform: translateY(8px); + -ms-transform: translateY(8px); + transform: translateY(8px); +} +.share-link .share-main .share-main-all { + padding: 12px; + border-radius: 12px; + background: var(--anzhiyu-background); + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + border: var(--style-border-always); +} +.share-link .share-main .share-main-all #qrcode { + width: 150px; + height: 150px; + min-width: 150px; + min-height: 150px; + background: var(--anzhiyu-white); + padding: 8px; + border-radius: 8px; + margin-bottom: 8px; + border: var(--style-border-always); +} +.share-link .share-main .share-main-all .reward-dec { + font-size: 12px; +} +.post-tools .post-tools-left > div { + margin: 0; +} +.post-tools .post-tools-left { + width: auto; +} +.relatedPosts { + margin-top: 1.25rem; +} +.relatedPosts > .headline { + margin-bottom: 5px; + font-weight: 700; + font-size: 1.43em; +} +.relatedPosts > .relatedPosts-list > div { + position: relative; + display: inline-block; + overflow: hidden; + margin: 3px; + width: calc(33.333% - 6px); + height: 200px; + background: #000; + vertical-align: bottom; +} +@media screen and (max-width: 768px) { + .relatedPosts > .relatedPosts-list > div { + margin: 2px; + width: calc(50% - 4px); + height: 150px; + } +} +@media screen and (max-width: 600px) { + .relatedPosts > .relatedPosts-list > div { + width: calc(100% - 4px); + } +} +.relatedPosts > .relatedPosts-list .content { + position: absolute; + top: 50%; + padding: 0 20px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.relatedPosts > .relatedPosts-list .content .date { + color: var(--light-grey); + font-size: 90%; +} +.relatedPosts > .relatedPosts-list .content .title { + color: var(--white); + -webkit-line-clamp: 2; +} +.post-reward { + position: relative; + text-align: center; + margin-top: 0rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.post-reward:hover .reward-button { + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); + -webkit-box-shadow: none; + box-shadow: none; +} +.post-reward:hover .reward-main { + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-pack: left; + -moz-box-pack: left; + -o-box-pack: left; + -ms-flex-pack: left; + -webkit-justify-content: left; + justify-content: left; +} +.post-reward > * { + pointer-events: auto; +} +.post-reward .reward-button { + border-radius: 8px; + background: var(--anzhiyu-red); + color: var(--anzhiyu-white); + padding: 0; + margin-right: 0.5rem; + width: 126px; + height: 40px; + line-height: 39px; + -webkit-box-shadow: var(--anzhiyu-shadow-red); + box-shadow: var(--anzhiyu-shadow-red); + display: inline-block; + cursor: pointer; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + -ms-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; +} +.post-reward .reward-main { + position: absolute; + bottom: 40px; + left: -70%; + z-index: 90; + display: none; + padding: 0px 0px 15px; + width: 100%; +} +.post-reward .reward-main .reward-all { + border-radius: 12px; + background: var(--anzhiyu-background); + border: var(--style-border-always); + padding: 0.8rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 0px; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.post-reward .reward-main .reward-all::before { + position: absolute; + bottom: -10px; + left: 0px; + width: 100%; + height: 20px; + content: ""; +} +.post-reward .reward-main .reward-all .reward-title { + font-weight: bold; + color: var(--anzhiyu-red); +} +.post-reward .reward-main .reward-all .reward-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 0.5rem; + padding: 0; +} +.post-reward .reward-main .reward-all .reward-group .reward-item { + display: inline-block; + padding: 0px 8px; + list-style-type: none; + vertical-align: top; +} +.post-reward .reward-main .reward-all .reward-group .reward-item .post-qr-code-img { + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + border-radius: 12px; + border: var(--style-border-always); +} +.post-reward .reward-main .reward-all .reward-group .reward-item .post-qr-code-desc { + padding-top: 0rem; + margin-top: -8px; + margin-bottom: 8px; +} +.post-reward .reward-main .reward-all .reward-group .reward-item img { + width: 130px; + height: 130px; + max-width: fit-content; +} +.post-reward .reward-main .reward-all .reward-group .reward-item:first-child img { + border-color: var(--anzhiyu-green); +} +.post-reward .reward-main .reward-all .reward-group .reward-item:last-child img { + border-color: var(--anzhiyu-blue); +} +.post-reward .reward-main .reward-all .reward-main-btn { + background: var(--anzhiyu-secondbg); + color: var(--anzhiyu-fontcolor); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + border-radius: 12px; + padding: 4px 0; + border: var(--style-border-always); + margin: 8px; + width: 100%; +} +.post-reward .reward-main .reward-all .reward-main-btn:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-red); + -webkit-box-shadow: var(--anzhiyu-shadow-red); + box-shadow: var(--anzhiyu-shadow-red); +} +.post-reward .reward-main .reward-all .reward-main-btn .reward-text { + margin-bottom: 0rem; + font-weight: bold; +} +.post-reward .reward-main .reward-all .reward-main-btn .reward-dec { + font-size: 12px; +} +.reward-link.mode { + background: var(--anzhiyu-green); + color: var(--anzhiyu-white); + padding: 0; + width: 173px; + height: 40px; + line-height: 39px; + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); + border-radius: 8px; + text-align: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.reward-link.mode:hover { + background: var(--anzhiyu-theme); + -webkit-box-shadow: none; + box-shadow: none; +} +.reward-link.mode a { + color: var(--anzhiyu-white); + height: 100%; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.reward-link.mode i { + margin-right: 4px; +} +#quit-box { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0,0,0,0.2); + top: 0; + left: 0; + display: none; + z-index: 101; + margin: 0; +} +#rightMenu { + display: none; + position: fixed; + padding: 0 0.25rem; + width: 11rem; + height: fit-content; + top: 10%; + left: 10%; + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + border-radius: 12px; + z-index: 10002; + border: var(--style-border); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#rightMenu a { + color: var(--anzhiyu-fontcolor); +} +#rightMenu:hover { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +#rightMenu .rightMenu-group { + padding: 0.35rem 0.3rem; +} +#rightMenu .rightMenu-group:not(:nth-last-child(1)) { + border-bottom: 2px dashed var(--anzhiyu-theme-op); +} +#rightMenu .rightMenu-group.rightMenu-small { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#rightMenu .rightMenu-group .rightMenu-item { + border-radius: 8px; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + cursor: pointer; + padding: 0 6px; +} +#rightMenu .rightMenu-line .rightMenu-item { + margin: 0.25rem 0; + padding: 0.25rem 0; +} +#rightMenu .rightMenu-group.rightMenu-line .rightMenu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 8px; +} +#rightMenu .rightMenu-group .rightMenu-item:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +#rightMenu .rightMenu-group .rightMenu-item i { + display: inline-block; + text-align: center; + line-height: 1.5rem; + width: 1.5rem; + padding: 0 0.25rem; + font-size: 1.1rem; +} +#rightMenu .rightMenu-line .rightMenu-item i { + margin: 0 0.5rem 0 0.25rem; +} +#rightMenu .rightMenu-group .rightMenu-item span { + line-height: 1.5rem; +} +#rightmenu-mask { + position: fixed; + width: 100vw; + height: 100vh; + background: none; +/* background: var(--anzhiyu-maskbg); */ + top: 0; + left: 0; + display: none; + z-index: 10001; + margin: 0 !important; +} +@media screen and (max-width: 768px) { + :root { + --style-border: 1px solid var(--anzhiyu-card-border); + --style-border-hover: 1px solid var(--anzhiyu-theme); + } +} +#rightside { + position: fixed; + right: -48px; + bottom: 100px; + z-index: 100; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +@media screen and (max-width: 768px) { + #rightside #switch-commentBarrage { + display: none; + } +} +#rightside i { + font-size: 1rem; +} +#rightside #rightside-config-hide { + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: -webkit-transform 0.4s; + -moz-transition: -moz-transform 0.4s; + -o-transition: -o-transform 0.4s; + -ms-transition: -ms-transform 0.4s; + transition: transform 0.4s; + -webkit-transform: translate(45px, 0); + -moz-transform: translate(45px, 0); + -o-transform: translate(45px, 0); + -ms-transform: translate(45px, 0); + transform: translate(45px, 0); +} +#rightside #rightside-config-hide.show { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +#rightside #rightside-config-hide.status { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; +} +#rightside > div > button, +#rightside > div > a { + display: block; + margin-bottom: 5px; + width: 35px; + height: 35px; + border-radius: 5px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + font-size: 16px; + line-height: 35px; +} +#rightside > div > button:hover, +#rightside > div > a:hover { + background-color: var(--btn-hover-color); +} +#rightside #mobile-toc-button { + display: none; +} +@media screen and (max-width: 900px) { + #rightside #mobile-toc-button { + display: block; + } +} +@media screen and (max-width: 900px) { + #rightside #hide-aside-btn { + display: none; + } +} +#keyboard-tips { + position: fixed; + top: 80px; + left: 20px; + z-index: 999; + background: var(--anzhiyu-maskbgdeep); + border-radius: 12px; + border: var(--style-border); + padding: 20px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + pointer-events: none; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + #keyboard-tips { + display: none !important; + } +} +#keyboard-tips.show { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; +} +#keyboard-tips .keyboardTitle { + font-size: 12px; + color: var(--anzhiyu-secondtext); + line-height: 1; +} +#keyboard-tips .keybordList { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 8px; +} +#keyboard-tips .keybordItem { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 4px; +} +#keyboard-tips .keyGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 90px; +} +#keyboard-tips .keyGroup .key { + padding: 0.2em 0.4em; + font-family: inherit; + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + border: var(--style-border); + border-color: var(--anzhiyu-secondtext); + border-bottom: 2px solid var(--anzhiyu-secondtext); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border-radius: 0.25rem; + overflow-wrap: break-word; + overflow-x: auto; + font-weight: 500; + font-size: 0.875em; + margin-right: 4px; + vertical-align: baseline; + line-height: 1; + height: 24px; +} +#menu-mask { + position: fixed; + z-index: 102; + display: none; + width: 100%; + height: 100%; + background: var(--anzhiyu-maskbg); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-animation: 0.6s ease 0s 1 normal none running to_show; + -moz-animation: 0.6s ease 0s 1 normal none running to_show; + -o-animation: 0.6s ease 0s 1 normal none running to_show; + -ms-animation: 0.6s ease 0s 1 normal none running to_show; + animation: 0.6s ease 0s 1 normal none running to_show; + -webkit-transform-style: preserve-3d; +} +#sidebar { + position: absolute; + top: 0; +} +#sidebar #sidebar-menus { + position: fixed; + top: 0; + right: -300px; + z-index: 103; + overflow: hidden auto; + width: 300px; + height: 100%; + background: var(--anzhiyu-background); + -webkit-transition: all 0.5s ease 0s; + -moz-transition: all 0.5s ease 0s; + -o-transition: all 0.5s ease 0s; + -ms-transition: all 0.5s ease 0s; + transition: all 0.5s ease 0s; + padding-top: 30px; + border-left: var(--style-border-always); +} +#sidebar #sidebar-menus .sidebar-menu-item a.menu-child span { + margin-left: 10px; +} +#sidebar #sidebar-menus .back-menu-list-groups { + padding: 0 16px; +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list-title { + font-size: 12px; + color: var(--anzhiyu-secondtext); +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list { + width: calc(100% + 16px); + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: 0 -8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list .back-menu-item { + width: calc(50% - 16px); + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + border-radius: 8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 4px 8px; + padding: 4px 8px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#sidebar #sidebar-menus .sidebar-menu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0 16px; + margin-bottom: 6px; +} +#sidebar #sidebar-menus .sidebar-menu-item a.darkmode_switchbutton { + padding: 4px 8px; + cursor: pointer; + margin: 0; + font-size: 0.9rem; + color: var(--anzhiyu-fontcolor); + width: 100%; + background: var(--anzhiyu-card-bg); + border-radius: 8px; + border: var(--style-border-always); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + font-size: 14px; +} +#sidebar #sidebar-menus span.sidebar-menu-item-title { + font-size: 12px; + color: var(--anzhiyu-secondtext); + margin-left: 16px; +} +#sidebar #sidebar-menus .card-tag-cloud { + padding: 0 11px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: 60px; +} +#sidebar #sidebar-menus .card-tag-cloud a { + color: var(--anzhiyu-fontcolor); + padding: 2px 8px 2px 12px; + margin: 4px; + border-radius: 8px; + border: var(--style-border-always); + background: var(--anzhiyu-card-bg); +} +#sidebar #sidebar-menus .card-tag-cloud a sup { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + margin-left: 4px; +} +#sidebar #sidebar-menus.open { + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#sidebar #sidebar-menus .sidebar-site-data { + padding: 0 10px; +} +#sidebar #sidebar-menus hr { + margin: 20px auto; +} +#sidebar #sidebar-menus .menus_items { + padding: 0 10px; +} +#sidebar #sidebar-menus .menus_items .site-page { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + font-size: 12px; + position: relative; + padding-left: 0.3rem; + color: var(--anzhiyu-fontcolor); +} +#sidebar #sidebar-menus .menus_items .site-page i:first-child { + width: 15%; + text-align: left; + max-height: 20px; + font-size: 16px; +} +#sidebar #sidebar-menus .menus_items .site-page.group > i:last-child { + position: absolute; + top: 0.78em; + right: 18px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide > i:last-child { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide + .menus_item_child { + display: none; +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0; + list-style: none; +} +#sidebar #sidebar-menus .menus_items .menus_item_child .site-page.child { + background: var(--anzhiyu-card-bg); +} +#aside-content .card-tag-cloud a { + border-radius: var(--anzhiyu-border-radius); + display: inline-block; + margin-right: 4px; +} +#aside-content .card-tag-cloud a:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +@media screen and (min-width: 1200px) { + #aside-content .card-tag-cloud a:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .card-tag-cloud a sup { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + margin-left: 2px; +} +span.card-archive-list-count { + width: auto; + text-align: left; + font-size: 1.5rem; + line-height: 0.9; + font-weight: 700; +} +.card-archive-list-count-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: baseline; + -moz-box-align: baseline; + -o-box-align: baseline; + -ms-flex-align: baseline; + -webkit-align-items: baseline; + align-items: baseline; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child { + width: fit-content; + margin-left: 4px; +} +span.card-archive-list-count { + width: auto; + text-align: left; + font-size: 1.1rem; + line-height: 0.9; + font-weight: 700; +} +.card-archive-list-date, +span.card-category-list-name { + font-size: 13px; + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +li.card-archive-list-item, +li.card-category-list-item { + width: 100%; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 0 0 48%; + -ms-flex: 0 0 48%; + flex: 0 0 48%; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + color: var(--anzhiyu-white); + background-color: var(--anzhiyu-theme); + border-radius: var(--anzhiyu-border-radius); + border: 1px solid transparent; +} +@media screen and (min-width: 1200px) { + #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active, + #aside-content .card-categories ul.card-category-list > .card-category-list-item a:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + border-radius: var(--anzhiyu-border-radius); + margin: 4px 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-line-pack: justify; + -webkit-align-content: space-between; + align-content: space-between; + border: var(--style-border); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + width: auto; + -webkit-box-flex: inherit; + -moz-box-flex: inherit; + -o-box-flex: inherit; + box-flex: inherit; + -webkit-flex: inherit; + -ms-flex: inherit; + flex: inherit; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#aside-content .card-info #card-info-btn { + border-radius: var(--anzhiyu-border-radius); +} +#aside-content .aside-list > .aside-list-item .content > time { + display: none; +} +#aside-content .aside-list > .aside-list-item .content > .title { + -webkit-line-clamp: 3; + font-weight: 700; + padding: 2px 0; + width: 100%; + height: 100%; + display: -webkit-box; +} +#aside-content .aside-list > .aside-list-item { + padding: 8px; + padding-top: 6px !important; + padding-bottom: 6px !important; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin: 6px 0; + cursor: pointer; +} +@media screen and (min-width: 1200px) { + #aside-content .aside-list > .aside-list-item:hover { + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } + #aside-content .aside-list > .aside-list-item:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .aside-list > .aside-list-item:hover .thumbnail > img { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 0 dashed var(--anzhiyu-background) !important; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + border-radius: var(--anzhiyu-border-radius); + border: var(--style-border); +} +#aside-content .aside-list > .aside-list-item:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#aside-content .aside-list > .aside-list-item:hover a { + color: var(--anzhiyu-white) !important; +} +.card-widget.card-recent-post { + padding: 0.4rem 1rem !important; +} +#aside-content #card-toc .toc-content .toc-link.active { + border-radius: var(--anzhiyu-border-radius); +} +#aside-content #card-toc .toc-content { + overflow-y: auto; +} +#aside-content #card-toc span.toc-number { + display: none; +} +#aside-content #card-toc .toc-content .toc-link.active { + line-height: 1.2; + border-radius: 12px; + border-left-color: var(--anzhiyu-hovertext); + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); + font-weight: 700; + font-size: 20px; +} +[data-theme="dark"].toc .toc-item.active .toc-link .toc-text { + color: var(--anzhiyu-white); +} +#aside-content #card-toc .toc-content .toc-item.active .toc-link { + opacity: 1; + -ms-filter: none; + filter: none; + border-radius: 8px; +} +#aside-content #card-toc .toc-content .toc-link { + line-height: 1.2; + padding: 8px; + border-left: 0 solid transparent; + border-radius: 12px; + color: var(--anzhiyu-secondtext); + cursor: default; +} +#aside-content #card-toc .toc-content .toc-link:not(.active) span { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + cursor: pointer; + filter: blur(1px); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content #card-toc:hover .toc-content .toc-link:not(.active) span { + filter: blur(0); + opacity: 1; + -ms-filter: none; + filter: none; +} +#aside-content #card-toc .toc-content .toc-link:not(.active) span:hover { + color: var(--anzhiyu-lighttext); +} +.site-data > a .headline, +.site-data > a .length-num { + color: var(--anzhiyu-white); +} +#sidebar-menus.open .site-data > a .headline, +#sidebar-menus.open .site-data > a .length-num { + color: var(--anzhiyu-fontcolor); +} +@media screen and (min-width: 900px) { + #aside-content .sticky_layout { + top: 60px; + } + .post #aside-content .sticky_layout { + top: 80px; + } +} +@media screen and (min-width: 900px) { + #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, + #aside-content .card-categories ul.card-category-list > .card-category-list-item a { + padding: 3px 10px; + } +} +#aside-content .card-widget { + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content .card-widget { + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content hr { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + margin: 1rem 0; + border: 1px dashed var(--anzhiyu-theme-op); +} +#aside-content hr:before { + content: none; +} +#article-container hr:before { + content: none; +} +@media screen and (max-width: 768px) { + #anMusic-page-meting .aplayer.aplayer-withlist .aplayer-list { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +#body-wrap.open { + -webkit-transition-property: -webkit-transform, border-radius; + -moz-transition-property: -moz-transform, border-radius; + -o-transition-property: -o-transform, border-radius; + -ms-transition-property: -ms-transform, border-radius; + transition-property: transform, border-radius; + -webkit-transition-duration: 0ms; + -moz-transition-duration: 0ms; + -o-transition-duration: 0ms; + -ms-transition-duration: 0ms; + transition-duration: 0ms; + -webkit-transform-origin: 0 46%; + -moz-transform-origin: 0 46%; + -o-transform-origin: 0 46%; + -ms-transform-origin: 0 46%; + transform-origin: 0 46%; + -webkit-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -moz-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -o-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -ms-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + border-radius: 12px; + -webkit-transition: 0.3s ease-out; + -moz-transition: 0.3s ease-out; + -o-transition: 0.3s ease-out; + -ms-transition: 0.3s ease-out; + transition: 0.3s ease-out; + z-index: 2; +} +#body-wrap.open #menu-mask { + display: block; +} +#body-wrap.open #post-top-cover { + display: none; + overflow-y: overlay; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; + border-radius: 12px; +} +#body-wrap.open #anMusic-page-meting .aplayer.aplayer-withlist .aplayer-list { + display: none; +} +#vcomment { + font-size: 1.1em; +} +#vcomment .vbtn { + border: none; + background: var(--btn-bg); + color: var(--btn-color); +} +#vcomment .vbtn:hover { + background: var(--btn-hover-color); +} +#vcomment .vimg { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#vcomment .vimg:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment .vcards .vcard .vcontent.expand:before, +#vcomment .vcards .vcard .vcontent.expand:after { + z-index: 22; +} +#waline-wrap { + --waline-font-size: 1.1em; + --waline-theme-color: var(--anzhiyu-main); + --waline-active-color: #ff7242; +} +#waline-wrap .vuser { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#waline-wrap .vuser:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment textarea { + background: url("/img/comment_bg.png") 100% 100% no-repeat; +} +#vcomment textarea:focus { + background-image: none; +} +.fireworks { + position: fixed; + top: 0; + left: 0; + z-index: 9999; + pointer-events: none; +} +.medium-zoom-image--opened { + z-index: 99999 !important; + margin: 0 !important; +} +.medium-zoom-overlay { + z-index: 99999 !important; +} +.mermaid-wrap { + margin: 0 0 20px; + text-align: center; +} +.mermaid-wrap > svg { + height: 100%; +} +.fb-comments iframe { + width: 100% !important; +} +.katex-wrap { + overflow: auto; +} +.katex-wrap::-webkit-scrollbar { + display: none; +} +mjx-container[display], +.has-jax { + overflow-x: auto; + overflow-y: hidden; + line-height: normal !important; +} +.aplayer { + color: #4c4948; +} +#article-container .aplayer { + margin: 0 0 20px; +} +#article-container .aplayer ol, +#article-container .aplayer ul { + margin: 0; + padding: 0; +} +#article-container .aplayer ol li, +#article-container .aplayer ul li { + margin: 0; + padding: 0 15px; +} +#article-container .aplayer ol li:before, +#article-container .aplayer ul li:before { + content: none; +} +.snackbar-css { + border-radius: 5px !important; +} +.bilibili_box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + background: var(--card-bg); + border: var(--style-border); + border-radius: 12px !important; + overflow: hidden; + color: var(--font-color) !important; + text-decoration: none !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-bottom: var(--style-border) !important; + padding: 0 !important; + height: 143px; +} +.bilibili_box:hover { + border-color: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; +} +.bilibili_box:hover .bilibili_info .stat svg path { + fill: var(--anzhiyu-white) !important; +} +@media screen and (max-width: 768px) { + .bilibili_box { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +.bilibili_box .bilibili_cover { + width: 234px; + position: relative; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_cover { + width: 100%; + } +} +.bilibili_box .bilibili_cover img { + width: 100%; + filter: none; + margin: 0 !important; + border-radius: 0 !important; +} +.bilibili_box .bilibili_cover .play_icon { + position: absolute; + width: 45px; + height: 45px; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.bilibili_box .bilibili_cover span { + position: absolute; + bottom: 0px; + right: 5px; + color: var(--anzhiyu-white); +} +.bilibili_box .bilibili_info { + padding: 10px 10px 10px 18px; + line-height: 1; + width: calc(100% - 200px); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_info { + width: 100%; + padding-bottom: 25px; + line-height: 1.5; + } +} +.bilibili_box .bilibili_info .title { + font-size: 1.2rem; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + line-height: 1.5; +} +.bilibili_box .bilibili_info .desc { + font-size: 15px; + margin: 2px 0 4px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_info .desc { + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } +} +.bilibili_box .bilibili_info .stat { + font-size: 15px; +} +.bilibili_box .bilibili_info .stat svg { + margin-right: 3px; + font-size: 18px; + width: 1em; + height: 1em; +} +.bilibili_box .bilibili_info .stat svg path { + fill: var(--font-color); +} +.bilibili_box .bilibili_info .stat span { + margin-right: 10px; + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.bilibili_box .bilibili_info .owner { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + line-height: 1; + font-size: 15px; +} +.bilibili_box .bilibili_info .owner .tip { + color: #f69; + border: 1px solid; + padding: 3px 6px; + font-size: 12px; + border-radius: 5px; + margin: 0 10px 0 0; + background: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.bilibili_box .bilibili_info .owner img { + width: 22px; + height: 22px; + border-radius: 50% !important; + object-fit: cover; + margin: 0 5px 0 0 !important; +} +[data-theme='light'] .bilibili_box .bilibili_info .stat svg, +[data-theme='dark'] .bilibili_cover { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +[data-theme="dark"] div.btns { + filter: brightness(0.7); +} +[data-theme="dark"] div.btns a { + background: 0 0; +} +div.btns { + margin: 0 -8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + overflow: visible; + line-height: 1.8; +} +div.btns b { + font-size: 0.875rem; +} +div.btns.wide > a { + padding-left: 32px; + padding-right: 32px; +} +div.btns.fill > a { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + -ms-box-flex: 1; + box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + width: auto; +} +div.btns.around { + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; +} +div.btns.center { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +div.btns.grid2 > a { + width: calc(100% / 2 - 16px); +} +div.btns.grid3 > a { + width: calc(100% / 3 - 16px); +} +div.btns.grid4 > a { + width: calc(100% / 4 - 16px); +} +div.btns.grid5 > a { + width: calc(100% / 5 - 16px); +} +div.btns a { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + margin: 8px; + margin-top: calc(1.25 * 16px + 32px); + min-width: 120px; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 8px; + text-align: center; + background: #f6f6f6; + border-radius: 4px; +} +div.btns a > i { + background: #2196f3 !important; +} +div.btns a > i:first-child { + color: #fff; + background: #2196f3; +} +div.btns a b { + font-weight: bold; + line-height: 1.3; +} +div.btns a img { + margin: 0.4em auto !important; +} +div.btns a:not([href]) { + cursor: default; + color: inherit; +} +div.btns a[href]:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +div.btns a[href]:hover > i:first-child { + background: var(--anzhiyu-main); +} +div.btns, +div.btns p, +div.btns a { + font-size: 0.8125rem; + color: #555; +} +@media screen and (max-width: 1200px) { + div.btns.grid2 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid2 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid2 > a { + width: calc(100% / 1 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid3 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid3 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid3 > a { + width: calc(100% / 1 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid4 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid4 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid4 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid5 > a { + width: calc(100% / 4 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid5 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid5 > a { + width: calc(100% / 2 - 16px); + } +} +div.btns a > img:first-child, +div.btns a > i:first-child { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + height: 64px; + width: 64px; + -webkit-box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); + margin: 16px 8px 4px 8px; + margin-top: calc(-1.25 * 16px - 32px); + border: 2px solid #fff; + background: #fff; + line-height: 60px; + font-size: 28px; +} +div.btns a > img:first-child.auto, +div.btns a > i:first-child.auto { + width: auto; +} +div.btns a p, +div.btns a b { + margin: 0.25em; + font-weight: normal; + line-height: 1.25; + word-wrap: break-word; +} +div.btns a[href]:hover, +div.btns a[href]:hover b { + color: #ff5722; +} +div.btns a[href]:hover > img:first-child, +div.btns a[href]:hover > i:first-child { + -webkit-transform: scale(1.1) translateY(-8px); + -moz-transform: scale(1.1) translateY(-8px); + -o-transform: scale(1.1) translateY(-8px); + -ms-transform: scale(1.1) translateY(-8px); + transform: scale(1.1) translateY(-8px); + -webkit-box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); +} +div.btns.circle a > img:first-child, +div.btns.circle a > i:first-child { + border-radius: 32px; +} +div.btns.rounded a > img:first-child, +div.btns.rounded a > i:first-child { + border-radius: 16px; +} +#article-container .btn-center { + margin: 0 0 20px; + text-align: center; +} +#article-container .btn-anzhiyu { + display: inline-block; + margin: 0 4px 6px; + padding: 0 15px; + background-color: var(--btn-anzhiyu-color, #2323ef); + color: #fff; + line-height: 2; + border-radius: 8px; +} +#article-container .btn-anzhiyu.blue { + --btn-anzhiyu-color: #428bca; +} +#article-container .btn-anzhiyu.pink { + --btn-anzhiyu-color: #ff69b4; +} +#article-container .btn-anzhiyu.red { + --btn-anzhiyu-color: #f00; +} +#article-container .btn-anzhiyu.purple { + --btn-anzhiyu-color: #6f42c1; +} +#article-container .btn-anzhiyu.orange { + --btn-anzhiyu-color: #ff8c00; +} +#article-container .btn-anzhiyu.green { + --btn-anzhiyu-color: #5cb85c; +} +#article-container .btn-anzhiyu:hover { + background-color: var(--btn-hover-color); +} +#article-container .btn-anzhiyu i + span { + margin-left: 6px; +} +#article-container .btn-anzhiyu:not(.block) + .btn-anzhiyu:not(.block) { + margin: 0 4px 20px; +} +#article-container .btn-anzhiyu.block { + display: block; + margin: 0 0 20px; + width: fit-content; + width: -moz-fit-content; +} +#article-container .btn-anzhiyu.block.center { + margin: 0 auto 20px; +} +#article-container .btn-anzhiyu.block.right { + margin: 0 0 20px auto; +} +#article-container .btn-anzhiyu.larger { + padding: 6px 15px; +} +#article-container .btn-anzhiyu:hover { + text-decoration: none; +} +#article-container .btn-anzhiyu.outline { + border: 1px solid transparent; + border-color: var(--btn-anzhiyu-color, #2323ef); + background-color: transparent; + color: var(--btn-anzhiyu-color, #2323ef); +} +#article-container .btn-anzhiyu.outline:hover { + background-color: var(--btn-anzhiyu-color, #2323ef); +} +#article-container .btn-anzhiyu.outline:hover { + color: #fff !important; +} +.checkbox { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.checkbox input { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + position: relative; + height: 16px; + width: 16px; + -webkit-transition: all 0.15s ease-out 0s; + -moz-transition: all 0.15s ease-out 0s; + -o-transition: all 0.15s ease-out 0s; + -ms-transition: all 0.15s ease-out 0s; + transition: all 0.15s ease-out 0s; + cursor: pointer; + display: inline-block; + outline: none; + border-radius: 2px; + -webkit-flex-shrink: 0; + flex-shrink: 0; + margin-right: 8px; + border: 2px solid #2196f3; + pointer-events: none; +} +.checkbox input[type="checkbox"]:before { + left: 1px; + top: 5px; + width: 0; + height: 2px; + -webkit-transition: all 0.2s ease-in; + -moz-transition: all 0.2s ease-in; + -o-transition: all 0.2s ease-in; + -ms-transition: all 0.2s ease-in; + transition: all 0.2s ease-in; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); +} +.checkbox input[type="checkbox"]:after { + right: 7px; + bottom: 3px; + width: 2px; + height: 0; + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; + -webkit-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -o-transform: rotate(40deg); + -ms-transform: rotate(40deg); + transform: rotate(40deg); + -webkit-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -ms-transform: rotate(40deg); + -o-transform: rotate(40deg); + -webkit-transition-delay: 0.25s; + -moz-transition-delay: 0.25s; + -o-transition-delay: 0.25s; + -ms-transition-delay: 0.25s; + transition-delay: 0.25s; +} +.checkbox input[type="checkbox"]:checked { + background: #2196f3; +} +.checkbox input[type="checkbox"]:checked:before { + left: 0; + top: 7px; + width: 6px; + height: 2px; +} +.checkbox input[type="checkbox"]:checked:after { + right: 3px; + bottom: 1px; + width: 2px; + height: 10px; +} +.checkbox.minus input[type="checkbox"]:before { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:after { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:checked:after { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:before { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:after { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 5px; + top: 1px; + width: 2px; + height: 0; +} +.checkbox.plus input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:checked:after { + left: 5px; + top: 1px; + width: 2px; + height: 10px; +} +.checkbox.times input[type="checkbox"]:before { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + left: 3px; + top: 1px; + width: 0; + height: 2px; +} +.checkbox.times input[type="checkbox"]:after { + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -o-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); + right: 3px; + top: 1px; + width: 0; + height: 2px; +} +.checkbox.times input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.times input[type="checkbox"]:checked:after { + right: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox input[type="radio"] { + border-radius: 50%; +} +.checkbox input[type="radio"]:before { + content: ""; + display: block; + width: 8px; + height: 8px; + border-radius: 50%; + margin: 2px; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + -o-transition: all 0.25s ease-out; + -ms-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; +} +.checkbox input[type="radio"]:checked:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + background: var(--text-bg-hover); +} +.checkbox.red input { + border-color: #fe5f58; +} +.checkbox.red input[type="checkbox"]:checked { + background: #fe5f58; +} +.checkbox.red input[type="radio"]:checked:before { + background: #fe5f58; +} +.checkbox.green input { + border-color: #3dc550; +} +.checkbox.green input[type="checkbox"]:checked { + background: #3dc550; +} +.checkbox.green input[type="radio"]:checked:before { + background: #3dc550; +} +.checkbox.yellow input { + border-color: #ffbd2b; +} +.checkbox.yellow input[type="checkbox"]:checked { + background: #ffbd2b; +} +.checkbox.yellow input[type="radio"]:checked:before { + background: #ffbd2b; +} +.checkbox.cyan input { + border-color: #1bcdfc; +} +.checkbox.cyan input[type="checkbox"]:checked { + background: #1bcdfc; +} +.checkbox.cyan input[type="radio"]:checked:before { + background: #1bcdfc; +} +.checkbox.blue input { + border-color: #2196f3; +} +.checkbox.blue input[type="checkbox"]:checked { + background: #2196f3; +} +.checkbox.blue input[type="radio"]:checked:before { + background: #2196f3; +} +.checkbox p { + display: inline-block; + margin-top: 2px !important; + margin-bottom: 0 !important; +} +.checkbox input[type="checkbox"]:before, +.checkbox input[type="checkbox"]:after { + position: absolute; + content: ""; + background: #fff; +} +details[open]:not(.tk-admin-config-group) { + background: var(--anzhiyu-card-bg); +} +[data-theme="dark"] details.folding-tag { + background: transparent; +} +details.folding-tag { + display: block; + padding: 16px; + margin: 1em 0; + border-radius: 4px; + font-size: var(--global-font-size); + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + border: 1px solid #f6f6f6; +} +details.folding-tag summary { + cursor: pointer; + padding: 16px; + margin: -16px; + border-radius: 4px; + color: rgba(68,68,68,0.7); + font-size: 0.875rem !important; + font-weight: bold; + position: relative; + line-height: normal; +} +details.folding-tag summary > p, +details.folding-tag summary > h1, +details.folding-tag summary > h2, +details.folding-tag summary > h3, +details.folding-tag summary > h4, +details.folding-tag summary > h5, +details.folding-tag summary > h6 { + display: inline; + border-bottom: none !important; +} +details.folding-tag summary:hover { + color: #444; +} +details.folding-tag summary:hover:after { + position: absolute; + content: '+'; + text-align: center; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + right: 16px; +} +details.folding-tag >summary { + background: var(--anzhiyu-card-bg); +} +details.folding-tag[purple] { + border-color: #fae7fd; +} +details.folding-tag[purple] >summary { + background: #fae7fd; +} +details.folding-tag[blue] { + border-color: #e8f4fd; +} +details.folding-tag[blue] >summary { + background: #e8f4fd; +} +details.folding-tag[cyan] { + border-color: #e8fafe; +} +details.folding-tag[cyan] >summary { + background: #e8fafe; +} +details.folding-tag[green] { + border-color: #ebf9ed; +} +details.folding-tag[green] >summary { + background: #ebf9ed; +} +details.folding-tag[yellow] { + border-color: #fff8e9; +} +details.folding-tag[yellow] >summary { + background: #fff8e9; +} +details.folding-tag[orange] { + border-color: #fdf1e7; +} +details.folding-tag[orange] >summary { + background: #fdf1e7; +} +details.folding-tag[red] { + border-color: #feefee; +} +details.folding-tag[red] >summary { + background: #feefee; +} +details.folding-tag[open] { + border-color: rgba(68,68,68,0.2); +} +details.folding-tag[open] >summary { + border-bottom: 1px solid rgba(68,68,68,0.2); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +details.folding-tag[open][purple] { + border-color: rgba(208,23,238,0.3); +} +details.folding-tag[open][purple] >summary { + border-bottom-color: rgba(208,23,238,0.3); +} +details.folding-tag[open][blue] { + border-color: rgba(33,150,243,0.3); +} +details.folding-tag[open][blue] >summary { + border-bottom-color: rgba(33,150,243,0.3); +} +details.folding-tag[open][cyan] { + border-color: rgba(27,205,252,0.3); +} +details.folding-tag[open][cyan] >summary { + border-bottom-color: rgba(27,205,252,0.3); +} +details.folding-tag[open][green] { + border-color: rgba(61,197,80,0.3); +} +details.folding-tag[open][green] >summary { + border-bottom-color: rgba(61,197,80,0.3); +} +details.folding-tag[open][yellow] { + border-color: rgba(255,189,43,0.3); +} +details.folding-tag[open][yellow] >summary { + border-bottom-color: rgba(255,189,43,0.3); +} +details.folding-tag[open][orange] { + border-color: rgba(236,118,22,0.3); +} +details.folding-tag[open][orange] >summary { + border-bottom-color: rgba(236,118,22,0.3); +} +details.folding-tag[open][red] { + border-color: rgba(254,95,88,0.3); +} +details.folding-tag[open][red] >summary { + border-bottom-color: rgba(254,95,88,0.3); +} +details.folding-tag[open] >summary { + color: #444; + margin-bottom: 0; +} +details.folding-tag[open] >summary:hover:after { + content: '-'; +} +details.folding-tag[open] >div.content { + padding: 16px; + margin: -16px; + margin-top: 0; +} +details.folding-tag[open] >div.content p>a:hover { + text-decoration: underline; +} +details.folding-tag[open] >div.content > p:first-child, +details.folding-tag[open] >div.content > .tabs:first-child, +details.folding-tag[open] >div.content > ul:first-child, +details.folding-tag[open] >div.content > ol:first-child, +details.folding-tag[open] >div.content > .highlight:first-child, +details.folding-tag[open] >div.content > .note:first-child, +details.folding-tag[open] >div.content > details:first-child { + margin-top: 0; +} +details.folding-tag[open] >div.content > p:last-child, +details.folding-tag[open] >div.content > .tabs:last-child, +details.folding-tag[open] >div.content > ul:last-child, +details.folding-tag[open] >div.content > ol:last-child, +details.folding-tag[open] >div.content > .highlight:last-child, +details.folding-tag[open] >div.content > .note:last-child, +details.folding-tag[open] >div.content > details:last-child { + margin-bottom: 0; +} +[data-theme="dark"] details[open] > div.content { + padding: 16px; + margin: -16px; + margin-top: 0; + background: transparent; + color: rgba(255,255,255,0.6); +} +[data-theme="dark"] details > summary { + filter: brightness(1); + background: var(--anzhiyu-card-bg) !important; +} +#content-inner figure.gallery-group { + position: relative; + float: left; + overflow: hidden; + margin: 6px 4px; + width: calc(50% - 8px); + height: 250px; + border-radius: 8px; + background: #000; + -webkit-transform: translate3d(0, 0, 0); +} +@media screen and (max-width: 600px) { + #content-inner figure.gallery-group { + width: calc(100% - 8px); + } +} +#content-inner figure.gallery-group:hover img { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group:hover .gallery-group-name::after { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group:hover p { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group img { + position: relative; + margin: 0; + max-width: none; + width: calc(100% + 20px); + height: 250px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; + -o-transition: all 0.3s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; + transition: all 0.3s, filter 375ms ease-in 0.2s; + -webkit-transform: translate3d(-10px, 0, 0); + -moz-transform: translate3d(-10px, 0, 0); + -o-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + object-fit: cover; +} +#content-inner figure.gallery-group figcaption { + position: absolute; + top: 0; + left: 0; + padding: 30px; + width: 100%; + height: 100%; + color: #fff; + text-transform: uppercase; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +#content-inner figure.gallery-group figcaption > a { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#content-inner figure.gallery-group p { + margin: 0; + padding: 8px 0 0; + letter-spacing: 1px; + font-size: 1.1em; + line-height: 1.5; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; + -moz-transition: opacity 0.35s, -moz-transform 0.35s; + -o-transition: opacity 0.35s, -o-transform 0.35s; + -ms-transition: opacity 0.35s, -ms-transform 0.35s; + transition: opacity 0.35s, transform 0.35s; + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + -webkit-line-clamp: 4; +} +#content-inner figure.gallery-group .gallery-group-name { + position: relative; + margin: 0; + padding: 8px 0; + font-weight: bold; + font-size: 1.65em; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#content-inner figure.gallery-group .gallery-group-name:after { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: #fff; + content: ''; + -webkit-transition: -webkit-transform 0.35s; + -moz-transition: -moz-transform 0.35s; + -o-transition: -o-transform 0.35s; + -ms-transition: -ms-transform 0.35s; + transition: transform 0.35s; + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#content-inner .gallery-group-main { + overflow: auto; + padding: 0 0 16px; +} +#content-inner .gallery { + margin: 0 0 16px; + text-align: center; +} +#content-inner .gallery .fj-gallery { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#content-inner .gallery .fj-gallery .img-alt { + display: none; +} +#content-inner .gallery .fj-gallery.lazyload + button { + display: inline-block; +} +#content-inner .gallery .fj-gallery .gallery-data { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + visibility: hidden; +} +#content-inner .gallery button { + display: none; + margin-top: 25px; + padding: 10px; + width: 9em; + border-radius: 5px; + background: var(--btn-bg); + color: var(--btn-color); + font-weight: bold; + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#content-inner .gallery button > * { + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +#content-inner .gallery button i { + opacity: 1; + -ms-filter: none; + filter: none; + font-size: 1.1rem; +} +#content-inner .gallery button:hover { + background: var(--btn-hover-color); +} +#content-inner .gallery button:hover i { + margin-left: 2px; +} +blockquote.pullquote { + position: relative; + max-width: 45%; + font-size: 110%; +} +blockquote.pullquote.left { + float: left; + margin: 1em 0.5em 0 0; +} +blockquote.pullquote.right { + float: right; + margin: 1em 0 0 0.5em; +} +.video-container { + position: relative; + overflow: hidden; + margin-bottom: 16px; + padding-top: 56.25%; + height: 0; +} +.video-container iframe { + position: absolute; + top: 0; + left: 0; + margin-top: 0; + width: 100%; + height: 100%; +} +.hide-inline > .hide-button, +.hide-block > .hide-button { + display: inline-block; + padding: 5px 18px; + background: #425aef; + color: var(--white); +} +.hide-inline > .hide-button:hover, +.hide-block > .hide-button:hover { + background-color: var(--btn-hover-color); +} +.hide-inline > .hide-button.open, +.hide-block > .hide-button.open { + display: none; +} +.hide-inline > .hide-button.open + div, +.hide-block > .hide-button.open + div { + display: block; +} +.hide-inline > .hide-button.open + span, +.hide-block > .hide-button.open + span { + display: inline; +} +.hide-inline > .hide-content, +.hide-block > .hide-content { + display: none; +} +.hide { + display: none; +} +.hide-inline > .hide-button { + margin: 0 6px; +} +.hide-inline > .hide-content { + margin: 0 6px; +} +.hide-block { + margin: 0 0 16px; +} +.toggle { + margin-bottom: 20px; + border: 1px solid #f0f0f0; +} +.toggle > .toggle-button { + padding: 6px 15px; + background: #f0f0f0; + color: #1f2d3d; + cursor: pointer; +} +.toggle > .toggle-content { + margin: 30px 24px; +} +.md .img { + object-fit: contain; +} +img.inline { + display: inline !important; + vertical-align: middle; + -webkit-transform: translateY(-4px); + -moz-transform: translateY(-4px); + -o-transform: translateY(-4px); + -ms-transform: translateY(-4px); + transform: translateY(-4px); +} +p .img-alt { + display: inline-block; + width: 100%; +} +s, +del { + color: #8e8e8e; + text-decoration-color: #8e8e8e; +} +u { + color: #444; + text-decoration: none; + border-bottom: 1px solid #fe5f58; +} +emp { + color: #444; + border-bottom: 4px dotted #fe5f58; +} +wavy { + color: #444; + text-decoration-style: wavy; + text-decoration-line: underline; + text-decoration-color: #fe5f58; +} +psw { + color: transparent; + background: #a1a1a1; + border-radius: 2px; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +psw:hover { + color: var(--anzhiyu-font); + background: none; +} +kbd { + display: inline-block; + color: #666; + font: bold 9pt arial; + text-decoration: none; + text-align: center; + padding: 2px 5px; + margin: 0 5px; + background: #eff0f2; + -moz-border-radius: 4px; + border-radius: 4px; + border-top: 1px solid #f5f5f5; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -moz-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + text-shadow: 0 1px 0 #f5f5f5; +} +#article-container .inline-img { + display: inline; + margin: 0 3px; + height: 1.1em; + vertical-align: text-bottom; +} +.introduction-card { + position: relative; +} +.introduction-card .img-alt { + display: none; +} +.introduction-card-bottom { + background-color: transparent; + color: inherit; + -webkit-transition: background-color 0.3s ease, color 0.3s ease; + -moz-transition: background-color 0.3s ease, color 0.3s ease; + -o-transition: background-color 0.3s ease, color 0.3s ease; + -ms-transition: background-color 0.3s ease, color 0.3s ease; + transition: background-color 0.3s ease, color 0.3s ease; +} +.introduction-card:active .introduction-card-bottom { + background-color: var(--anzhiyu-main); + color: #fff; +} +.introduction-card:active .introduction-card-bottom .left .info .subTitle { + color: #fff !important; +} +.introduction-card:active .introduction-card-bottom { + -webkit-animation: resetAnimation 3s 1s forwards; + -moz-animation: resetAnimation 3s 1s forwards; + -o-animation: resetAnimation 3s 1s forwards; + -ms-animation: resetAnimation 3s 1s forwards; + animation: resetAnimation 3s 1s forwards; +} +.introduction-card { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 60%; + margin: 0 auto; + border-radius: 15px; + -webkit-box-shadow: var(--anzhiyu-shadow-blackdeep); + box-shadow: var(--anzhiyu-shadow-blackdeep); + height: 520px; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + cursor: pointer; +} +@media screen and (max-width: 1200px) { + .introduction-card { + width: 80%; + } +} +@media screen and (max-width: 768px) { + .introduction-card { + width: 100%; + } +} +.introduction-card:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); +} +.introduction-card .introduction-card-top { + height: 80%; + width: 100%; + overflow: hidden; + border-radius: 15px 15px 0 0; + position: relative; +} +.introduction-card .introduction-card-top .int-card-info { + position: absolute; + padding: 20px; +} +.introduction-card .introduction-card-top .int-card-info .int-tip { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 0.6rem; + margin-bottom: 0.5rem; + color: var(--anzhiyu-white); +} +.introduction-card .introduction-card-top .int-card-info .int-cardTitle { + font-size: 36px; + color: var(--anzhiyu-white); + font-weight: 700; + line-height: 1.1; +} +.introduction-card .introduction-card-top img { + width: 100%; + height: 100%; + border-radius: 0px !important; + margin: 0 !important; +} +.introduction-card .introduction-card-bottom { + height: 20%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + border-radius: 0 0 15px 15px; +} +.introduction-card .introduction-card-bottom .left { + width: 70%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.introduction-card .introduction-card-bottom .left .info { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.introduction-card .introduction-card-bottom .left .info .title { + font-weight: 600; + line-height: 26px; +} +.introduction-card .introduction-card-bottom .left .info .subTitle { + line-height: 14px; + font-size: 14px; + color: var(--anzhiyu-gray); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +.introduction-card .introduction-card-bottom .left img { + width: 2.875rem; + height: 2.875rem; + margin: 0 20px !important; + border-radius: 12px !important; +} +.introduction-card .introduction-card-bottom .right { + width: 30%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.introduction-card .introduction-card-bottom .right a { + width: 100%; + text-align: center; + background: #efeef2; + color: var(--anzhiyu-main) !important; + border-radius: 50px; + height: 35px; + line-height: 35px; + margin-right: 20px; +} +.introduction-card .introduction-card-bottom .right a:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +@-moz-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@-webkit-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@-o-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +.hl-label { + padding: 2px 4px; + border-radius: 3px; + color: #fff; +} +.hl-label.default { + background-color: #2323ef; +} +.hl-label.blue { + background-color: #428bca; +} +.hl-label.pink { + background-color: #ff69b4; +} +.hl-label.red { + background-color: #f00; +} +.hl-label.purple { + background-color: #6f42c1; +} +.hl-label.orange { + background-color: #ff8c00; +} +.hl-label.green { + background-color: #5cb85c; +} +audio, +video { + border-radius: 4px; + max-width: 100%; +} +video { + z-index: 1; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +video:hover { + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); +} +div.video { + line-height: 0; + text-align: center; +} +div.videos { + max-width: calc(100% + 2 * 4px); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; + margin: 1em -4px; +} +div.videos .video, +div.videos iframe { + width: 100%; + margin: 4px; +} +div.videos iframe { + border-radius: 4px; + width: 100%; + min-height: 300px; +} +div.videos.left { + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} +div.videos.center { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +div.videos.right { + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} +div.videos.stretch { + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +div.videos[col='1'] .video, +div.videos[col='1'] iframe { + width: 100%; +} +div.videos[col='2'] .video, +div.videos[col='2'] iframe { + width: calc(50% - 2 * 4px); +} +div.videos[col='3'] .video, +div.videos[col='3'] iframe { + width: calc(33.33% - 2 * 4px); +} +div.videos[col='4'] .video, +div.videos[col='4'] iframe { + width: calc(25% - 2 * 4px); +} +[data-theme="dark"] audio, +[data-theme="dark"] video { + filter: brightness(0.7); +} +.note { + position: relative; + margin: 0 0 20px; + padding: 15px; + border-radius: 3px; +} +.note.icon-padding { + padding-left: 3em; +} +.note > .note-icon { + position: absolute; + top: calc(50% - 0.5em); + left: 0.8em; + font-size: larger; +} +.note.blue { + color: #4c4948; +} +.note.blue.disabled { + background: #e3eef7 !important; +} +.note.blue:not(.disabled) { + border-left-color: #428bca !important; +} +.note.blue:not(.disabled).modern { + border-left-color: transparent !important; + color: #428bca; +} +.note.blue:not(.disabled):not(.simple) { + background: #e3eef7 !important; +} +.note.blue::before { + color: #428bca; +} +.note.blue > .note-icon { + color: #428bca; +} +.note.pink { + color: #4c4948; +} +.note.pink.disabled { + background: #ffe9f4 !important; +} +.note.pink:not(.disabled) { + border-left-color: #ff69b4 !important; +} +.note.pink:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff69b4; +} +.note.pink:not(.disabled):not(.simple) { + background: #ffe9f4 !important; +} +.note.pink::before { + color: #ff69b4; +} +.note.pink > .note-icon { + color: #ff69b4; +} +.note.red { + color: #4c4948; +} +.note.red.disabled { + background: #ffd9d9 !important; +} +.note.red:not(.disabled) { + border-left-color: #f00 !important; +} +.note.red:not(.disabled).modern { + border-left-color: transparent !important; + color: #f00; +} +.note.red:not(.disabled):not(.simple) { + background: #ffd9d9 !important; +} +.note.red::before { + color: #f00; +} +.note.red > .note-icon { + color: #f00; +} +.note.purple { + color: #4c4948; +} +.note.purple.disabled { + background: #e9e3f6 !important; +} +.note.purple:not(.disabled) { + border-left-color: #6f42c1 !important; +} +.note.purple:not(.disabled).modern { + border-left-color: transparent !important; + color: #6f42c1; +} +.note.purple:not(.disabled):not(.simple) { + background: #e9e3f6 !important; +} +.note.purple::before { + color: #6f42c1; +} +.note.purple > .note-icon { + color: #6f42c1; +} +.note.orange { + color: #4c4948; +} +.note.orange.disabled { + background: #ffeed9 !important; +} +.note.orange:not(.disabled) { + border-left-color: #ff8c00 !important; +} +.note.orange:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff8c00; +} +.note.orange:not(.disabled):not(.simple) { + background: #ffeed9 !important; +} +.note.orange::before { + color: #ff8c00; +} +.note.orange > .note-icon { + color: #ff8c00; +} +.note.green { + color: #4c4948; +} +.note.green.disabled { + background: #e7f4e7 !important; +} +.note.green:not(.disabled) { + border-left-color: #5cb85c !important; +} +.note.green:not(.disabled).modern { + border-left-color: transparent !important; + color: #5cb85c; +} +.note.green:not(.disabled):not(.simple) { + background: #e7f4e7 !important; +} +.note.green::before { + color: #5cb85c; +} +.note.green > .note-icon { + color: #5cb85c; +} +.note.simple { + border: 1px solid #eee; + border-left-width: 5px; + color: var(--font-color); +} +.note.modern { + border: 1px solid transparent !important; + background-color: #f5f5f5; + color: #4c4948; +} +.note.flat { + border: initial; + border-left: 5px solid #eee; + background-color: #f9f9f9; + color: #4c4948; +} +.note.flat a { + color: #4c4948 !important; +} +.note.flat a:hover { + color: var(--anzhiyu-white) !important; +} +.note h2, +.note h3, +.note h4, +.note h5, +.note h6 { + margin-top: 3px; + margin-bottom: 0; + padding-top: 0 !important; + border-bottom: initial; +} +.note p:first-child, +.note ul:first-child, +.note ol:first-child, +.note table:first-child, +.note pre:first-child, +.note blockquote:first-child, +.note img:first-child { + margin-top: 0 !important; +} +.note p:last-child, +.note ul:last-child, +.note ol:last-child, +.note table:last-child, +.note pre:last-child, +.note blockquote:last-child, +.note img:last-child { + margin-bottom: 0 !important; +} +.note:not(.no-icon) { + padding-left: 3em; +} +.note:not(.no-icon)::before { + position: absolute; + top: calc(50% - 0.95em); + left: 0.8em; + font-size: larger; +} +.note.default.flat { + background: #f7f7f7; +} +.note.default.modern { + border-color: #e1e1e1; + background: #f3f3f3; + color: #666; +} +.note.default.modern a:not(.btn) { + color: #666; +} +.note.default.modern a:not(.btn):hover { + color: #454545; +} +.note.default:not(.modern) { + border-left-color: #777; +} +.note.default:not(.modern) h2, +.note.default:not(.modern) h3, +.note.default:not(.modern) h4, +.note.default:not(.modern) h5, +.note.default:not(.modern) h6 { + color: #777; +} +.note.default:not(.no-icon)::before { + content: '\f0a9'; +} +.note.default:not(.no-icon):not(.modern)::before { + color: #777; +} +.note.primary.flat { + background: #f5f0fa; +} +.note.primary.modern { + border-color: #e1c2ff; + background: #f3daff; + color: #6f42c1; +} +.note.primary.modern a:not(.btn) { + color: #6f42c1; +} +.note.primary.modern a:not(.btn):hover { + color: #453298; +} +.note.primary:not(.modern) { + border-left-color: #6f42c1; +} +.note.primary:not(.modern) h2, +.note.primary:not(.modern) h3, +.note.primary:not(.modern) h4, +.note.primary:not(.modern) h5, +.note.primary:not(.modern) h6 { + color: #6f42c1; +} +.note.primary:not(.no-icon)::before { + content: '\f055'; +} +.note.primary:not(.no-icon):not(.modern)::before { + color: #6f42c1; +} +.note.info.flat { + background: #eef7fa; +} +.note.info.modern { + border-color: #b3e5ef; + background: #d9edf7; + color: #31708f; +} +.note.info.modern a:not(.btn) { + color: #31708f; +} +.note.info.modern a:not(.btn):hover { + color: #215761; +} +.note.info:not(.modern) { + border-left-color: #428bca; +} +.note.info:not(.modern) h2, +.note.info:not(.modern) h3, +.note.info:not(.modern) h4, +.note.info:not(.modern) h5, +.note.info:not(.modern) h6 { + color: #428bca; +} +.note.info:not(.no-icon)::before { + content: '\f05a'; +} +.note.info:not(.no-icon):not(.modern)::before { + color: #428bca; +} +.note.success.flat { + background: #eff8f0; +} +.note.success.modern { + border-color: #d0e6be; + background: #dff0d8; + color: #3c763d; +} +.note.success.modern a:not(.btn) { + color: #3c763d; +} +.note.success.modern a:not(.btn):hover { + color: #32562c; +} +.note.success:not(.modern) { + border-left-color: #5cb85c; +} +.note.success:not(.modern) h2, +.note.success:not(.modern) h3, +.note.success:not(.modern) h4, +.note.success:not(.modern) h5, +.note.success:not(.modern) h6 { + color: #5cb85c; +} +.note.success:not(.no-icon)::before { + content: '\f058'; +} +.note.success:not(.no-icon):not(.modern)::before { + color: #5cb85c; +} +.note.warning.flat { + background: #fdf8ea; +} +.note.warning.modern { + border-color: #fae4cd; + background: #fcf4e3; + color: #8a6d3b; +} +.note.warning.modern a:not(.btn) { + color: #8a6d3b; +} +.note.warning.modern a:not(.btn):hover { + color: #714f30; +} +.note.warning:not(.modern) { + border-left-color: #f0ad4e; +} +.note.warning:not(.modern) h2, +.note.warning:not(.modern) h3, +.note.warning:not(.modern) h4, +.note.warning:not(.modern) h5, +.note.warning:not(.modern) h6 { + color: #f0ad4e; +} +.note.warning:not(.no-icon)::before { + content: '\f06a'; +} +.note.warning:not(.no-icon):not(.modern)::before { + color: #f0ad4e; +} +.note.danger.flat { + background: #fcf1f2; +} +.note.danger.modern { + border-color: #ebcdd2; + background: #f2dfdf; + color: #a94442; +} +.note.danger.modern a:not(.btn) { + color: #a94442; +} +.note.danger.modern a:not(.btn):hover { + color: #84333f; +} +.note.danger:not(.modern) { + border-left-color: #d9534f; +} +.note.danger:not(.modern) h2, +.note.danger:not(.modern) h3, +.note.danger:not(.modern) h4, +.note.danger:not(.modern) h5, +.note.danger:not(.modern) h6 { + color: #d9534f; +} +.note.danger:not(.no-icon)::before { + content: '\f056'; +} +.note.danger:not(.no-icon):not(.modern)::before { + color: #d9534f; +} +.site-card-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: -8px; + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +.site-card { + margin: 8px; + width: calc(100% / 4 - 16px); + display: block; + line-height: 1.4; + height: 100%; +} +@media screen and (min-width: 2048px) { + .site-card { + width: calc(100% / 5 - 16px); + } +} +@media screen and (max-width: 768px) { + .site-card { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + .site-card { + width: calc(100% / 2 - 16px); + } +} +.site-card .img { + width: 100%; + height: 120px; + overflow: hidden; + border-radius: 6px; + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); + background: #f6f6f6; +} +@media screen and (max-width: 500px) { + .site-card .img { + height: 100px; + } +} +.site-card .img img { + width: 100%; + height: 100%; + pointer-events: none; + -webkit-transition: -webkit-transform 2s ease; + -moz-transition: -moz-transform 2s ease; + -o-transition: -o-transform 2s ease; + -ms-transition: -ms-transform 2s ease; + transition: transform 2s ease; + object-fit: cover; +} +.site-card .info { + margin-top: 8px; +} +.site-card .info img { + width: 32px; + height: 32px; + pointer-events: none; + border-radius: 16px; + float: left; + margin-right: 8px; + margin-top: 2px; +} +.site-card .info span { + display: block; +} +.site-card .info .title { + font-weight: 600; + font-size: var(--global-font-size); + color: #444; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +.site-card .info .desc { + font-size: var(--global-font-size); + word-wrap: break-word; + line-height: 1.2; + color: #888; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 2; +} +.site-card .img { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +.site-card:hover .img { + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); +} +.site-card:hover .info .title { + color: #ff5722; +} +p.p.subtitle { + font-weight: bold; + color: #44b299; + font-size: 1.25rem !important; + padding-top: 1.5rem; +} +p.p.subtitle:first-child { + padding-top: 1rem; +} +span.p.left, +p.p.left { + display: block; + text-align: left; +} +span.p.center, +p.p.center { + display: block; + text-align: center; +} +span.p.right, +p.p.right { + display: block; + text-align: right; +} +span.p.small, +p.p.small { + font-size: var(--global-font-size); +} +span.p.large, +p.p.large { + font-size: 2.5rem; + line-height: 1.4; +} +span.p.huge, +p.p.huge { + font-size: 4rem; + line-height: 1.4; +} +span.p.ultra, +p.p.ultra { + font-size: 6rem; + line-height: 1.4; +} +span.p.small, +p.p.small, +span.p.large, +p.p.large, +span.p.huge, +p.p.huge, +span.p.ultra, +p.p.ultra { + margin: 0; + padding: 0; +} +span.p.bold, +p.p.bold { + font-weight: bold; +} +span.p.h1, +p.p.h1, +span.p.h2, +p.p.h2 { + padding-bottom: 0.2rem; + font-weight: 500; +} +span.p.h1, +p.p.h1 { + font-size: 1.625rem; + color: var(--color-h1); + padding-top: 2em; +} +span.p.h2, +p.p.h2 { + font-size: 1.625rem; + color: var(--color-h2); + padding-top: 2em; + border-bottom: 1px solid rgba(68,68,68,0.1); +} +span.p.h3, +p.p.h3 { + font-size: 1.375rem; + color: var(--color-h3); + padding-top: 2em; +} +span.p.h4, +p.p.h4 { + font-size: 1.125rem; + color: var(--color-h4); + padding-top: 2em; +} +span.p.h5, +p.p.h5 { + font-size: 1rem; + color: var(--color-h5); + padding-top: 1.5em; +} +span.p.red, +p.p.red { + color: #e8453c; +} +span.p.yellow, +p.p.yellow { + color: #fcec60; +} +span.p.green, +p.p.green { + color: #3dc550; +} +span.p.cyan, +p.p.cyan { + color: #1bcdfc; +} +span.p.blue, +p.p.blue { + color: #2196f3; +} +span.p.purple, +p.p.purple { + color: #9c27b0; +} +span.p.gray, +p.p.gray { + color: #999; +} +#article-container .tabs { + position: relative; + margin: 0 0 20px; + border: 3px solid var(--anzhiyu-secondbg); + margin: 1rem 0 !important; + border-radius: 12px; + overflow: hidden; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + padding: 8px; +} +#article-container .tabs > .nav-tabs { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin: 0; + padding: 16px; + background: var(--anzhiyu-card-bg); +} +#article-container .tabs > .nav-tabs > .tab { + padding: 8px 18px; + background: var(--anzhiyu-secondbg); + color: var(--anzhiyu-fontcolor); + line-height: 1; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; + margin: 4px; + border: var(--style-border-always); + border-radius: 8px; +} +#article-container .tabs > .nav-tabs > .tab i { + width: 1.5em; +} +#article-container .tabs > .nav-tabs > .tab.active { + border: var(--style-border-hover-always); + background: var(--anzhiyu-background); + border-radius: 8px; + cursor: default; +} +#article-container .tabs > .nav-tabs > .tab:not(.active):hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border-hover-always); +} +#article-container .tabs > .nav-tabs.no-default ~ .tab-to-top { + display: none; +} +#article-container .tabs > .tab-contents .tab-item-content { + position: relative; + display: none; + background: var(--anzhiyu-background); + border: var(--style-border-always); + padding: 1.2rem 1.2rem; + border-radius: 8px; +} +@media screen and (max-width: 768px) { + #article-container .tabs > .tab-contents .tab-item-content { + padding: 24px 14px; + } +} +#article-container .tabs > .tab-contents .tab-item-content.active { + display: block; +} +#article-container .tabs > .tab-to-top { + padding: 0 16px 10px 0; + width: 100%; + text-align: right; +} +#article-container .tabs > .tab-to-top button { + color: #99a9bf; +} +#article-container .tabs > .tab-to-top button:hover { + color: #425aef; +} +@-moz-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +#article-container .timeline { + margin: 0 0 20px 10px; + padding: 14px 20px 5px; + border-left: 2px solid var(--timeline-color, #425aef); +} +#article-container .timeline.blue { + --timeline-color: #428bca; + --timeline-bg: rgba(66,139,202, 0.2); +} +#article-container .timeline.pink { + --timeline-color: #ff69b4; + --timeline-bg: rgba(255,105,180, 0.2); +} +#article-container .timeline.red { + --timeline-color: #f00; + --timeline-bg: rgba(255,0,0, 0.2); +} +#article-container .timeline.purple { + --timeline-color: #6f42c1; + --timeline-bg: rgba(111,66,193, 0.2); +} +#article-container .timeline.orange { + --timeline-color: #ff8c00; + --timeline-bg: rgba(255,140,0, 0.2); +} +#article-container .timeline.green { + --timeline-color: #5cb85c; + --timeline-bg: rgba(92,184,92, 0.2); +} +#article-container .timeline .timeline-item { + margin: 0 0 15px; +} +#article-container .timeline .timeline-item:hover .item-circle:before { + border-color: var(--timeline-color, #425aef); +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { + font-weight: 600; + font-size: 1.2em; +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { + left: -28px; + border: 4px solid var(--timeline-color, #425aef); +} +#article-container .timeline .timeline-item.headline:hover .item-circle:before { + border-color: var(--pseudo-hover); +} +#article-container .timeline .timeline-item .timeline-item-title { + position: relative; +} +#article-container .timeline .timeline-item .item-circle:before { + position: absolute; + top: 50%; + left: -27px; + width: 6px; + height: 6px; + border: 3px solid var(--pseudo-hover); + border-radius: 50%; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#article-container .timeline .timeline-item .item-circle > p { + margin: 0 0 8px; + font-weight: 500; +} +#article-container .timeline .timeline-item .timeline-item-content { + position: relative; + padding: 12px 15px; + border-radius: 0.5rem; + border: var(--style-border-always); + font-size: 0.93em; +} +#article-container .timeline .timeline-item .timeline-item-content > :last-child { + margin-bottom: 0; +} +#article-container .timeline + .timeline { + margin-top: -20px; +} +.tip { + padding: 6px 20px; + position: relative; + color: #fff; + margin-bottom: 20px; + background: -webkit-linear-gradient(0deg, #41363c, #494648); + background: -moz-linear-gradient(0deg, #41363c, #494648); + background: -o-linear-gradient(0deg, #41363c, #494648); + background: -ms-linear-gradient(0deg, #41363c, #494648); + background: linear-gradient(90deg, #41363c, #494648); + padding: 6px 20px; + border-radius: 10px; + -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); + -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); + box-shadow: 0 3px 5px rgba(50,50,50,0.5); +} +.tip p { + margin: 0 !important; + padding: 0.5rem 0; +} +.tip:before { + background: -webkit-linear-gradient(90deg, #41363c, #494648); + background: -moz-linear-gradient(90deg, #41363c, #494648); + background: -o-linear-gradient(90deg, #41363c, #494648); + background: -ms-linear-gradient(90deg, #41363c, #494648); + background: linear-gradient(0deg, #41363c, #494648); + text-shadow: 0 -1px #41363c; + border-radius: 50%; + color: #fff; + font-size: 12px; + position: absolute; + width: 24px; + height: 24px; + line-height: 24.5px; + left: -12px; + top: -12px; + -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; + box-shadow: 0 0 0 2.5px #f7f8f9; + font-weight: 600; + font-family: "Font Awesome 6 Free"; + text-align: center; +} +.tip ol { + margin: 0; +} +.tip.info { + background: #20a0ff; + background: -webkit-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -moz-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -o-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -ms-linear-gradient(0deg, #20a0ff, #20b8ff); + background: linear-gradient(90deg, #20a0ff, #20b8ff); + padding: 6px 20px; + border-radius: 10px; + -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); + -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); + box-shadow: 0 3px 5px rgba(32,160,255,0.5); +} +.tip.info:before { + background: #20a0ff; + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-linear-gradient(90deg, #0092ff, #20b8ff); + background: -moz-linear-gradient(90deg, #0092ff, #20b8ff); + background: -o-linear-gradient(90deg, #0092ff, #20b8ff); + background: -ms-linear-gradient(90deg, #0092ff, #20b8ff); + background: linear-gradient(0deg, #0092ff, #20b8ff); + content: "\f05a"; + font-family: anzhiyufont; + text-shadow: 0 -1px #20a0ff; +} +.tip.success { + background: -webkit-linear-gradient(0deg, #61be33, #8fce44); + background: -moz-linear-gradient(0deg, #61be33, #8fce44); + background: -o-linear-gradient(0deg, #61be33, #8fce44); + background: -ms-linear-gradient(0deg, #61be33, #8fce44); + background: linear-gradient(90deg, #61be33, #8fce44); + text-shadow: 0 -1px #61be33; + -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); + -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); + box-shadow: 0 3px 5px rgba(104,195,59,0.5); +} +.tip.success:before { + background: -webkit-linear-gradient(90deg, #52bb1d, #95d34b); + background: -moz-linear-gradient(90deg, #52bb1d, #95d34b); + background: -o-linear-gradient(90deg, #52bb1d, #95d34b); + background: -ms-linear-gradient(90deg, #52bb1d, #95d34b); + background: linear-gradient(0deg, #52bb1d, #95d34b); + content: "\f058"; + text-shadow: 0 -1px #61be33; + font-family: anzhiyufont; +} +.tip.warning { + background: #ff953f; + background: -webkit-linear-gradient(0deg, #ff953f, #ffb449); + background: -moz-linear-gradient(0deg, #ff953f, #ffb449); + background: -o-linear-gradient(0deg, #ff953f, #ffb449); + background: -ms-linear-gradient(0deg, #ff953f, #ffb449); + background: linear-gradient(90deg, #ff953f, #ffb449); + text-shadow: 0 -1px #ff953f; + -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); + box-shadow: 0 3px 5px rgba(255,154,73,0.5); +} +.tip.warning::before { + background: -webkit-linear-gradient(90deg, #ff8f35, #ffc149); + background: -moz-linear-gradient(90deg, #ff8f35, #ffc149); + background: -o-linear-gradient(90deg, #ff8f35, #ffc149); + background: -ms-linear-gradient(90deg, #ff8f35, #ffc149); + background: linear-gradient(0deg, #ff8f35, #ffc149); + content: '\f06a'; + text-shadow: 0 -1px #ff953f; + font-family: anzhiyufont; +} +.tip.error { + background: #ff4949; + background: -webkit-linear-gradient(0deg, #ff4949, #ff7849); + background: -moz-linear-gradient(0deg, #ff4949, #ff7849); + background: -o-linear-gradient(0deg, #ff4949, #ff7849); + background: -ms-linear-gradient(0deg, #ff4949, #ff7849); + background: linear-gradient(90deg, #ff4949, #ff7849); + text-shadow: 0 -1px #ff4949; + -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); + box-shadow: 0 3px 5px rgba(255,73,73,0.5); +} +.tip.error:before { + background: -webkit-linear-gradient(90deg, #ff3838, #ff7849); + background: -moz-linear-gradient(90deg, #ff3838, #ff7849); + background: -o-linear-gradient(90deg, #ff3838, #ff7849); + background: -ms-linear-gradient(90deg, #ff3838, #ff7849); + background: linear-gradient(0deg, #ff3838, #ff7849); + content: $note-error-icon; + text-shadow: 0 -1px #ff4949; + font-family: anzhiyufont; +} +.tip.bolt { + background: -webkit-linear-gradient(80deg, #78ca33, #25822c); + background: -moz-linear-gradient(80deg, #78ca33, #25822c); + background: -o-linear-gradient(80deg, #78ca33, #25822c); + background: -ms-linear-gradient(80deg, #78ca33, #25822c); + background: linear-gradient(530deg, #78ca33, #25822c); + content: "\f058"; + text-shadow: 0 -1px #4cf706; +} +.tip.bolt:before { + background: -webkit-linear-gradient(326deg, #78ca33, #25822c); + background: -moz-linear-gradient(326deg, #78ca33, #25822c); + background: -o-linear-gradient(326deg, #78ca33, #25822c); + background: -ms-linear-gradient(326deg, #78ca33, #25822c); + background: linear-gradient(776deg, #78ca33, #25822c); + content: "\f058"; + text-shadow: 0 -1px #4cf706; + font-family: anzhiyufont; +} +.tip.ban { + background: -webkit-linear-gradient(0deg, #ff4949, #f03b49); + background: -moz-linear-gradient(0deg, #ff4949, #f03b49); + background: -o-linear-gradient(0deg, #ff4949, #f03b49); + background: -ms-linear-gradient(0deg, #ff4949, #f03b49); + background: linear-gradient(90deg, #ff4949, #f03b49); + text-shadow: 0 -1px #ff4949; + -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); + box-shadow: 0 3px 5px rgba(255,73,73,0.5); +} +.tip.ban:before { + background: -webkit-linear-gradient(90deg, #ff3838, #ff1022); + background: -moz-linear-gradient(90deg, #ff3838, #ff1022); + background: -o-linear-gradient(90deg, #ff3838, #ff1022); + background: -ms-linear-gradient(90deg, #ff3838, #ff1022); + background: linear-gradient(0deg, #ff3838, #ff1022); + content: "\f056"; + text-shadow: 0 -1px #ff4949; + font-family: anzhiyufont; +} +.tip.home { + background: #15e5ff; + background: -webkit-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -moz-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -o-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -ms-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: linear-gradient(90deg, #0ec0ef, #80e0f7); + text-shadow: 0 -1px #0ec0ef; + -webkit-box-shadow: 0 3px 5px #01caff; + -webkit-box-shadow: 0 3px 5px #01caff; + box-shadow: 0 3px 5px #01caff; +} +.tip.home:before { + background: -webkit-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -moz-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -o-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -ms-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: linear-gradient(0deg, #0ec0ee, #0ec0ea); + content: "\e606"; + font-family: anzhiyufont; + text-shadow: 0 -1px #0ec0ea; +} +.tip.sync { + background: #00a9ff; + background: -webkit-linear-gradient(220deg, #47c0e0, #2dc342); + background: -moz-linear-gradient(220deg, #47c0e0, #2dc342); + background: -o-linear-gradient(220deg, #47c0e0, #2dc342); + background: -ms-linear-gradient(220deg, #47c0e0, #2dc342); + background: linear-gradient(230deg, #47c0e0, #2dc342); + text-shadow: 0 -1px #1bcdfc; + -webkit-box-shadow: 0 3px 5px #1bcdfc; + -webkit-box-shadow: 0 3px 5px #20b1ad; + box-shadow: 0 3px 5px #20b1ad; +} +.tip.sync:before { + background: -webkit-linear-gradient(180deg, #40c0e2, #3dc550); + background: -moz-linear-gradient(180deg, #40c0e2, #3dc550); + background: -o-linear-gradient(180deg, #40c0e2, #3dc550); + background: -ms-linear-gradient(180deg, #40c0e2, #3dc550); + background: linear-gradient(270deg, #40c0e2, #3dc550); + content: "\e66b"; + font-family: anzhiyufont; + text-shadow: 0 -1px #17cfff; +} +.tip.cogs { + background: -webkit-linear-gradient(220deg, #40c0e2, #5247e2); + background: -moz-linear-gradient(220deg, #40c0e2, #5247e2); + background: -o-linear-gradient(220deg, #40c0e2, #5247e2); + background: -ms-linear-gradient(220deg, #40c0e2, #5247e2); + background: linear-gradient(230deg, #40c0e2, #5247e2); + text-shadow: 0 -1px #8278fd; + -webkit-box-shadow: 0 3px 5px #4037a7; + -webkit-box-shadow: 1 3px 5px #5e52ec; + box-shadow: 1 3px 5px #5e52ec; +} +.tip.cogs:before { + background: -webkit-linear-gradient(110deg, #40c0e2, #5246e2); + background: -moz-linear-gradient(110deg, #40c0e2, #5246e2); + background: -o-linear-gradient(110deg, #40c0e2, #5246e2); + background: -ms-linear-gradient(110deg, #40c0e2, #5246e2); + background: linear-gradient(560deg, #40c0e2, #5246e2); + content: "\e638"; + font-family: anzhiyufont; + text-shadow: 0 -1px #098cf5; +} +.tip.key { + background: #25c33b; + background: -webkit-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -moz-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -o-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -ms-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: linear-gradient(230deg, #90a4ae, #b7a7a7); + text-shadow: 0 -1px #c1c0d4; + -webkit-box-shadow: 0 3px 5px #d3d2de; + -webkit-box-shadow: 1 3px 5px #d5d4de; + box-shadow: 1 3px 5px #d5d4de; +} +.tip.key:before { + background: -webkit-linear-gradient(110deg, #bccdd2, #cfced4); + background: -moz-linear-gradient(110deg, #bccdd2, #cfced4); + background: -o-linear-gradient(110deg, #bccdd2, #cfced4); + background: -ms-linear-gradient(110deg, #bccdd2, #cfced4); + background: linear-gradient(560deg, #bccdd2, #cfced4); + content: "\e673"; + font-family: anzhiyufont; + text-shadow: 0 -1px #a9b2b9; +} +.tip.bell { + background: -webkit-linear-gradient(220deg, #ffaa0d, #deb455); + background: -moz-linear-gradient(220deg, #ffaa0d, #deb455); + background: -o-linear-gradient(220deg, #ffaa0d, #deb455); + background: -ms-linear-gradient(220deg, #ffaa0d, #deb455); + background: linear-gradient(230deg, #ffaa0d, #deb455); + text-shadow: 0 -1px #c1c0d4; + -webkit-box-shadow: 1 3px 5px #d5d4de; + box-shadow: 1 3px 5px #d5d4de; +} +.tip.bell:before { + background: -webkit-linear-gradient(110deg, #f9ae07, #ffb615); + background: -moz-linear-gradient(110deg, #f9ae07, #ffb615); + background: -o-linear-gradient(110deg, #f9ae07, #ffb615); + background: -ms-linear-gradient(110deg, #f9ae07, #ffb615); + background: linear-gradient(560deg, #f9ae07, #ffb615); + content: "\e635"; + font-family: anzhiyufont; + text-shadow: 0 -1px #ffb81b; +} +[data-theme="dark"] .tip { + filter: brightness(0.7); +} +#article-container .tip a { + color: #e6eaed; +} +[data-theme='dark'] { + --global-bg: #0d0d0d; + --font-color: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.4); + --hr-before-color: rgba(255,255,255,0.7); + --search-bg: #121212; + --search-input-color: rgba(255,255,255,0.7); + --search-result-title: rgba(255,255,255,0.9); + --preloader-bg: #0d0d0d; + --preloader-color: rgba(255,255,255,0.7); + --tab-border-color: #2c2c2c; + --tab-botton-bg: #2c2c2c; + --tab-botton-color: rgba(255,255,255,0.7); + --tab-button-hover-bg: #383838; + --tab-button-active-bg: #121212; + --card-bg: #121212; + --sidebar-bg: #121212; + --btn-hover-color: #787878; + --btn-color: rgba(255,255,255,0.7); + --btn-bg: #1f1f1f; + --text-bg-hover: #383838; + --light-grey: rgba(255,255,255,0.7); + --dark-grey: rgba(255,255,255,0.2); + --white: rgba(255,255,255,0.9); + --text-highlight-color: rgba(255,255,255,0.9); + --blockquote-color: rgba(255,255,255,0.7); + --blockquote-bg: #2c2c2c; + --reward-pop: #2c2c2c; + --toc-link-color: rgba(255,255,255,0.6); + --scrollbar-color: #1f1f1f; + --timeline-bg: #1f1f1f; +} +[data-theme='dark'] #web_bg:before, +[data-theme='dark'] #footer:before, +[data-theme='dark'] #page-header:before { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.3); + content: ''; + z-index: 2; + pointer-events: none; +} +[data-theme='dark'] #footer { + background-color: var(--anzhiyu-card-bg); +} +[data-theme='dark'] #article-container pre > code { + background: #171717; +} +[data-theme='dark'] #article-container figure.highlight { + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] #article-container .note code { + background: var(--anzhiyu-code-stress); +} +[data-theme='dark'] #article-container .aplayer { + filter: brightness(0.8); +} +[data-theme='dark'] #article-container kbd { + border-color: #696969; + background-color: #525252; + color: #e2f1ff; +} +[data-theme='dark'] #page-header.nav-fixed > #nav, +[data-theme='dark'] #page-header.not-top-img > #nav { + background: var(--anzhiyu-black); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0); +} +[data-theme='dark'] .post #page-header.nav-fixed > #nav { + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] #post-comment .comment-switch { + background: #2c2c2c !important; +} +[data-theme='dark'] #post-comment .comment-switch #switch-btn { + filter: brightness(0.8); +} +[data-theme='dark'] .note { + filter: brightness(0.8); +} +[data-theme='dark'] .hide-button, +[data-theme='dark'] .btn-anzhiyu, +[data-theme='dark'] .hl-label, +[data-theme='dark'] .post-outdate-notice, +[data-theme='dark'] .error-img, +[data-theme='dark'] #article-container iframe, +[data-theme='dark'] .gist, +[data-theme='dark'] .ads-wrap { + filter: brightness(0.8); +} +[data-theme='dark'] img { + filter: blur(0) brightness(0.8); +} +[data-theme='dark'] #aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed rgba(255,255,255,0.1); +} +@media screen and (max-width: 768px) { + [data-theme='dark'] .post #aside-content { + background: var(--anzhiyu-card-bg); + } +} +[data-theme='dark'] #artitalk_main #lazy { + background: #121212; +} +[data-theme='dark'] #operare_artitalk .c2 { + background: #121212; +} +@media screen and (max-width: 900px) { + [data-theme='dark'] #card-toc { + background: #1f1f1f; + } +} +.read-mode { + --font-color: #4c4948; + --readmode-light-color: #fff; + --white: var(--anzhiyu-white); + --light-grey: #4c4948; + --gray: #d6dbdf; + --hr-border: #d6dbdf; + --hr-before-color: #b9c2c9; + --highlight-bg: #f7f7f7; + --exit-btn-bg: #c0c0c0; + --exit-btn-color: #fff; + --exit-btn-hover: #8d8d8d; + --pseudo-hover: none; +} +[data-theme='dark'] .read-mode { + --font-color: rgba(255,255,255,0.7); + --readmode-light-color: #0d0d0d; + --white: rgba(255,255,255,0.9); + --light-grey: rgba(255,255,255,0.7); + --gray: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.5); + --hr-before-color: rgba(255,255,255,0.7); + --highlight-bg: #171717; + --exit-btn-bg: #1f1f1f; + --exit-btn-color: rgba(255,255,255,0.9); + --exit-btn-hover: #525252; +} +.read-mode { + background: var(--readmode-light-color); +} +.read-mode .exit-readmode { + position: fixed; + top: 30px; + right: 30px; + z-index: 100; + width: 40px; + height: 40px; + border-radius: 8px; + background: var(--exit-btn-bg); + color: var(--exit-btn-color); + font-size: 16px; + -webkit-transition: background 0.3s; + -moz-transition: background 0.3s; + -o-transition: background 0.3s; + -ms-transition: background 0.3s; + transition: background 0.3s; +} +@media screen and (max-width: 768px) { + .read-mode .exit-readmode { + top: initial; + bottom: 30px; + } +} +.read-mode .exit-readmode:hover { + background: var(--exit-btn-hover); +} +.read-mode #aside-content { + display: none; +} +.read-mode #post-firstinfo .meta-firstline a.post-meta-original { + color: var(--white) !important; +} +.read-mode #post-firstinfo .meta-firstline a.post-meta-categories { + color: var(--white) !important; +} +.read-mode #post-firstinfo .meta-firstline a.article-meta__tags { + color: var(--white) !important; +} +.read-mode #post-info #post-meta { + color: var(--white) !important; +} +.read-mode #page-header.post-bg { + background-color: transparent; + background-image: none !important; +} +.read-mode #page-header.post-bg:before { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.read-mode #page-header.post-bg > #post-info { + text-align: center; +} +.read-mode #post { + margin: 0 auto; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode #post:hover { + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode > canvas { + display: none !important; +} +.read-mode .highlight-tools, +.read-mode #footer, +.read-mode #post > *:not(#post-info):not(.post-content), +.read-mode #nav, +.read-mode .post-outdate-notice, +.read-mode #web_bg, +.read-mode #rightside, +.read-mode .not-top-img { + display: none !important; +} +.read-mode #article-container a { + color: #99a9bf; +} +.read-mode #article-container pre, +.read-mode #article-container .highlight:not(.js-file-line-container) { + background: var(--highlight-bg) !important; +} +.read-mode #article-container pre *, +.read-mode #article-container .highlight:not(.js-file-line-container) * { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight { + border-radius: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.read-mode #article-container figure.highlight > :not(.highlight-tools) { + display: block !important; +} +.read-mode #article-container figure.highlight .line:before { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight .hljs { + background: var(-highlight-bg) !important; +} +.read-mode #article-container h1, +.read-mode #article-container h2, +.read-mode #article-container h3, +.read-mode #article-container h4, +.read-mode #article-container h5, +.read-mode #article-container h6 { + padding: 0; +} +.read-mode #article-container h1:before, +.read-mode #article-container h2:before, +.read-mode #article-container h3:before, +.read-mode #article-container h4:before, +.read-mode #article-container h5:before, +.read-mode #article-container h6:before { + content: ''; +} +.read-mode #article-container h1:hover, +.read-mode #article-container h2:hover, +.read-mode #article-container h3:hover, +.read-mode #article-container h4:hover, +.read-mode #article-container h5:hover, +.read-mode #article-container h6:hover { + padding: 0; +} +.read-mode #article-container ul:hover:before, +.read-mode #article-container li:hover:before, +.read-mode #article-container ol:hover:before { + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} +.read-mode #article-container ol:before, +.read-mode #article-container li:before { + background: transparent !important; + color: var(--font-color) !important; +} +.read-mode #article-container ul >li:before { + border-color: var(--gray) !important; +} +.read-mode #article-container .tabs { + border: 2px solid var(--tab-border-color); +} +.read-mode #article-container .tabs > .nav-tabs { + background: transparent; +} +.read-mode #article-container .tabs > .nav-tabs > .tab { + border-top: none !important; +} +.read-mode #article-container .tabs > .tab-contents .tab-item-content.active { + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; +} +.read-mode #article-container code { + color: var(--font-color); +} +.read-mode #article-container blockquote { + border-color: var(--gray); + background-color: var(--readmode-light-color); +} +.read-mode #article-container kbd { + border: 1px solid var(--gray); + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: var(--font-color); +} +.read-mode #article-container .hide-toggle { + border: 1px solid var(--gray) !important; +} +.read-mode #article-container .hide-button, +.read-mode #article-container .btn-anzhiyu, +.read-mode #article-container .hl-label { + border: 1px solid var(--gray) !important; + background: var(--readmode-light-color) !important; + color: var(--font-color) !important; +} +.read-mode #article-container .note { + border: 2px solid var(--gray); + border-left-color: var(--gray) !important; + filter: none; + background-color: var(--readmode-light-color) !important; + color: var(--font-color); +} +.read-mode #article-container .note:before, +.read-mode #article-container .note .note-icon { + color: var(--font-color); +} +body .snackbar-container { + background: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; + border-radius: 0 !important; + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + max-width: none !important; + min-width: 100% !important; + margin: 0 !important; + left: 0 !important; + height: 61px !important; + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; + margin: 0 !important; + z-index: 99999; +} +body .snackbar-container p { + font-weight: 700 !important; + text-align: center !important; + font-size: 1.1rem !important; +} +body .snackbar-container .action { + color: var(--anzhiyu-white) !important; + padding: 4px 6px !important; + font-weight: 700; + border-radius: 8px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border) !important; +} +body .snackbar-container .action:hover { + color: var(--anzhiyu-main) !important; + background: var(--anzhiyu-white); +} +body .snackbar-container::after { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + background: var(--anzhiyu-white); + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + content: ""; + -webkit-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -moz-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -o-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -ms-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + pointer-events: none; + will-change: transform; + -webkit-transform-origin: left; + -moz-transform-origin: left; + -o-transform-origin: left; + -ms-transform-origin: left; + transform-origin: left; +} +@-moz-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-webkit-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-o-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +/* 处理单页背景 */ +body[data-type="album_detail"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="album_detail"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="album_detail"] #page .page-title { + display: none; +} + +/* 处理页面样式 */ +#album_detail .album-container-img { + display: flex; + align-items: center; + justify-content: space-around; + width: 100%; + height: 100%; + flex-wrap: wrap; + margin-bottom: 0.3rem; +} +#album_detail .album-container-img .album-content-noimg { + width: calc(100% / 2 - 5px); +} + +#album_detail .album-content-img img { + object-fit: cover; + max-width: 100%; + border-radius: 12px; + margin: 10px 0; +} + +#album_detail .album-content-img { + height: 100%; + max-height: 300px; + border-radius: 12px; + overflow: hidden; + display: flex; + position: relative; +} + +#album_detail .album-content .datacont { + order: 0; + font-size: 0.8rem; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + width: 100%; + line-height: 1.38; + border-radius: 12px; + margin-bottom: 0.5rem; + display: flex; + flex-direction: column; + text-align: justify; +} +#album_detail p { + margin: 0px; +} +#album_detail div.album-content { + display: flex; + flex-flow: wrap; + border-radius: 12px; + width: 100%; + height: 100%; +} +#album_detail .timeline ul li.album-item { + position: relative; + width: 32%; + border: var(--style-border-always); + border-radius: 12px; + padding: 1rem 1rem 0.5rem; + transition: all 0.3s ease 0s; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + box-shadow: var(--anzhiyu-shadow-border); + margin-right: 2%; +} +#album_detail .timeline #waterfall.show { + opacity: 1; +} +#album_detail .timeline #waterfall { + opacity: 0; + transition: all 0.3s ease 0s; +} +#album_detail ul.list { + display: flex; + flex-flow: row wrap; + justify-content: space-between; +} +#album_detail { + margin-top: 1rem; + width: 100%; +} +#album_detail > section > ul > li.album-item { + margin-bottom: 1rem; +} + +#album-tips { + font-size: 14px; + display: flex; + justify-content: center; + margin-top: 1rem; +} + +#album_detail .timeline ul li.album-item hr { + display: flex; + position: relative; + margin: 8px 0px; + border: 1px dashed var(--anzhiyu-theme-op); + width: 100%; +} + +#album_detail .album-info { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + width: 95%; +} + +#album_detail > section > ul > li > div .album-info-time, +#album_detail > section > ul > li > div .album-info-address, +#album_detail > section > ul > li > div .album-info-from { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + background-color: var(--anzhiyu-gray-op); + padding: 0px 8px; + border-radius: 20px; + cursor: default; + display: flex; + align-items: center; + height: 35px; + line-height: 35px; + margin: 4px; + overflow: hidden; +} +#album_detail > section > ul > li > div .album-info-time time { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#album_detail > section > ul > li > div .album-info-address, +#album_detail > section > ul > li > div .album-info-from { + margin-left: 4px; +} +#album_detail > section > ul > li > div .album-info-address span, +#album_detail > section > ul > li > div .album-info-from span { + margin-left: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +#album_detail .album-info .anzhiyufont.anzhiyu-icon-instagram { + margin-right: 8px; +} + +#album_detail .album-bottom { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 10px; +} + +#album_detail .album-bottom .album-reply { + cursor: pointer; + width: 5%; +} + +#album_detail .timeline ul li.album-item:hover { + border: var(--style-border-hover); +} + +#album_detail .album-content-link { + display: flex; + margin-left: 0.5rem; + font-size: 0.7rem; + align-items: center; + background-color: rgba(245, 108, 108, 0.13); + color: rgb(245, 108, 108); + padding: 0px 8px; + border-radius: 20px; +} +#album_detail .album-content-link i { + margin-right: 3px; +} +#album_detail .album-content-link:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +#album_detail .album-music { + width: 100%; + height: 90px; + margin: 0.5rem 0; + border-radius: 8px; + overflow: hidden; + border: var(--style-border-always); + background: var(--anzhiyu-secondbg); +} +#album_detail .aplayer { + margin: 0; +} + +#album_detail .aplayer.aplayer-withlrc .aplayer-pic { + height: 82px; + width: 82px; + margin: 4px; + border-radius: 4px; +} +.album-music .aplayer.aplayer-withlrc .aplayer-info { + padding: 5px 7px 0; +} +#album_detail .aplayer .aplayer-info .aplayer-music { + height: 23px; +} +#album_detail .aplayer .aplayer-info .aplayer-music .aplayer-title { + font-size: 0.8rem; + font-weight: 700; + margin: 0; + color: var(--anzhiyu-fontcolor); +} + +#album_detail .aplayer .aplayer-info .aplayer-controller { + align-items: center; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + padding: 0; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + background: var(--anzhiyu-gray); + height: 8px; + border-radius: 12px; + transition: 0.3s; + overflow: hidden; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 100%; + border-radius: 12px; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + border-radius: 12px; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + display: none; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} + +body[data-type="album_detail"] #page .author-content-item .card-content .banner-button-group .banner-button:hover { + color: var(--anzhiyu-white); + border-radius: 20px !important; +} + +/* 响应式 */ +@media screen and (max-width: 1200px) { + #album_detail .timeline ul li.album-item { + width: 49%; + margin-right: 1%; + } +} +@media screen and (max-width: 768px) { + #album_detail .timeline ul li.album-item { + width: 100%; + margin-right: 0px; + } +} +[data-theme="dark"] #album_detail .album-music .aplayer, +[data-theme="dark"] #album_detail .aplayer .aplayer-lrc:before, +[data-theme="dark"] #album_detail .aplayer .aplayer-lrc:after { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); +} +#album_detail .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); +} + +#album_detail .type-gallery { + overflow: hidden; + margin-top: 40px; +} + +#album_detail_gallery_load_more { + opacity: 0; +} + +#album_detail .tag-address { + display: flex; + position: absolute; + left: 8px; + top: 8px; + padding: 4px 6px; + border-radius: 8px; + background: var(--anzhiyu-black-op); + font-size: 12px; + color: var(--anzhiyu-white); + transition: 0.3s; + z-index: 1; + user-select: none; +} + +/* 处理单页背景 */ +body[data-type="album"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="album"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="album"] #page .page-title { + display: none; +} + +/* 变量定义 */ +:root { + --album-background-dark: #2d3548; + --album-text-light: rgba(255, 255, 255, 0.6); + --album-text-lighter: rgba(255, 255, 255, 0.9); + --album-spacing-s: 8px; + --album-spacing-m: 16px; + --album-spacing-l: 24px; + --album-spacing-xl: 32px; + --album-spacing-xxl: 64px; +} + +/* 卡片样式 */ +#album .card-album { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: var(--album-spacing-xxl) 0 0; +} +#album .card-album .album-content-nocover { + width: calc(100% / 4 - 40px); +} + +#album .card-album .card { + list-style: none; + position: relative; + display: flex; + width: calc(100% / 4 - 10px); + padding: 10px; +} +#album .card-album .card:hover { + cursor: pointer; +} + +#album .card_cover { + border-radius: var(--album-spacing-l); + filter: brightness(0.75) saturate(1.2) contrast(0.85); + transform-origin: center; + transform: scale(1) translateZ(0); + transition: filter 200ms linear, transform 200ms linear; + max-width: 100%; + overflow: hidden; + height: 550px; + width: 100%; + max-width: 100%; + object-fit: cover; + border-radius: var(--album-spacing-l); +} + +#album .card:hover .card_cover { + transform: scale(1.05) translateZ(0); + filter: brightness(0.9) saturate(1.2) contrast(1); +} + +#album .card-album:hover > .card:not(:hover) .card_cover { + filter: brightness(0.5) saturate(0.9) contrast(1.2) blur(20px); +} + +#album .card__content { + left: 0; + padding: var(--album-spacing-l); + position: absolute; + top: 0; +} + +#album .card__category { + color: var(--album-text-light); + font-size: 0.9rem; + margin-bottom: var(--album-spacing-s); + text-transform: uppercase; +} + +#album .card__heading { + color: var(--album-text-lighter); + font-size: 1.9rem; + text-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2); + line-height: 1.4; + word-spacing: 100vw; +} + +@media (min-width: 1024px) { + #album img.card_cover { + height: 600px; + } +} + +@media (max-width: 960px) { + #album .card-album .card { + width: calc(100% / 2 - 40px); + } +} + +@media (max-width: 540px) { + #album .card-album .card { + width: calc(100%); + } +} + +@media (max-width: 768px) { + #album .card-album { + margin-top: 10px; + } + #album .card-album .card { + padding: 10px 0px; + } +} + +h1#site-title { + font-size: 3em !important; +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 3em; + /* 可以定义图标大小 */ + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* 时间轴生肖icon */ +svg.icon { + width: 1em; + height: 1em; + /* width和height定义图标的默认宽度和高度*/ + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; +} + +.icon-zhongbiao::before { + color: #f7c768; +} + +/* 解决artitalk的图标问题 */ +#uploadSource > svg { + width: 1.19em; + height: 1.5em; +} + +/*top-img黑色透明玻璃效果移除,不建议加,除非你执着于完全一图流或者背景图对比色明显 */ +/* #page-header:not(.not-top-img):before { + background-color: transparent !important; +} */ + +/* 文章页面正文背景 */ +div#post { + background: rgba(255, 255, 255, 0.9); +} +#recent-posts > .recent-post-item:not(:first-child):active { + transform: scale(0.97); +} +/* 分页页面 */ +div#page { + background: rgba(255, 255, 255, 0.9); +} + +/* 归档页面 */ +div#archive { + background: rgba(255, 255, 255, 0.9); +} + +/* 标签页面 */ +div#tag { + background: rgba(255, 255, 255, 0.9); +} + +/* 分类页面 */ +div#category { + background: rgba(255, 255, 255, 0.9); +} + +/*夜间模式伪类遮罩层透明*/ +[data-theme="dark"] #recent-posts > .recent-post-item { + background: #121212; +} + +[data-theme="dark"] .card-widget { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#post { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#tag { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#archive { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#page { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#category { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#category { + background: transparent !important; +} + +/* md网站下划线 */ +#article-container a:hover { + text-decoration: none !important; +} + +#article-container #hpp_talk p img { + display: inline; +} + +/* 宽屏适配 */ +.page .layout, +.post .layout { + max-width: 1400px; +} + +.card-widget.card-clock { + font-size: 14px; +} + +#article-container + a:not([data-fancybox="gallery"]):not(.headerlink):not(.cf-friends-link):not(.tag-Link):not(.btn-anzhiyu):not( + .no-text-decoration + ) { + font-weight: 500; + border-bottom: solid 2px var(--anzhiyu-lighttext); + color: var(--anzhiyu-fontcolor); + padding: 0 0.2em; + text-decoration: none; + font-family: auto; +} +#article-container + a:not([data-fancybox="gallery"]):not(.headerlink):not(.cf-friends-link):not(.btn-anzhiyu):not( + .no-text-decoration + ):hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + box-shadow: var(--anzhiyu-shadow-lightblack); + border-radius: 0.25em; + text-decoration: none; +} + +html.hide-aside .layout > div:first-child { + width: 100%; +} + +/* 动画wowjs兼容调整 */ +.animate__animated { + -webkit-animation-fill-mode: backwards !important; + animation-fill-mode: backwards !important; +} + +/* 文章hover边框 */ +#recent-posts .recent-post-item:hover { + border: var(--style-border-hover); +} +#recent-posts .recent-post-item:hover .recent-post-info .article-title { + color: var(--anzhiyu-theme); +} +#recent-posts .recent-post-item { + height: fit-content; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + cursor: pointer; + border: var(--style-border); + box-shadow: var(--anzhiyu-shadow-border); + user-select: none; +} +/* 移动端容器padding */ +@media screen and (max-width: 768px) { + #body-wrap .layout #page { + padding: 20px 15px !important; + } +} +/* 首页文章宽度 */ +@media screen and (max-width: 1200px) { + .layout > div:first-child { + width: 100% !important; + } +} + +[data-theme="dark"] #footer:before { + content: none; +} + +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + border-radius: 12px 12px 0 0; + } +} + +.banners-title { + animation: slide-in 0.6s 0.3s backwards; +} +#algolia-search .search-dialog { + animation: slide-in 0.6s ease 0s 1 normal none running; +} + +@media screen and (min-width: 1200px) { + #page > div:not(.author-content-item) { + animation: slide-in 0.6s 0.2s backwards; + } +} + +@media screen and (min-width: 1200px) { + .author-content-item { + animation: slide-in 0.6s 0s backwards; + } +} + +/* 元素透明度改变 */ +@keyframes slide-in-op { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +#aside-content .card-widget#card-wechat { + background: #57bd6a; + display: flex; + justify-content: center; + align-content: center; + padding: 0; + cursor: pointer; + border: none; + height: 110px; +} +[data-theme="dark"] #aside-content .card-widget#card-wechat { + background-color: #121121; + border: var(--style-border); +} + +#flip-wrapper { + -webkit-perspective: 1000; + perspective: 1000; +} + +#flip-wrapper { + position: relative; + width: 235px; + height: 110px; + z-index: 1; +} +#flip-content { + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: cubic-bezier(0, 0, 0, 1.29) 0.3s; +} +#aside-content #flip-wrapper #flip-content .face { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background-size: 100%; +} + +#aside-content #flip-wrapper #flip-content .back.face { + display: block; + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); + box-sizing: border-box; + background-size: 100%; +} +#flip-wrapper:hover #flip-content { + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +/* 分类目录条、标签目录条 */ +#catalog-bar { + border-radius: var(--anzhiyu-border-radius); + display: flex; + border: var(--anzhiyu-border-radius); + margin-bottom: 1rem; + justify-content: flex-start; + align-items: center; +} + +#catalog-bar:hover { + border-color: var(--anzhiyu-theme); +} + +#catalog-bar i { + line-height: inherit; +} + +#catalog-list { + /* 分类/标签较少时,可以选择不设置 width,居中显示 catalog-list-item */ + display: flex; + white-space: nowrap; + overflow-x: scroll; +} + +#catalog-list::-webkit-scrollbar { + display: none; +} + +.catalog-list-item a { + margin-right: 0.3rem; + font-weight: bold; + color: var(--font-color); + transition: all 0.3s ease-in-out; + display: flex; + align-items: center; + padding: 0.1rem 0.5rem; + border-radius: 8px; + height: 30px; + line-height: 30px; +} +.catalog-list-item { + display: flex; + align-items: center; +} + +.catalog-list-item.selected a { + background: var(--anzhiyu-lighttext); + color: var(--anzhiyu-white); +} + +a.catalog-more { + min-width: fit-content; + font-weight: bold; + color: var(--anzhiyu-fontcolor); + margin-left: 16px; +} + +a.catalog-more:hover { + color: var(--anzhiyu-theme); +} + +#categoryBar { + width: 100%; + display: flex; +} + +#category-bar { + padding: 0.5rem 10px; + background: var(--anzhiyu-card-bg); + display: flex; + white-space: nowrap; + overflow: hidden; + border: var(--style-border); + width: 100%; + height: 50px; + border-radius: 12px; + transition: all 0.3s ease 0s; + animation: slide-in 0.6s 0.3s backwards; +} + +.category-bar-next { + margin-left: 16px; + cursor: pointer; + display: flex; +} + +.category-bar-next:hover { + color: var(--anzhiyu-lighttext); +} + +#category-bar #catalog-bar { + margin-bottom: 0; + overflow-y: hidden; + margin: -0.2rem 0; +} + +#category-bar.category-bar:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} + +#category #category-bar { + padding: 0; + border: none; +} + +#category a.catalog-list-item.select a { + display: none; +} + +#category #catalog-list .catalog-list-item:first-child { + margin-left: 5px; +} + +.catalog-list-item:hover a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +.catalog-list-item.select a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border-radius: 8px; +} + +.category-bar-more { + margin-left: 1rem; + font-weight: bold; +} + +[data-theme="dark"] #category-bar.category-bar { + background: var(--anzhiyu-background); +} + +@media screen and (max-width: 768px) { + #catalog-bar i { + margin-right: 5px; + } + #categoryBar { + margin-bottom: 0; + position: -webkit-sticky; + position: sticky; + top: 60px; + z-index: 2; + align-items: center; + margin-top: 0; + } + #category-bar.category-bar { + width: 100%; + } + #category-bar.category-bar { + background: var(--anzhiyu-background); + } + [data-theme="dark"] #category-bar.category-bar { + background: var(--anzhiyu-black); + } + #category-bar.category-bar:hover { + border: none; + box-shadow: none; + } + #category-bar { + border: none; + border-radius: 0px; + padding: 0.5rem 20px; + } +} + +/*和风天气 */ +#he-plugin-simple { + z-index: 92; + transition: 0.3s; + position: fixed !important; +} + +#he-plugin-simple.shown { + opacity: 0.5; + pointer-events: unset; +} + +#he-plugin-simple .sticker-important { + color: var(--anzhiyu-white) !important; +} + +.s-sticker div[data-v-41ba7e2c]:not(:first-child):not(:last-child) { + padding: 0 0.07em !important; +} + +body:has(#sidebar-menus.open) #he-plugin-simple { + z-index: 104; + left: 95px !important; + opacity: 1; + display: block; + transition: 0.3s; +} + +div.s-sticker { + background-color: transparent !important; +} +.s-sticker div { + color: var(--font-color) !important; + font-weight: bold; +} +body:has(.post-bg.nav-fixed) #he-plugin-simple .s-sticker div { + color: var(--font-color) !important; +} +body:has(.post-bg) #he-plugin-simple .s-sticker div { + color: var(--anzhiyu-white) !important; +} +[data-theme="dark"] body:has(.post-bg) #he-plugin-simple .s-sticker div { + color: var(--font-color) !important; +} + +#weather-view-he { + height: 285px !important; + padding: 10px !important; + border-radius: 10px !important; + background-color: var(--anzhiyu-card-bg) !important; + box-shadow: rgba(0, 0, 0, 0.1) 0 0 20px; + margin-top: 20px !important; + transform: 0.3s; + opacity: 1; +} +.s-sticker ~ [data-v-41ba7e2c] { + opacity: 0; +} +[data-v-41ba7e2c]:has([data-v-db6ccf64][data-v-41ba7e2c]) { + opacity: 1; +} +[data-v-db6ccf64][data-v-41ba7e2c] { + top: 38px !important; +} +.wv-lt-location, +.wv-lt-refresh { + display: inline-block; +} +.wv-lt-location a { + padding: 0 5px; + border-radius: 3px; + color: var(--anzhiyu-blue) !important; + background-color: var(--anzhiyu-blue-tint); + text-decoration: none !important; +} +.wv-lt-col-5 { + text-align: right; +} +.wv-lt-refresh a { + font-size: 0 !important; +} +.wv-lt-refresh a::after { + content: "\5b89\77e5\9c7c\548c\98ce"; + font-size: small !important; +} +.vw-f-cell a, +.wv-n-h-now-rain-text, +.wv-n-h-now-tmp span, +.wv-n-h-now-txt span, +.wv-n-h-now-txt-t { + color: var(--anzhiyu-fontcolor) !important; +} +.wv-f-table div .vw-f-cell:nth-child(1) a { + color: #9b9b9b !important; +} +.wv-top-backdrop { + height: 285px !important; + padding-top: 50px !important; +} +.wv-top-backdrop::after { + content: "\8BF7\4F7F\7528\952E\76D8\2191\2193\9009\62E9\FF0C\56DE\8F66\9009\5B9A" !important; + padding-left: 5%; +} +.wv-top-button, +.wv-top-select { + height: 36px !important; + border: none !important; + border-radius: 5px !important; + cursor: pointer; + transition: 0.25s; +} +.wv-top-select { + padding-left: 10px !important; +} +.wv-top-button { + background-color: var(--anzhiyu-blue) !important; + color: #fff !important; +} + +.wv-top-button:hover { + background-color: var(--anzhiyu-blue-hover) !important; +} +.wv-top-button:active { + background-color: var(--anzhiyu-blue-hover) !important; +} + +@media screen and (max-width: 1400px) { + #he-plugin-simple { + display: none; + } +} + +@media screen and (min-width: 1400px) and (max-width: 1690px) { + #he-plugin-simple { + left: 262px !important; + } +} + +#article-container ol, +#article-container ul { + margin-top: 0.4rem; + padding: 0px 0px 0px 0.8rem; + list-style: none; + counter-reset: li 0; +} +#article-container code { + padding: 0.2rem 0.4rem; + border-radius: 4px; + margin: 0 4px; + line-height: 2; + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container.post-content li::marker { + content: none; +} +#article-container ol li:not(.tab), +#article-container ul li:not(.tab) { + position: relative; + margin: 0.2rem 0px; +} +#article-container ul > li:not(.tab) { + padding: 0.2em 0.2em 0.2em 1.4em; +} +#article-container ul > li:not(.tab):before { + border: 0.21em solid var(--anzhiyu-lighttext); + background: var(--anzhiyu-lighttext); +} +#article-container ul > li:not(.tab)::before { + top: 0.78em; + width: 0.42em; + height: 0.42em; + border-radius: 0.42em; + content: ""; + line-height: 0.42em; +} + +#article-container ol li::before, +#article-container ul li::before { + position: absolute; + top: 0px; + left: 0px; + background: var(--anzhiyu-main); + color: rgb(255, 255, 255); + transition: all 0.3s ease-out 0s; +} +#article-container ol > li::before { + margin-top: 0.65em; + width: 1.45em; + height: 1.45em; + border-radius: 0.725em; + content: counter(li); + counter-increment: li 1; + text-align: center; + font-size: 0.85em; + line-height: 1.45em; +} +#article-container ol[start] { + counter-reset: unset; +} +#article-container ol li:not(.tab), +#article-container ul li:not(.tab) { + position: relative; + margin: 0.2rem 0px; +} +#article-container ol > li:not(.tab) { + padding: 0.2em 0.2em 0.2em 1.8em; +} + +/* 代码框主题 */ +#article-container figure.highlight { + border-radius: 10px; +} +#post-comment blockquote { + background: var(--anzhiyu-secondbg); + border: var(--style-border); + box-shadow: none; + margin: 0px 0px 0.5rem; + font-size: 12px; + color: var(--anzhiyu-secondtext); + border-radius: 8px; +} + +details.folding-tag[open] { + border-radius: 15px !important; + border-color: var(--anzhiyu-main) !important; + border: 1px solid var(--anzhiyu-main) !important; +} + +li details.folding-tag { + border-radius: 8px; +} + +li details.folding-tag summary { + border-radius: 8px; +} + +details.folding-tag { + transition: border 0s ease !important; + border: none !important; +} + +details.folding-tag[open] > summary { + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main) !important; + border: 1px solid var(--anzhiyu-main) !important; + border-top: none !important; + border-left: none !important; + border-right: none !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +details.folding-tag > summary { + border: var(--style-border) !important; + background: var(--anzhiyu-card-bg); + border-radius: 14px !important; + box-shadow: var(--anzhiyu-shadow-border); + color: var(--font-color) !important; + user-select: none; +} +details.folding-tag > summary::marker { + color: var(--anzhiyu-main); + font-size: 16px; +} +details.folding-tag > summary::before { + content: " "; + margin-right: 2px; +} +details.folding-tag[open] > div.content { + border-radius: 0 0 16px 16px; +} +details.folding-tag summary:hover::marker { + color: var(--anzhiyu-white); +} +details.folding-tag[open] > summary::marker { + color: var(--anzhiyu-white); +} +details.folding-tag summary:hover { + cursor: pointer; + background: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; + transition: 0.3s; + box-shadow: var(--anzhiyu-shadow-main); +} +details .content > *:nth-child(1) { + margin-top: 0 !important; +} + +.flink details.folding-tag[open] > div.content { + padding: 20px; + margin: 0px; + margin-top: 0; +} + +.comment-barrage { + position: fixed; + bottom: 0; + right: 60px; + padding: 0 0 20px 10px; + z-index: 100; + display: flex; + flex-direction: column; + justify-content: end; + align-items: flex-end; + z-index: 999; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + .comment-barrage { + display: none !important; + } +} +.comment-barrage-item { + min-width: 300px; + max-width: 300px; + width: fit-content; + min-height: 80px; + max-height: 150px; + margin: 4px; + padding: 8px 14px; + background: var(--anzhiyu-maskbgdeep); + border-radius: 8px; + color: var(--anzhiyu-fontcolor); + animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + transition: 0.3s; + display: flex; + flex-direction: column; + border: var(--style-border); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + position: fixed; + box-shadow: var(--anzhiyu-shadow-border); +} +.comment-barrage-item:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} +.comment-barrage-item.out { + opacity: 0; + animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +.comment-barrage-item a.barrageContent:hover { + color: var(--anzhiyu-main); +} +.comment-barrage-item.hovered { + opacity: 0; +} +.comment-barrage-item .comment-barrage-close { + color: var(--anzhiyu-secondtext); + cursor: pointer; + line-height: 1; + padding: 4px; +} +.comment-barrage-item .comment-barrage-close:hover { + color: var(--anzhiyu-main); +} +.comment-barrage-item pre { + display: none; +} +.comment-barrage-item p img:not(.tk-owo-emotion) { + display: none; +} + +.comment-barrage-item .barrageHead { + height: 30px; + padding: 0; + line-height: 30px; + font-size: 12px; + border-bottom: var(--style-border); + display: flex; + justify-content: space-between; + align-items: center; + font-weight: 700; + padding-bottom: 6px; +} +.comment-barrage-item .barrageHead .barrageTitle { + color: var(--anzhiyu-card-bg); + margin-right: 8px; + background: var(--anzhiyu-fontcolor); + line-height: 1; + padding: 4px; + border-radius: 4px; +} +.comment-barrage-item .barrageHead .barrageTitle.barrageBloggerTitle { + background: var(--anzhiyu-orange); +} +.comment-barrage-item .barrageAvatar { + width: 16px; + height: 16px; + margin: 0; + margin-left: auto; + margin-right: 8px; + border-radius: 50%; + background: var(--anzhiyu-secondbg); +} +.comment-barrage-item .barrageContent { + font-size: 14px !important; + font-weight: 400 !important; + height: calc(100% - 30px); + overflow: scroll; + cursor: pointer; +} +.comment-barrage-item .barrageContent::-webkit-scrollbar { + height: 0; + width: 4px; +} +.comment-barrage-item .barrageContent::-webkit-scrollbar-button { + display: none; +} +.comment-barrage-item .barrageContent p { + margin: 8px 0; + line-height: 1.3; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + display: -webkit-box; + -webkit-box-orient: vertical; +} +.comment-barrage-item .barrageContent blockquote p { + margin: 0; +} +.comment-barrage-item .barrageContent h1, +.comment-barrage-item .barrageContent h2, +.comment-barrage-item .barrageContent h3, +.comment-barrage-item .barrageContent h4 { + font-size: 14px !important; + font-weight: 400 !important; + margin: 8px 0 !important; +} + +/* 中控台 */ +#console { + display: flex; + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + justify-content: center; + opacity: 0; + transition: 0.3s ease-out, color 0s; + flex-direction: column; + align-items: center; + pointer-events: none; + margin: 0 !important; + z-index: 2; +} +#console-music-bg { + display: none; +} + +#console.show, +#console.reward-show { + opacity: 1; + pointer-events: all; +} + +#console.reward-show .console-card-group { + pointer-events: none; +} + +#console .console-card-group { + display: flex; + justify-content: space-between; + align-items: center; + margin: 0 30px; + transform: translateY(20px); + transition: 0.3s; + opacity: 0; + max-width: 80%; + max-height: 70%; +} + +#console.show .console-card-group { + transform: translateY(0px); + opacity: 1; + transition-delay: 0.1s; +} + +#console .console-card-group-left { + margin-right: 0.5rem; + width: 40%; + height: 100%; +} + +#console .console-card-group-right { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + width: 60%; + overflow: hidden; + min-width: 575px; +} + +#console .console-card { + background: var(--card-bg); + border-radius: 12px; + overflow: hidden; + border: var(--style-border); + box-shadow: var(--anzhiyu-shadow-border); + padding: 40px; +} + +#console .console-card.tags { + height: calc(100% - 172px); +} + +#console .console-mask { + background: var(--anzhiyu-maskbgdeep); + backdrop-filter: saturate(100%) blur(0px); + -webkit-backdrop-filter: blur(0px); + width: 100vw; + height: 100vh; + top: 0; + left: 0; + position: absolute; + z-index: -1; + transition: 0.3s; + margin: 0px !important; +} + +#console.show .console-mask, +#console.reward-show .console-mask { + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); +} + +#card-newest-comments .aside-list-item .thumbnail img { + width: 20px; + height: 20px; + margin-right: 8px; + border-radius: 20px; +} + +#card-newest-comments .aside-list-item { + background: var(--anzhiyu-card-bg); + border-radius: 12px; + border: var(--style-border); + padding: 12px 16px; + width: 49%; + display: flex; + flex-direction: column; + height: 150px; + transition: 0.3s; + cursor: pointer; +} + +#card-newest-comments .aside-list-item:not(:last-child) { + margin-bottom: 0.5rem; +} + +#card-newest-comments .aside-list-item .name { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 130px; + font-weight: bold; +} + +#console .author-content-item-tips { + opacity: 0.8; + font-size: 12px; + margin-bottom: 0.5rem; + color: var(--font-color); +} + +#console .author-content-item-title { + font-size: 27px; + font-weight: 700; + line-height: 1; + color: var(--font-color); +} + +#console .aside-list-item .thumbnail { + display: flex; + align-items: center; + width: fit-content; +} + +#console .aside-list-item .content { + display: flex; + flex-direction: column; + height: 100%; + margin-top: 0.5rem; +} + +#card-newest-comments .aside-list-item:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +#console .aside-list-item .content .comment { + -webkit-line-clamp: 2; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + line-height: 24px; + font-size: 14px; + border-radius: 0px; +} + +#console .aside-list-item:hover .thumbnail, +#console .aside-list-item:hover .content .comment, +#console .aside-list-item:hover .content time { + color: var(--anzhiyu-white); +} + +#console .aside-list-item .content time { + font-size: 12px; + margin-top: auto; + color: var(--anzhiyu-fontcolor); +} + +#console .aside-list { + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: space-between; + margin-top: 0.5rem; +} + +#console .button-group { + display: flex; + margin: 1rem auto 0 auto; + justify-content: center; + width: fit-content; +} + +#console .button-group .console-btn-item { + width: 60px; + height: 60px; + transition: 0.3s; + cursor: pointer; +} + +#console .button-group .console-btn-item:not(:last-child) { + margin-right: 0.5rem; +} + +#console .button-group .console-btn-item a { + width: 100%; + height: 100%; + background: var(--card-bg); + border: var(--style-border); + border-radius: 60px; + display: flex; + align-items: center; + justify-content: center; + color: var(--anzhiyu-fontcolor); +} + +#console .button-group .console-btn-item.on a { + background: var(--anzhiyu-orange); + color: var(--anzhiyu-white); + transition: 0.3s; +} + +.console-card.tags .card-tag-cloud { + margin-top: 1.5rem; + display: flex; + flex-wrap: wrap; + max-height: 230px; + overflow: hidden; +} + +.console-card.tags .card-tag-cloud a { + color: var(--anzhiyu-fontcolor) !important; + margin: 6px 4px; + padding: 2px 8px; + border-radius: 8px; + background: var(--anzhiyu-secondbg); + border: var(--style-border); + font-size: 14px !important; + font-weight: bold; +} + +.console-card.tags .card-tag-cloud a:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} + +.console-card.tags .card-tag-cloud a sup { + opacity: 0.6; +} + +#console .console-card.history { + margin-top: 8px; + padding: 0; + background: none; + box-shadow: none; + border: none; + overflow: hidden; + min-width: 575px; +} + +#console .console-card.history .item-headline { + display: none; +} + +#console .console-card.history .card-archive-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +#console .console-card.history .card-archive-list li.card-archive-list-item { + flex: 0 0 25%; +} + +#console .console-card.history .card-archive-list .card-archive-list-link { + border-radius: 8px; + margin: 4px; + display: flex; + flex-direction: column; + align-content: space-between; + border: var(--style-border); + background: var(--card-bg); + padding: 8px 16px; +} + +#console .console-card.history .card-archive-list .card-archive-list-link:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +#console #card-newest-comments { + height: 100%; + min-height: 580px; +} + +#console .button-group i { + font-size: 1rem; +} + +#console hr { + display: none; +} + +#console ul { + padding-left: 0; +} +#console ul li { + list-style: none; +} +#console .console-card.history ul.card-archive-list { + margin: -4px; +} + +[data-theme="dark"] #console .button-group .console-btn-item a.darkmode_switchbutton { + background: var(--anzhiyu-orange); + color: var(--anzhiyu-white); +} + +/* 控制台音乐css */ +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap:hover + .aplayer-bar + .aplayer-played + .aplayer-thumb { + display: inline; +} + +body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-loop, +.aplayer.aplayer-arrow .aplayer-icon-order { + display: inline; +} +body:has(#console.show) .aplayer-volume-wrap { + display: none; +} +body:has(#console.show) #nav-music { + z-index: 10000; + left: 45%; + top: 23%; + box-shadow: none; + align-items: flex-start; + transition: 0s; + height: 35%; + width: 42%; + opacity: 1 !important; + justify-content: center; +} + +body:has(#console.show) #nav-music:active { + transform: scale(1); +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + opacity: 1; + width: 100%; + height: 180px; + margin: 0; + padding: 0; +} +body:has(#console.show) #nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current, +body:has(#console.show) #nav-music .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); +} +body:has(#console.show) #nav-music #nav-music-hoverTips { + opacity: 0; + height: 70px; + width: 70px; + margin-left: 0px; + border-radius: 50%; + box-shadow: 0 0 14px #ffffffa6; + transform: rotate(0deg) scale(1.1); + border: var(--style-border-always); + animation: changeright 24s linear infinite; + margin-top: 10px; + left: auto; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-loaded { + display: block; + border-radius: 10px; + height: 10px; +} +body:has(#console.show) meting-js { + height: 100%; + width: 100%; +} +body:has(#console.show) #nav-music .aplayer .aplayer-body { + align-items: center; + flex-direction: column; + width: 100%; + cursor: auto; +} +body:has(#console.show) #nav-music .aplayer { + height: 100%; + width: 100%; + padding: 10px 10px 0; +} +body:has(#console.show) #nav-music .aplayer { + background: none; + border: none; +} +body:has(#console.show) #nav-music.playing { + animation: none; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music { + height: auto; + margin-bottom: 10px; +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info { + flex-direction: column; + height: auto; + position: relative; +} + +body:has(#console.show) .aplayer .aplayer-pic .aplayer-play { + width: 30px; + height: 30px; +} +body:has(#console.show) .aplayer .aplayer-pic .aplayer-play svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-44%, -50%); +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 70px; + width: 70px; + margin-left: 0px; + border-radius: 50%; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + display: inline; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title { + color: var(--anzhiyu-fontcolor); + cursor: auto; + line-height: 2; + display: inline-block; + white-space: nowrap; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + user-select: none; + margin-right: 3px; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller { + width: 100%; + height: auto; + top: 26px; + align-items: center; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 10px; + border-radius: 10px; + background: #cdcdcd; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + display: block; + bottom: 0; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; +} +body:has(#console.show) + #nav-music + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu { + display: none; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-played { + background: var(--anzhiyu-main) !important; + opacity: 0.8; + animation: none; + border-radius: 10px; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-played + .aplayer-thumb { + margin-top: -2px; + width: 15px; + height: 15px; +} +body:has(#console.show) #nav-music .aplayer .aplayer-lrc .aplayer-lrc-contents { + margin-top: 80px; +} + +@media screen and (min-width: 1200px) and (max-width: 1450px) { + body:has(#console.show) #nav-music { + left: 45%; + } +} + +/* 赞赏部分控制台css */ +.console-card-group-reward { + opacity: 0; + display: none; +} +.reward-show .console-card-group-reward { + opacity: 1; + display: block; + position: absolute; +} +.console-card-group-reward .reward-all { + display: flex; + align-items: center; + justify-content: center; +} +.console-card-group-reward .reward-all .reward-item { + display: flex; + flex-direction: column; + align-items: center; + margin: 0.625rem; +} +.console-card-group-reward .reward-all .reward-item img { + width: 230px; + height: 230px; +} + +@media screen and (max-width: 1200px) { + /* 移动端音乐列表 */ + body:has(#console.show) #nav-music .aplayer-list { + display: block; + position: absolute; + z-index: 1; + background: white; + left: 0; + } + body:has(#console.show) .aplayer-list { + max-height: none !important; + } + body:has(#console.show) .aplayer-list { + position: fixed; + display: none; + width: 100%; + bottom: -76%; + left: 0; + background: var(--sidebar-bg); + height: auto; + border-radius: 15px 15px 0px 0px; + padding: 15px 0px; + } + body:has(#console.show) .aplayer-list.aplayer-list-hide { + bottom: 0% !important; + } + body:has(#console.show) ol > li { + display: flex; + margin: 0 10px; + } + body:has(#console.show) ol > li span.aplayer-list-title { + width: 30%; + } + body:has(#console.show) ol > li.aplayer-list-light { + background: #33a673; + padding: 5px 20px; + border-radius: 10px; + } + + body:has(#console.show) ol > li.aplayer-list-light span { + color: #fff; + } + body:has(#console.show) ol > li span.aplayer-list-title { + max-width: 55%; + width: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + body:has(#console.show) ol > li span.aplayer-list-author { + position: absolute; + right: 10px; + width: auto; + max-width: 35%; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + body:has(#console.show) ol > li.aplayer-list-light span.aplayer-list-author { + right: 15px; + } + /* 移动端音乐 */ + body:has(#console.show) meting-js { + position: relative; + } + #console .console-card-group { + justify-content: center; + } + + #console .console-card-group { + display: none; + } + + #console .console-card-group-right { + width: 100%; + margin: 0; + } + + #consoleCommentBarrage { + display: none; + } + + #console .button-group { + position: absolute; + bottom: 70px; + } + body:has(#console.show) #nav-music #nav-music-hoverTips { + display: none; + } + body:has(#console.show) #nav-music { + position: fixed; + display: block !important; + left: 5.2%; + top: 3.9rem !important; + height: 70%; + width: 85%; + } + body:has(#console.show) #console-music-bg { + display: block; + filter: blur(33px); + display: block; + background: #000000; + opacity: 0.58; + width: 100%; + height: 100%; + position: absolute; + top: 0; + transform: scale(1.2); + } + [data-theme="dark"] body:has(#console.show) #console-music-bg { + background: var(--anzhiyu-white); + } + body:has(#console.show) #console-music-bg::after { + box-shadow: inset 0 0px 10px 116px #000000; + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + } + [data-theme="dark"] body:has(#console.show) #console-music-bg::after { + box-shadow: inset 0 0px 10px 116px var(--anzhiyu-white); + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 100px; + width: 100px; + border-radius: 50%; + animation: none; + border: none; + transform: none !important; + box-shadow: none; + margin-top: 80px; + } + + body:has(#console.show) #nav-music .aplayer { + padding: 30px; + border-radius: 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title, + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + color: var(--anzhiyu-white); + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info { + width: 100%; + height: 45%; + } + body:has(#console.show) #nav-music .aplayer .aplayer-body { + justify-content: space-between; + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info::after { + position: absolute; + content: "iPhone"; + top: -20px; + left: 0; + color: #b5b8bc; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music { + padding: 25px 0 0; + position: absolute; + left: 0; + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + height: 25px; + text-align: left; + } + + body:has(#console.show) #nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current { + color: var(--anzhiyu-white); + font-size: 20px; + line-height: 25px !important; + float: left; + white-space: nowrap; + animation: an-text-roll 4s cubic-bezier(0.6, 0, 0.5, 1) alternate infinite; + min-width: 100%; + /* margin: 0; */ + } + body:has(#console.show) #nav-music .aplayer .aplayer-lrc p { + color: var(--anzhiyu-white); + font-size: 16px; + margin: 0; + margin-top: 20px; + margin-bottom: 20px; + } + body:has(#console.show) #nav-music .aplayer .aplayer-lrc .aplayer-lrc-contents { + margin: -40px 0px 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + color: var(--anzhiyu-white); + left: 50%; + transform: translateX(-50%); + top: 15px; + position: absolute; + width: 100%; + padding: 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller { + top: 58px; + } + body:has(#console.show) .aplayer .aplayer-icon-back, + body:has(#console.show) .aplayer .aplayer-icon-forward, + body:has(#console.show) .aplayer .aplayer-icon-order, + body:has(#console.show) .aplayer .aplayer-icon-play, + body:has(#console.show) + #nav-music + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu, + body:has(#console.show) .aplayer.aplayer-mobile .aplayer-icon-volume-down { + display: inline-block; + opacity: 1; + } + body:has(#console.show) .aplayer .aplayer-icon-volume-down { + width: 36px; + height: 30px; + } + body:has(#console.show) .aplayer-volume-wrap { + position: absolute; + top: 150px; + left: 50%; + transform: translateX(-50%); + width: 75px; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 10px; + border-radius: 10px; + } + body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-loaded { + display: block; + height: 10px; + border-radius: 10px; + } + + body:has(#console.show) .aplayer .aplayer-icon-back { + left: 0; + } + body:has(#console.show) .aplayer .aplayer-icon-forward { + right: 0; + } + body:has(#console.show) .aplayer .aplayer-icon-forward, + body:has(#console.show) .aplayer .aplayer-icon-back { + height: 40px; + width: 33%; + margin: 15px 0; + position: absolute; + } + + body:has(#console.show) .aplayer .aplayer-pic .aplayer-play { + width: 120px; + height: 120px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-pause { + width: 100px; + height: 100px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-play svg { + width: 60px; + height: 60px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-pause svg { + width: 50px; + height: 50px; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + body:has(#console.show) .aplayer .aplayer-icon-play { + height: 50px; + width: 33%; + margin: 10px 0; + position: absolute; + left: 50%; + transform: translateX(-50%); + } + + body:has(#console.show) + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu { + right: 0; + } + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-order { + left: 0; + } + body:has(#console.show) + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu, + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-order { + height: 40px; + width: 33%; + top: 80px; + position: absolute; + } + + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-loop { + height: 40px; + width: 33%; + position: absolute; + left: 50%; + top: 80px; + transform: translateX(-50%); + } + + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + position: relative; + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { + fill: var(--anzhiyu-white); + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap { + overflow: visible; + bottom: 0px; + left: 45px; + right: auto; + } + body:has(#console.show) + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-volume-wrap + .aplayer-volume-bar-wrap + .aplayer-volume-bar, + body:has(#console.show) + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-volume-wrap + .aplayer-volume-bar-wrap + .aplayer-volume-bar + .aplayer-volume { + width: 20px; + border-radius: 4px; + } +} + +@media screen and (max-width: 867px) { + #center-console:checked + label { + display: none; + } + #console .console-card-group { + display: none; + } + + #consoleHideAside { + display: none; + } + .console-card-group-reward .reward-all .reward-item img { + width: 130px; + height: 130px; + } + #console #consoleKeyboard { + display: none; + } +} + +@media screen and (max-height: 800px) { + #console .console-card-group { + display: none; + } + + #consoleMusic { + display: none; + } + + #consoleCommentBarrage { + display: none; + } + + body:has(#console.show) #nav-music { + display: none; + } +} + +@media screen and (min-width: 768px) { + #console .button-group .console-btn-item a:hover { + background: var(--anzhiyu-main) !important; + } + #console .button-group .console-btn-item:hover a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + } +} +@media screen and (max-width: 768px) { + body:has(#console.show) #nav-music { + width: 90%; + } + #center-console + label { + display: none; + } +} +/* 歌词超出文本滚动动画 */ +@keyframes an-text-roll { + from { + margin-left: 0; + } + to { + margin-left: 100%; + transform: translateX(-100%); + } +} + +body[data-type="essay"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="essay"] #page .page-title { + display: none; +} +body[data-type="essay"] #web_bg { + background: var(--anzhiyu-background); +} +#bber .bber-container-img { + display: flex; + align-items: center; + justify-content: space-around; + width: 100%; + flex-wrap: wrap; + margin-bottom: 0.3rem; +} +#bber .bber-container-img .bber-content-noimg { + width: calc(100% / 4 - 5px); +} + +#bber .bber-content-img img { + object-fit: cover; + max-height: 100%; +} + +#bber .bber-content-img, +#bber .bber-content-video { + height: 100px; + border-radius: 8px; + overflow: hidden; + display: flex; + justify-content: center; + position: relative; + width: calc(100% / 4 - 5px); + margin-bottom: 10px; +} + +#bber .bber-content-video video { + border-radius: 8px; + object-fit: cover; + max-height: 100%; +} +#bber .bber-content-video::after { + content: "视频"; + display: inline-block; + padding: 1px 6px; + background: var(--anzhiyu-black-op); + border-radius: 8px; + margin-left: 4px; + font-size: 12px; + font-weight: 700; + color: var(--anzhiyu-white); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + position: absolute; + left: 0; + top: 4px; + z-index: 2; +} + +#bber .bber-content .datacont { + order: 0; + font-size: 0.8rem; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + width: 100%; + line-height: 1.38; + border-radius: 12px; + margin-bottom: 0.5rem; + display: flex; + flex-direction: column; + text-align: justify; +} +#bber p { + margin: 0px; +} +#bber div.bber-content { + display: flex; + flex-flow: wrap; + border-radius: 12px; + width: 100%; + height: 100%; +} +#bber .timeline ul li.bber-item { + position: relative; + width: 32%; + border: var(--style-border-always); + border-radius: 12px; + padding: 1rem 1rem 0.5rem; + transition: all 0.3s ease 0s; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + box-shadow: var(--anzhiyu-shadow-border); + margin-right: 2%; +} +#bber .timeline #waterfall.show { + opacity: 1; +} +#bber .timeline #waterfall { + opacity: 0; + transition: all 0.3s ease 0s; +} +#bber ul.list { + display: flex; + flex-flow: row wrap; + justify-content: space-between; +} +#bber { + margin-top: 1rem; + width: 100%; +} +#bber > section > ul > li.bber-item { + margin-bottom: 1rem; +} + +#bber-tips { + font-size: 14px; + display: flex; + justify-content: center; + margin-top: 1rem; +} + +#bber .timeline ul li.bber-item hr { + display: flex; + position: relative; + margin: 8px 0px; + border: 1px dashed var(--anzhiyu-theme-op); + width: 100%; +} + +#bber .bber-info { + display: flex; + align-items: center; +} + +#bber > section > ul > li > div .bber-info-time, +#bber > section > ul > li > div .bber-info-from { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + background-color: var(--anzhiyu-gray-op); + padding: 0px 8px; + border-radius: 20px; + cursor: default; + display: flex; + align-items: center; +} + +#bber .bber-info .anzhiyufont.anzhiyu-icon-clock { + margin-right: 4px; + font-size: 0.7rem; +} +#bber > section > ul > li > div .bber-info-from span, +#bber > section > ul > li > div .bber-info-from { + margin-left: 4px; +} +#bber > section > ul > li > div .bber-info-from i { + font-size: 0.7rem; +} +#bber .bber-item hr::before { + display: none; +} + +#bber .bber-bottom { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 10px; +} + +.bber-reply { + cursor: pointer !important; +} + +.bber-reply:hover { + color: var(--anzhiyu-main); + max-height: 35px; +} + +#bber .timeline ul li.bber-item:hover { + border: var(--style-border-hover); +} + +#bber .bber-content-link { + display: flex; + margin-left: 0.5rem; + font-size: 0.7rem; + align-items: center; + background-color: rgba(245, 108, 108, 0.13); + color: rgb(245, 108, 108); + padding: 0px 8px; + border-radius: 20px; +} +#bber .bber-content-link i { + margin-right: 3px; + font-size: 0.7rem; +} +#bber .bber-content-link:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +#bber .bber-music { + width: 100%; + height: 90px; + margin: 0.5rem 0; + border-radius: 8px; + overflow: hidden; + border: var(--style-border-always); + background: var(--anzhiyu-secondbg); +} +#bber .aplayer { + margin: 0; +} + +#bber .aplayer.aplayer-withlrc .aplayer-pic { + height: 82px; + width: 82px; + margin: 4px; + border-radius: 4px; +} +.bber-music .aplayer.aplayer-withlrc .aplayer-info { + padding: 5px 7px 0; +} +#bber .aplayer .aplayer-info .aplayer-music { + height: 23px; +} +#bber .aplayer .aplayer-info .aplayer-music .aplayer-title { + font-size: 0.8rem; + font-weight: 700; + margin: 0; + color: var(--anzhiyu-fontcolor); +} + +#bber .aplayer .aplayer-info .aplayer-controller { + align-items: center; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + padding: 0; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + background: var(--anzhiyu-gray); + height: 8px; + border-radius: 12px; + transition: 0.3s; + overflow: hidden; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 100%; + border-radius: 12px; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + border-radius: 12px; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + display: none; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} + +/* 顶部样式 */ +.author-content.author-content-item.essayPage { + height: 19rem; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0px; +} +body[data-type="essay"] #page .author-content-item .card-content .banner-button-group .banner-button:hover { + color: var(--anzhiyu-white); + border-radius: 20px !important; +} + +/* 响应式 */ +@media screen and (max-width: 1200px) { + #bber .timeline ul li.bber-item { + width: 49%; + margin-right: 1%; + } +} +@media screen and (max-width: 768px) { + #bber .timeline ul li.bber-item { + width: 100%; + margin-right: 0px; + } +} +[data-theme="dark"] #bber .bber-music .aplayer, +[data-theme="dark"] #bber .aplayer .aplayer-lrc:before, +[data-theme="dark"] #bber .aplayer .aplayer-lrc:after { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); +} +#bber .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); + min-height: 40px; + line-height: 30px !important; + height: 40px !important; + margin: 0 !important; +} + +#bbTimeList { + background: var(--anzhiyu-white); + color: var(--anzhiyu-fontcolor); + padding: 0.5rem 1rem; + border-radius: 12px; + box-shadow: var(--anzhiyu-shadow-lightblack); + display: flex; + transition: all 0.3s ease 0s; + margin: 1rem auto 0; + border: var(--style-border); + align-items: center; + height: 50px; + width: 100%; + max-width: calc(1400px - 3rem); + animation: slide-in .6s 0s backwards; +} +@media screen and (max-width: 1400px) { + #bbTimeList { + max-width: calc(100% - 3rem); + animation: slide-in 0.6s 0s backwards; + } +} +@media screen and (max-width: 768px) { + div#bbTimeList { + margin: 0 20px 15px; + } +} +[data-theme="dark"] #bbTimeList { + background: #000 !important; +} +#bbtalk { + width: 100%; +} +#bber-talk { + width: 100%; + height: 30px; + line-height: 30px; + display: flex; + flex-direction: column; +} +i.bber-logo { + font-size: 2rem; + line-height: 22px; + margin-right: 1rem; + transition: all 0.3s ease 0s; + cursor: pointer !important; +} +i.bber-logo:hover, +i.bber-gotobb:hover { + color: var(--anzhiyu-main); +} + +i.bber-gotobb { + line-height: 30px; + margin-left: 1rem; + transition: all 0.3s ease 0s; + cursor: pointer; +} + +#bber-talk .li-style { + width: 100%; + max-width: 100%; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + font-weight: 700; + margin: auto; + cursor: pointer; + white-space: nowrap; +} +#bber-talk .li-style:hover { + color: var(--anzhiyu-main); +} + +#bbTimeList:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} + +/* 文章页H1-H6图标样式效果 */ +@-webkit-keyframes rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(-1turn); + transform: rotate(-1turn); + } +} +@keyframes rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(-1turn); + transform: rotate(-1turn); + } +} + +/* 音乐播放器 */ + +.aplayer.aplayer-narrow .aplayer-body, +.aplayer.aplayer-narrow .aplayer-pic { + height: 66px; + width: 66px; +} + +/* 导航栏音乐 */ +@media screen and (max-width: 1200px) { + #nav-music { + display: none !important; + } +} + +#nav-music { + display: flex; + align-items: center; + z-index: 9; + position: fixed; + bottom: 20px; + left: 20px; + cursor: pointer; + transition: all 0.5s, left 0s; + transform-origin: left bottom; + box-shadow: var(--anzhiyu-shadow-border); + border-radius: 40px; + overflow: hidden; +} + +#nav-music:active { + transform: scale(0.97); +} + +#nav-music.playing { + border: var(--style-border); + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + animation: playingShadow 5s linear infinite; +} + +@keyframes playingShadow { + 0% { + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + } + + 50% { + box-shadow: 0 0px 12px 0px var(--anzhiyu-main); + } + + 100% { + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + } +} + +#nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 25px; + width: 25px; + border-radius: 40px; + z-index: 1; + transition: 0.3s; + transform: rotate(0deg) scale(1); + border: var(--style-border-always); + animation: changeright 24s linear infinite; + animation-play-state: paused; +} + +#nav-music.playing .aplayer.aplayer-withlrc .aplayer-pic { + box-shadow: 0 0 14px #ffffffa6; + transform: rotate(0deg) scale(1.1); + border-color: var(--anzhiyu-white); + animation-play-state: running; +} + +@keyframes changeright { + 0% { + transform: rotate(0deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } + + 25% { + transform: rotate(90deg) scale(1.1); + box-shadow: 0 0 14px #ffffff; + } + + 50% { + transform: rotate(180deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } + + 75% { + transform: rotate(270deg) scale(1.1); + box-shadow: 0 0 14px #ffffff; + } + + 100% { + transform: rotate(360deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } +} + +#nav-music .aplayer.aplayer-withlrc .aplayer-info { + height: 100%; + color: var(--anzhiyu-fontcolor); + margin: 0; + padding: 0; + display: flex; + align-items: center; +} + +#nav-music.playing .aplayer.aplayer-withlrc .aplayer-info { + color: var(--anzhiyu-white); +} + +#nav-music.playing #nav-music-hoverTips { + width: 0; + opacity: 0; +} +#nav-music #nav-music-hoverTips { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + align-items: center; + justify-content: center; + display: flex; + border-radius: 40px; + opacity: 0; + font-size: 12px; + z-index: 2; + transition: 0.3s; +} + +#nav-music:hover:not(.playing) #nav-music-hoverTips { + opacity: 1; +} + +#nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap:hover + .aplayer-bar + .aplayer-played + .aplayer-thumb { + display: none; +} + +#nav-music .aplayer { + background: var(--card-bg); + border-radius: 60px; + height: 41px; + display: flex; + margin: 0; + transition: 0.3s; + border: var(--style-border); + box-shadow: none; +} + +#nav-music.playing .aplayer { + background: var(--anzhiyu-main); + border: var(--style-border-hover); + backdrop-filter: saturate(180%) blur(20px); + backdrop-filter: blur(20px); + transform: translateZ(0); +} + +#nav-music .aplayer .aplayer-notice { + display: none; +} + +#nav-music .aplayer .aplayer-miniswitcher { + display: none; +} + +#nav-music .aplayer .aplayer-body { + position: relative; + display: flex; + align-items: center; +} + +#nav-music .aplayer-list { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-music { + margin: 0; + display: flex; + align-items: center; + padding: 0 12px 0 8px; + cursor: pointer; + z-index: 1; + height: 100%; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + display: none; +} + +#nav-music .aplayer.aplayer-withlist .aplayer-info { + border: none; +} + +#nav-music .aplayer .aplayer-pic .aplayer-button { + bottom: 50%; + right: 50%; + transform: translate(50%, 50%); + margin: 0; + transition: 0.3s; +} +#nav-music .aplayer .aplayer-pic:has(.aplayer-button.aplayer-play) { + animation-play-state: paused; + transform: rotate(0deg) scale(1) !important; +} +#nav-music .aplayer.aplayer-withlrc .aplayer-pic { + margin-left: 8px; +} +#nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title { + cursor: pointer; + line-height: 1; + display: inline-block; + white-space: nowrap; + max-width: 120px; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + user-select: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 100%; + background: 0 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + opacity: 0.1; + background-color: var(--anzhiyu-white) !important; + animation: lightBar 5s ease infinite; + animation-play-state: paused; +} + +#nav-music.playing .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + animation-play-state: running; +} + +@keyframes lightBar { + 0% { + opacity: 0.1; + } + + 60% { + opacity: 0.3; + } + + 100% { + opacity: 0.1; + } +} + +/* 歌词 */ +#nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + width: 0; + opacity: 0; + transition: 0.3s; + margin-top: -2px; + padding: 5px 0; +} +#nav-music.stretch .aplayer.aplayer-withlrc .aplayer-lrc { + width: 200px; + margin-left: 8px; + opacity: 1; +} + +#nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current { + color: var(--anzhiyu-white); + border: none; + min-height: 20px; +} + +#nav-music .aplayer .aplayer-lrc:after, +#nav-music .aplayer .aplayer-lrc:before { + display: none; +} + +#nav-music .aplayer .aplayer-lrc p { + color: #ffffffb3; + line-height: 40px !important; + height: 40px !important; + margin: 0px 0; + vertical-align: top; + /* display: inline-block; */ +} + +#nav-music .aplayer .aplayer-pic { + pointer-events: none; +} +#nav-music .aplayer .aplayer-pic .aplayer-button { + pointer-events: all; +} + +/* bilibli番剧插件 */ +#page #article-container .bangumi-tab.bangumi-active { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-ahoverbg); + border-radius: 10px; +} +#page #article-container .bangumi-tabs .bangumi-tab { + border-bottom: none; + border-radius: 10px; +} +#page #article-container .bangumi-tabs a.bangumi-tab:hover { + text-decoration: none !important; + border-radius: 10px; + column-gap: var(--anzhiyu-ahoverbg); +} +#page #article-container .bangumi-pagination a.bangumi-button { + border-bottom: none; + border-radius: 10px; +} +.bangumi-button:hover { + background: var(--anzhiyu-theme) !important; + border-radius: 10px !important; + color: var(--anzhiyu-ahoverbg) !important; +} +a.bangumi-button.bangumi-nextpage:hover { + text-decoration: none !important; +} +.bangumi-button { + padding: 5px 10px !important; +} + +a.bangumi-tab { + padding: 5px 10px !important; +} +svg.icon.faa-tada { + font-size: 1.1em; +} +.bangumi-info-item { + border-right: 1px solid #f2b94b; +} +.bangumi-info-item span { + color: #f2b94b; +} +.bangumi-info-item em { + color: #f2b94b; +} + +/*哔哩哔哩视频适配*/ +.aspect-ratio { + position: relative; + width: 100%; + height: 0; + padding-bottom: 75%; + margin: 3% auto; + text-align: center; +} +.aspect-ratio iframe { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; +} +#page:has(#lib-cards):has(#libCategories) #post-comment .tk-comments-container > .tk-comment { + border: none; + box-shadow: none; +} +@media screen and (max-width: 768px) { + #libCategories { + margin-top: 0 !important; + } + #page:has(#lib-cards):has(#libCategories) h1.page-title { + margin-bottom: 0; + } + body[data-type="categories"] #body-wrap #category { + padding: 20px 15px 20px; + } +} + +.card-glass .card-background { + box-shadow: none; + margin: 0 15px; +} +[data-theme="dark"] .card-glass .card-background { + background-color: transparent; +} + +/* 留言板样式补丁 */ +#maincontent #form-wrap .formmain .comments-main h3.title3 { + justify-content: center; +} + +body[data-type="envelope"] #page #post-comment .tk-comments-container > .tk-comment { + border: none; + box-shadow: none; +} + +[data-theme="dark"] #universe { + display: block; + position: fixed; + margin: 0; + padding: 0; + border: 0; + outline: 0; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; +} +canvas#universe { + display: none; +} + +@media screen and (max-width: 768px) { + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button i, + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button svg { + margin-left: 140px; + margin-top: 15px; + } +} + +#gitcalendar #git_container ul li { + margin: 0 !important; +} +#gitcalendar #git_container ul li::before{ + content: none !important; +} +.dplayer-video-wrap, +.dplayer { + border-radius: 12px; +} + +.note .hide-block { + margin: 0; +} +.note .hide-block button { + border-radius: 30px; +} + +body[data-type="link"] main #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} + +[data-theme="dark"] body[data-type="link"] #page { + background: transparent; +} + +.flink .anzhiyu-flink-list { + padding: 0; +} + +/* 修复时间轴wowjs超出盒子 */ +div#archive { + overflow: hidden; + padding: 22px; +} +/* 修复加载时图片太大超出范围 */ +.aplayer.aplayer-fixed { + overflow: hidden; +} + +@media screen and (max-width: 768px) { + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button { + background-color: transparent !important; + } +} + +.relatedPosts > .relatedPosts-list > div { + border-radius: var(--anzhiyu-border-radius); +} + +/* 侧边栏按钮圆角 */ +#rightside > div > button { + border-radius: 5px; +} + +/* site-card样式修复 */ +#article-container .site-card-group a { + padding: 0; + border-bottom: 0; + font-weight: 400; +} +#article-container .site-card-group .site-card { + background: #fff !important; + border-radius: 8px; +} +#article-container .site-card-group a:hover { + padding: 0; + border-bottom: 0; + font-weight: 400; +} +[data-theme="light"] #footer-wrap { + color: var(--font-color); +} +#footer-wrap .anzhiyufont.anzhiyu-icon-heartbeat { + transition: 0.3s; + animation: heartbeat-bounce 2s ease-in-out infinite; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; +} +@keyframes heartbeat-bounce { + 0%, + 100% { + transform: scale(1); + } + + 10%, + 30% { + transform: scale(0.9); + } + 20%, + 40%, + 60%, + 80% { + transform: scale(1.1); + } + 50%, + 70% { + transform: scale(1.1); + } +} + +/* 顶部样式 */ +.fcircle_page .author-content.fcirclePage { + height: 19rem; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0px; +} +body[data-type="fcircle"] #web_bg { + background-color: #f7f9fe; +} + +[data-theme="dark"] body[data-type="fcircle"] #web_bg { + background-color: #000; +} + +body[data-type="fcircle"] #page .page-title { + display: none; +} + +body[data-type="fcircle"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +.fcircle_page a { + border-bottom: none !important; +} +.fcircle_page .cf-article-avatar a:hover { + background: none !important; + color: var(--anzhiyu-fontcolor) !important; +} +/* 随机文章样式 */ + +.title-h2-a { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 0.5rem; +} +.title-h2-a-left { + display: flex; + align-items: center; +} +.title-h2-a-left h2 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.title-h2-a a { + margin-left: 0.5rem; + color: var(--anzhiyu-fontcolor); + font-weight: 700; +} +#random-post { + min-height: 32px; + background: var(--card-bg); + border: var(--style-border-always); + box-shadow: var(--anzhiyu-shadow-border); + padding: 20px 30px; + border-radius: 12px; + margin-top: 8px; +} +#random-post .random-friends-post { + text-decoration: none; + border-bottom: 2px solid var(--anzhiyu-lighttext) !important; + color: var(--anzhiyu-fontcolor); + font-weight: 700; + padding: 0 4px; +} + +#random-post .random-friends-post:hover { + text-decoration: none; + border-bottom: 2px solid var(--anzhiyu-none) !important; + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main) !important; + border-radius: 4px; + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .title-h2-a a:hover { + color: var(--anzhiyu-hovertext) !important; +} +.fcircle_page .title-h2-a-right a.random-post-all { + color: var(--anzhiyu-fontcolor); +} +#cf-overshow.cf-show-now p a.cf-article-title:hover, +.fcircle_page #fcircleContainer .cf-article a.cf-article-title:hover, +.fcircle_page .title-h2-a-right a.random-post-all:hover, +.fcircle_page .title-h2-a-left a.random-post-start:hover { + background: none; + box-shadow: none; + color: var(--anzhiyu-theme); +} +.fcircle_page .fish-pond-item .cf-article .cf-article-title { + line-height: 2; +} + +#greetingBox { + position: fixed; + top: 10px; + left: 15%; + width: 400px; + text-align: center; + z-index: 999; + pointer-events: none; +} +@media screen and (max-width: 768px) { + #greetingBox { + display: none; + } +} + +#greeting { + display: inline-block; + position: relative; + opacity: 0; + top: -110px; + padding: 5px 40px; + border-radius: 50px; + background-color: white; + color: black; + font-size: small; + transition: 0.5s; + box-shadow: rgb(0 0 0 / 5%) 0 10px 20px; +} + +#greeting.shown { + opacity: 1; + top: 0; +} + +/* 首页分类框展示 */ +.categoryGroup { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + min-width: 200px; + height: 24%; + width: 100%; + + animation: slide-in 0.6s 0.2s backwards; +} +.categoryItem:last-child { + margin-right: 0; +} +.categoryItem { + width: calc(100% / 3 - 0.33rem); + height: 100%; + margin-right: 0.5rem; +} + +.categoryItem { + overflow: hidden; + transform: scale(1); + transition: all 0.8s cubic-bezier(0.65, 0.15, 0.37, 1.19); + height: 100%; + border-radius: 12px; +} + +a.categoryButton { + height: 100%; + width: 100%; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + display: inline-block; + text-align: left; + line-height: 4em; + font-weight: 700; + font-size: 1.1rem; + color: var(--anzhiyu-white); + transition: all 0.8s cubic-bezier(0.39, 0.575, 0.565, 1); + transform: scale(1); + overflow: hidden; + font-family: inherit; +} +.categoryButtonText { + padding-left: 21px; +} +a.categoryButton svg, +a.categoryButton i { + font-size: 5rem; + opacity: 0.2; + position: absolute; + right: 0; + top: 20%; + transition: 0.3s; + width: 100px; + text-align: center; + filter: blur(2px); + transform: scale(1) rotate(15deg); +} + +a.categoryButton.blue { + background: linear-gradient(to right, #358bff, #15c6ff); + background-size: 200%; +} +a.categoryButton.red { + background: linear-gradient(to right, #f65, #ffbf37); + background-size: 200%; +} +a.categoryButton.green { + background: linear-gradient(to right, #18e7ae, #1eebeb); + background-size: 200%; +} + +.categoryItem:hover { + width: 50%; +} + +.categoryItem:hover svg, +.categoryItem:hover i { + opacity: 0.8; + transition: 0.8s; + transition-delay: 0.15s; + transform: scale(1.03); + font-size: 2.5rem; + filter: blur(0); + top: 15%; +} +a.categoryButton:after { + top: 47px; + width: 1rem; + left: 21px; + height: 2px; + background: var(--anzhiyu-white); + content: ""; + border-radius: 1px; + position: absolute; +} + +@media screen and (max-width: 768px) { + .categoryGroup { + display: none; + } +} + +[data-theme="dark"] a.categoryButton.blue { + background: linear-gradient(to right, #0653b8, #2fcbff); + background-size: 200%; +} +[data-theme="dark"] a.categoryButton.red { + background: linear-gradient(to right, #e22a16, #da980c); + background-size: 200%; +} +[data-theme="dark"] a.categoryButton.green { + background: linear-gradient(to right, #099e74, #0ea4a4); + background-size: 200%; +} + +#topPostGroup .top-group-list-item { + display: flex; + width: calc(100% / 4 - 5px); + flex-direction: column; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + overflow: hidden; + height: 128px; + max-height: 128px; + border: var(--style-border-always); + transition: 0.3s; + box-shadow: var(--anzhiyu-shadow-border); +} +#topPostGroup .post_cover { + width: 100%; +} +#topPostGroup .post_cover img { + object-fit: cover; + width: 100%; + height: 80px; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} + +#topPostGroup .top-group-list-item .post_cover a { + height: 80px; + overflow: hidden; + display: flex; + position: relative; +} + +span.top-group-text { + position: absolute; + top: 0; + left: -40px; + display: flex; + z-index: 1; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding: 2px 8px; + font-size: 12px; + border-radius: 12px 0 12px 0; + transition: 0.3s; + cursor: pointer; +} +.top-group-list-item:hover span.top-group-text { + left: 0; +} + +#topPostGroup .top-group-list-item .top-group-info { + padding: 0.3rem 0.5rem 0.3rem 0.5rem !important; + transition: 0.3s; +} + +#topPostGroup .top-group-list-item .top-group-info .article-title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + justify-content: center; + align-items: flex-end; + align-content: center; + padding-top: 0.5rem; + font-weight: 700; + font-size: 0.8rem !important; + padding: 0 !important; +} + +#topPostGroup .top-group-list-item:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); + transform: scale(1.03); +} + +#topPostGroup .top-group-list-item:hover .article-title { + color: var(--anzhiyu-theme); +} + +.top-group-list-none { + width: calc(100% / 4 - 5px); +} +#topPostGroup .topPostGroupTime { + font-size: 12px; +} + +@media screen and (max-width: 1450px) { + #topPostGroup .top-group-list-item { + width: calc(100% / 4 - 20px) !important; + } +} +@media screen and (max-width: 768px) { + #topPostGroup .top-group-list-item { + width: calc(100% / 2 - 5px) !important; + margin: 2px; + } +} +@media screen and (max-width: 768px) { + #topGroup { + display: none; + } +} + +a span.top-group-text { + border-radius: 0px 0 12px 0; +} + +div#bannerGroup { + width: calc(100% - 600px - 2rem); + height: 340px; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +#swiper_container_blog { + width: 49%; + transition: all 0.3s, width 0s; + border-radius: 12px; +} +.swiper-wrapper { + align-items: center; +} +div#swiper_container { + transition: 0.3s; +} +/* 防止轮播图css未加载完时的超度横行滚动条 */ +#swiper_container { + overflow: hidden !important; +} +div.swiper_container_card { + margin: 1rem auto 0; +} +@media screen and (max-width: 768px) { + div.swiper_container_card { + margin: 0.2rem auto 0; + } +} +div#swiper_container { + background: rgba(255, 255, 255, 0); + width: 100%; + padding: 0; + overflow: initial; + background: var(--card-bg); + border-radius: 12px; + border: var(--style-border); +} +div#swiper_container:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} +.blog-slider { + width: 100%; + position: relative; + border-radius: 12px 8px 8px 12px; + margin: 0 auto; +} +.blog-slider__item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.blog-slider__item.swiper-slide-active .blog-slider__img img { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition-delay: 0.3s; + -moz-transition-delay: 0.3s; + -o-transition-delay: 0.3s; + -ms-transition-delay: 0.3s; + transition-delay: 0.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > * { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(1) { + -webkit-transition-delay: 0.3s; + -moz-transition-delay: 0.3s; + -o-transition-delay: 0.3s; + -ms-transition-delay: 0.3s; + transition-delay: 0.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(2) { + -webkit-transition-delay: 0.4s; + -moz-transition-delay: 0.4s; + -o-transition-delay: 0.4s; + -ms-transition-delay: 0.4s; + transition-delay: 0.4s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(3) { + -webkit-transition-delay: 0.5s; + -moz-transition-delay: 0.5s; + -o-transition-delay: 0.5s; + -ms-transition-delay: 0.5s; + transition-delay: 0.5s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(4) { + -webkit-transition-delay: 0.6s; + -moz-transition-delay: 0.6s; + -o-transition-delay: 0.6s; + -ms-transition-delay: 0.6s; + transition-delay: 0.6s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(5) { + -webkit-transition-delay: 0.7s; + -moz-transition-delay: 0.7s; + -o-transition-delay: 0.7s; + -ms-transition-delay: 0.7s; + transition-delay: 0.7s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(6) { + -webkit-transition-delay: 0.8s; + -moz-transition-delay: 0.8s; + -o-transition-delay: 0.8s; + -ms-transition-delay: 0.8s; + transition-delay: 0.8s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(7) { + -webkit-transition-delay: 0.9s; + -moz-transition-delay: 0.9s; + -o-transition-delay: 0.9s; + -ms-transition-delay: 0.9s; + transition-delay: 0.9s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(8) { + -webkit-transition-delay: 1s; + -moz-transition-delay: 1s; + -o-transition-delay: 1s; + -ms-transition-delay: 1s; + transition-delay: 1s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(9) { + -webkit-transition-delay: 1.1s; + -moz-transition-delay: 1.1s; + -o-transition-delay: 1.1s; + -ms-transition-delay: 1.1s; + transition-delay: 1.1s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(10) { + -webkit-transition-delay: 1.2s; + -moz-transition-delay: 1.2s; + -o-transition-delay: 1.2s; + -ms-transition-delay: 1.2s; + transition-delay: 1.2s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(11) { + -webkit-transition-delay: 1.3s; + -moz-transition-delay: 1.3s; + -o-transition-delay: 1.3s; + -ms-transition-delay: 1.3s; + transition-delay: 1.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(12) { + -webkit-transition-delay: 1.4s; + -moz-transition-delay: 1.4s; + -o-transition-delay: 1.4s; + -ms-transition-delay: 1.4s; + transition-delay: 1.4s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(13) { + -webkit-transition-delay: 1.5s; + -moz-transition-delay: 1.5s; + -o-transition-delay: 1.5s; + -ms-transition-delay: 1.5s; + transition-delay: 1.5s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(14) { + -webkit-transition-delay: 1.6s; + -moz-transition-delay: 1.6s; + -o-transition-delay: 1.6s; + -ms-transition-delay: 1.6s; + transition-delay: 1.6s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(15) { + -webkit-transition-delay: 1.7s; + -moz-transition-delay: 1.7s; + -o-transition-delay: 1.7s; + -ms-transition-delay: 1.7s; + transition-delay: 1.7s; +} +.blog-slider__img { + width: 290px; + -webkit-flex-shrink: 0; + flex-shrink: 0; + height: 200px; + padding: 10px; + border-radius: 5px; + transform: translateX(0); + overflow: hidden; +} +.blog-slider__img:after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 5px; + opacity: 0.8; +} +.blog-slider__img img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + opacity: 0; + border-radius: 5px; + transition: all 0.3s; +} +.blog-slider__content { + padding-right: 50px; + padding-left: 50px; +} +.blog-slider__content > * { + opacity: 0; + -webkit-transform: translateY(25px); + -moz-transform: translateY(25px); + -o-transform: translateY(25px); + -ms-transform: translateY(25px); + transform: translateY(25px); + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +.blog-slider__code { + color: var(--font-color); + margin-bottom: 0; + display: block; + font-weight: 500; +} +.blog-slider__title { + font-size: 18px; + font-weight: 700; + color: var(--font-color); + margin-bottom: 15px; + -webkit-line-clamp: 1; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.blog-slider__text { + color: var(--font-color); + margin-bottom: 15px; + line-height: 1.5em; + width: 100%; + height: 50px; + word-break: break-all; + word-wrap: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.blog-slider__button { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + background-color: var(--btn-bg); + padding: 4px 14px; + border-radius: 8px; + color: var(--btn-color); + text-decoration: none; + font-weight: 500; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + text-align: center; + letter-spacing: 1px; + display: none; +} +.blog-slider__button:hover { + background-color: var(--btn-hover-color); + color: var(--btn-color); +} +.blog-slider .swiper-container-horizontal > .swiper-pagination-bullets, +.blog-slider .swiper-pagination-custom, +.blog-slider .swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; +} +.blog-slider__pagination { + position: absolute; + z-index: 21; + right: 20px; + width: 11px !important; + text-align: center; + left: auto !important; + top: 50%; + bottom: auto !important; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +.blog-slider .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 8px 0; +} +.blog-slider__pagination .swiper-pagination-bullet { + width: 11px; + height: 11px; + display: block; + border-radius: 10px; + background: #858585; + opacity: 0.2; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.blog-slider__pagination .swiper-pagination-bullet-active { + opacity: 1; + -ms-filter: none; + filter: none; + background: var(--btn-bg); + height: 30px; +} +@media screen and (max-width: 768px) { + .blog-slider__pagination { + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -o-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + left: 50% !important; + top: 320px; + width: 100% !important; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } + .blog-slider .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 5px; + } + .blog-slider__pagination .swiper-pagination-bullet-active { + height: 11px; + width: 30px; + } + .blog-slider__button { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + width: 100%; + } + .blog-slider { + min-height: 350px; + height: auto; + margin-bottom: 10px; + } + .blog-slider__content { + text-align: center; + padding: 0 30px; + } + .blog-slider__item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .blog-slider__img { + width: 100%; + padding-top: 0; + } + .blog-slider__content { + padding-left: 10px; + padding-right: 10px; + margin-top: 15px; + } + .blog-slider__pagination.swiper-pagination-clickable.swiper-pagination-bullets { + top: 218px; + } + + .swiper_container_card #swiper_container_blog div#swiper_container.blog-slider { + padding: 10px; + overflow: hidden; + } + .blog-slider__item .blog-slider__content .blog-slider__code { + margin-top: 10px; + } + .blog-slider__title { + margin-bottom: 0; + } +} +@media screen and (min-width: 768px) { + .blog-slider { + height: 200px; + } + .blog-slider__img { + height: 200px; + } +} + +@media screen and (max-width: 1200px) { + div#swiper_container { + width: 100%; + } + #swiper_container_blog { + width: 99%; + } +} + +.swiper_container_card { + display: flex !important; + justify-content: space-around; + flex-direction: row !important; + user-select: none; +} + +.todayCard-title, +.todayCard-tips, +.topGroup .banner-button { + color: #ffffff; +} + +.topGroup { + height: 340px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: calc(600px + 1.5rem); + position: relative; + align-content: space-between; +} +.topGroup .todayCard { + position: absolute; + width: calc(600px + 1rem); + height: 100%; + z-index: 1; + top: 0; + left: 0; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + margin-left: 0.5rem; + overflow: hidden; + transition: 0.3s; + display: flex; + cursor: pointer; + pointer-events: all; +} + +.topGroup .todayCard .todayCard-info { + position: absolute; + bottom: 2rem; + left: 2rem; + z-index: 2; + color: var(--anzhiyu-white); + max-width: 60%; + transition: 0.3s; +} + +.topGroup .todayCard .todayCard-info .todayCard-tips { + opacity: 0.8; + font-size: 12px; +} + +.topGroup .todayCard .todayCard-info .todayCard-title { + font-size: 28px; + font-weight: bold; + line-height: 36px; +} +.topGroup .todayCard .todayCard-cover { + position: absolute; + min-width: 100%; + min-height: 100%; + top: 0; + left: 0; + background-size: cover; + z-index: -1; + transition: 0.3s; +} + +.topGroup .banner-button-group { + position: absolute; + right: 2rem; + bottom: 2rem; + display: flex; + transition: 0.3s; +} + +.topGroup .todayCard.hide .todayCard-cover { + transform: scale(1.2); +} + +.topGroup .banner-button { + background: var(--anzhiyu-white-op); + border-radius: 20px; + color: var(--anzhiyu-white); + display: flex; + align-items: center; + z-index: 1; + transition: 0.3s; + cursor: pointer; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + height: 40px; + width: 125px; + justify-content: center; +} +.topGroup .banner-button-group .banner-button .banner-button-text { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.topGroup .banner-button i, +.topGroup .banner-button svg { + margin-right: 8px; + font-size: 22px; +} +.topGroup .todayCard::after { + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + box-shadow: 0 -109px 133px -9px #000000 inset; +} + +.topGroup .todayCard.hide { + opacity: 0; + pointer-events: none; +} +.topGroup .todayCard img { + object-fit: cover; + width: 100%; + height: 80px; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} +.topGroup .recent-post-item:nth-child(4), +.topGroup .recent-post-item:nth-child(5), +.topGroup .recent-post-item:nth-child(6) { + margin-bottom: 0; + margin-top: 4px; +} + +.topGroup .recent-post-item { + display: none; + width: 200px; + flex-direction: column; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + overflow: hidden; + min-width: 200px; + height: 164px !important; + max-height: 164px; + border: var(--style-border-always); + transition: 0.3s; + position: relative; + box-shadow: var(--anzhiyu-shadow-border); + margin-left: 0.5rem; + margin-right: 0px; + margin-bottom: 0.5rem; + cursor: pointer; +} +.topGroup .recent-post-item:hover .recent-post-info .article-title { + color: var(--anzhiyu-main); +} +.topGroup .recent-post-item .post_cover { + width: 100%; +} +.topGroup .recent-post-item .post_cover a { + height: 100px; + overflow: hidden; + display: flex; +} +.topGroup span.recent-post-top-text { + position: absolute; + top: 0; + left: -40px; + display: flex; + z-index: 1; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding: 2px 8px; + font-size: 12px; + border-radius: 12px 0 12px 0; + transition: 0.3s; + cursor: pointer; +} + +.topGroup .recent-post-item .post_cover img { + object-fit: cover; + width: 100%; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} +.topGroup .recent-post-item .recent-post-info { + padding: 0.3rem 0.5rem 0.3rem 0.5rem; + transition: 0.3s; +} +.topGroup .recent-post-item .recent-post-info .article-title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + justify-content: center; + align-items: flex-end; + align-content: center; + padding-top: 0.5rem; + font-weight: bold; + font-size: 1rem !important; + padding: 0 !important; +} + +.topGroup .recent-post-item:hover .recent-post-top-text { + left: 0; +} + +@media screen and (max-width: 1200px) { + .topGroup .todayCard { + background: #0e57d5; + } + + div#bannerGroup { + height: auto; + width: auto; + } + + .topGroup .recent-post-item { + display: flex; + } + + .categoryGroup .categoryItem:nth-child(3) { + display: none; + } + .categoryGroup { + flex-direction: column; + height: 95%; + } + .topGroup { + display: flex; + flex-wrap: nowrap; + width: auto; + height: auto; + } + + .topGroup .todayCard { + display: none; + } + + .swiper_container_card { + display: flex; + flex-direction: row !important; + justify-content: flex-start !important; + flex-wrap: nowrap; + width: 100%; + overflow-x: scroll; + } + + .categoryItem { + height: 48%; + min-width: 200px; + box-shadow: none !important; + } + .categoryGroup { + display: flex !important; + } + #bbTimeList { + margin: 0 1.5rem; + max-width: 100%; + width: auto; + } +} + +.swiper_container_card::-webkit-scrollbar { + display: none; +} + +.topGroup .banner-button:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); +} + +#local-search .search-dialog .local-search__hit-item:before { + content: none !important; +} +#local-search .search-dialog .local-search__hit-item { + padding: 10px !important; + border-radius: 8px; + border: var(--style-border); + margin-bottom: 10px; + display: flex; + justify-content: space-between; + align-items: center; +} +#local-search .search-dialog .local-search__hit-item .search-left { + width: 35%; +} +#local-search .search-dialog .local-search__hit-item .search-right { + width: 60%; +} +#local-search .search-dialog .local-search__hit-item .search-left img { + object-fit: cover; + width: 100%; + background: var(--anzhiyu-secondbg); + border-radius: 8px; +} +#local-search .search-dialog .local-search__hit-item .search-result { + cursor: pointer; +} +#local-search .tag-list { + padding: 4px 8px; + border-radius: 8px; + margin-right: 0.5rem; + margin-top: 0.5rem; + border: var(--style-border); + cursor: pointer; +} +#local-search .search-dialog .local-search__hit-item .tag-list { + display: inline; +} +#local-search .search-dialog .local-search__hit-item .tag-list:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +b, strong { + color: var(--anzhiyu-lighttext); +} +.about-reward { + position: absolute; + top: 1rem; + right: 2rem; +} +@media screen and (max-width: 768px) { + .reward .about-reward #con { + width: 170px; + } + .reward #tube-con { + display: none; + } +} + +[data-theme="dark"] body[data-type="room"] #page { + background: #000 !important; +} +body[data-type="room"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="room"] #page .page-title { + display: none; +} +#room_page .banner-button-group { + position: absolute; + bottom: 0.8rem; + right: 2rem; +} +#room_page .banner-button-group .banner-button:hover { + background: var(--anzhiyu-card-bg); + color: var(--font-color); +} +#room_page .banner-button-group .banner-button i, +#room_page .banner-button-group .banner-button svg { + margin-right: 8px; +} +#room_page .banner-button-group .banner-button { + height: 40px; + width: 140px; + border-radius: 20px; + justify-content: center; + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); + display: flex; + align-items: center; + z-index: 1; + transition: 0.3s; + cursor: pointer; + border-bottom: 0 !important; +} + +#room_page .description { + margin: 20px auto 20px; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + padding: 1rem 2rem; + overflow: hidden; +} + +#room_page *, +#room_page *::after, +#room_page *::before { + margin: 0; + padding: 0; + box-sizing: border-box; + user-select: none; + transform-style: preserve-3d; + -webkit-tap-highlight-color: transparent; +} + +/* Generic */ +#room_page { + margin-top: 590px; +} + +#room_page .face { + position: absolute; +} + +/***************/ +#room_page .house { + position: absolute; + width: 28vw; + height: 28vw; + transform: perspective(90vw) rotateX(75deg) rotateZ(45deg) translateZ(-9vw); + left: 45%; + top: 100px; +} + +#room_page .h-shadow { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 1.5vw -3vw 3vw black, 1.5vw 0.5vw 1.5vw black; +} + +#room_page .h-lights { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + width: 45vw; + height: 45vw; +} + +.h-light { + position: absolute; +} + +.h-light:nth-of-type(1) { + bottom: 5vw; + right: 0; + width: 14vw; + height: 14vw; + border-radius: 50%; + background-image: radial-gradient(#1b182a, transparent); + filter: blur(1vw); +} + +.h-light:nth-of-type(2) { + bottom: 18vw; + right: -1vw; + width: 2vw; + height: 12vw; + border-radius: 50%; + transform: rotateZ(-50deg); + background-image: radial-gradient(rgba(81, 137, 251, 0.45) 50%, rgba(40, 125, 210, 0.45), transparent); + box-shadow: -1vw -1vw 2vw 1vw rgba(131, 171, 252, 0.1); + filter: blur(1vw); +} + +.h-light:nth-of-type(3) { + bottom: -2vw; + right: 17vw; + width: 5vw; + height: 12vw; + border-radius: 50%; + transform: rotateZ(-50deg); + background-image: radial-gradient(rgba(81, 137, 251, 0.5) 50%, rgba(40, 125, 210, 0.5), transparent); + filter: blur(2vw); +} + +.h-light:nth-of-type(3)::before, +.h-light:nth-of-type(3)::after { + content: ""; + position: absolute; + width: 200%; + top: -6vw; + height: 150%; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.1), rgba(81, 137, 251, 0.1), transparent); + border-top-left-radius: 10vw; + border-top-right-radius: 10vw; + filter: blur(1.5vw); +} + +.h-light:nth-of-type(3)::before { + right: -50%; + transform-origin: top right; + transform: rotateZ(15deg); + box-shadow: -2vw -2vw 0 rgba(81, 137, 251, 0.075); +} + +.h-light:nth-of-type(3)::after { + left: -50%; + transform-origin: top left; + transform: rotateZ(-15deg); + box-shadow: 2vw -2vw 0 rgba(81, 137, 251, 0.075); +} + +.h-light:nth-of-type(4) { + bottom: 5vw; + left: 8vw; + width: 28vw; + height: 4vw; + transform-origin: top left; + transform: skewX(58deg); + background-image: linear-gradient( + to right, + rgba(81, 137, 251, 0.075) 10%, + transparent 25%, + transparent, + rgba(0, 0, 0, 0.15) + ); + filter: blur(0.25vw); +} + +.h-light:nth-of-type(6) { + bottom: 14vw; + right: 2vw; + width: 8vw; + height: 16vw; + transform-origin: bottom left; + transform: skewY(49deg); + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.7)); + filter: blur(0.35vw); +} + +/***************/ +/***************/ +.alt { + position: absolute; + left: 0; + top: 0; + width: 27vw; + height: 27vw; +} + +.alt__front { + width: 27vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26.5vw); +} + +.alt__back { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-27vw) translateY(-0.5vw); +} + +.alt__right { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(27vw) translateX(-27vw) translateY(-0.5vw); +} + +.alt__left { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.alt__top { + width: 27vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.alt__bottom { + width: 27vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-27vw); +} + +.alt__front { + background-color: #9e99c1; +} + +.alt__back { + background-color: #383358; +} + +.alt__right { + background-color: #383358; +} + +.alt__left { + background-color: #fbfafe; +} + +.alt__top { + background-image: linear-gradient(to bottom, #0b0c1f, #383358, #9e99c1); +} + +.alt__top .light:nth-of-type(1) { + position: absolute; + height: 100%; + width: 100%; + background-image: linear-gradient(to bottom, rgba(20, 61, 103, 0.75), rgba(81, 137, 251, 0.75), transparent); +} + +.alt__top .light:nth-of-type(2) { + position: absolute; + left: 4vw; + height: 100%; + width: 6vw; + background-image: linear-gradient(to bottom, transparent 20%, rgba(40, 125, 210, 0.75), rgba(81, 137, 251, 0.25) 80%); + filter: blur(0.1vw); +} + +.alt__top .light:nth-of-type(3) { + position: absolute; + bottom: 10vw; + left: 5vw; + width: 6vw; + height: 3vw; + border-radius: 50%; + transform: rotateZ(42deg); + background-image: radial-gradient(rgba(131, 171, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.55vw); +} + +.alt__top .light:nth-of-type(4) { + position: absolute; + bottom: 7vw; + left: 4vw; + width: 8.5vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(131, 171, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.55vw); +} + +.alt__top .light:nth-of-type(5) { + position: absolute; + bottom: 3.5vw; + left: 4.5vw; + width: 6vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(141, 178, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.75vw); +} + +.alt__top .light:nth-of-type(6) { + position: absolute; + bottom: 3vw; + left: 0.5vw; + width: 4vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(141, 178, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.35vw); +} + +.alt__top .light:nth-of-type(7) { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, black, #5189fb 10%, transparent 20%); +} + +.alt__top .light:nth-of-type(7)::before { + content: ""; + position: absolute; + width: 20%; + height: 100%; + background-image: linear-gradient(to right, rgba(5, 70, 199, 0.6), transparent 60%); +} + +.alt__top .light:nth-of-type(7)::after { + content: ""; + position: absolute; + width: 100%; + height: 20%; + background-image: linear-gradient(to bottom, rgba(6, 78, 224, 0.5), transparent 60%); +} + +.alt__top .light:nth-of-type(8) { + position: absolute; + bottom: 5vw; + left: 10vw; + width: 6vw; + height: 4vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(255, 255, 255, 0.1) 50%, rgba(128, 121, 174, 0.1)); + filter: blur(0.8vw); +} + +.alt__bottom { + background-color: #383358; +} + +.alb { + position: absolute; + left: 0; + bottom: 0; + width: 27vw; + height: 1vw; +} + +.alb__front { + width: 27vw; + height: 2vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-1vw); +} + +.alb__back { + width: 27vw; + height: 2vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-27vw) translateY(-2vw); +} + +.alb__right { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(27vw) translateX(-1vw) translateY(-2vw); +} + +.alb__left { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-2vw); +} + +.alb__top { + width: 27vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(2vw); +} + +.alb__bottom { + width: 27vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-27vw); +} + +.alb__front { + background-image: linear-gradient(to right, #9e99c1 40%, #8f89b7); +} + +.alb__back { + background-color: #383358; +} + +.alb__right { + background-color: #383358; +} + +.alb__left { + background-color: #fbfafe; +} + +.alb__top { + background-image: linear-gradient(to right, #fbfafe 40%, #eae5fa); +} + +.alb__bottom { + background-color: #383358; +} + +.arb { + position: absolute; + right: 0; + bottom: 0; + width: 1vw; + height: 28vw; +} + +.arb__front { + width: 1vw; + height: 2vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26vw); +} + +.arb__back { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-2vw); +} + +.arb__right { + width: 28vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-28vw) translateY(-2vw); +} + +.arb__left { + width: 28vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-2vw); +} + +.arb__top { + width: 1vw; + height: 28vw; + transform-origin: top left; + transform: translateZ(2vw); +} + +.arb__bottom { + width: 1vw; + height: 28vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.arb__front { + background-color: #8f89b7; +} + +.arb__back { + background-color: #383358; +} + +.arb__right { + background-image: linear-gradient(to right, #282347 40%, #0f0e17); +} + +.arb__left { + background-color: #9e99c1; +} + +.arb__top { + background-image: linear-gradient(to top, #fbfafe, #3b3469 25%, #2e2a48 75%, #9e99c1); +} + +.arb__top::before { + content: ""; + position: absolute; + width: 100%; + height: 30%; + top: 0; + background-image: linear-gradient(to bottom, transparent, rgba(81, 137, 251, 0.85), transparent); +} + +.arb__bottom { + background-color: #383358; +} + +/***************/ +/***************/ +.blt { + position: absolute; + left: 0; + top: 0; + width: 1vw; + height: 27vw; + transform: translateZ(0.5vw); +} + +.blt__front { + width: 1vw; + height: 20vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(7vw); +} + +.blt__back { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-20vw); +} + +.blt__right { + width: 27vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-27vw) translateY(-20vw); +} + +.blt__left { + width: 27vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-20vw); +} + +.blt__top { + width: 1vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(20vw); +} + +.blt__bottom { + width: 1vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.blt__front { + background-image: linear-gradient(to bottom, #383358, #9e99c1); +} + +.blt__back { + background-color: #383358; +} + +.blt__right { + background-image: linear-gradient(to bottom, #151225, #383358, #383358 90%, #242040); +} + +.blt__right::before { + content: ""; + position: absolute; + bottom: 0; + width: 100%; + height: 0.75vw; + background-image: linear-gradient(to bottom, #8f89b7, #287dd2); + border-top: 0.1vw solid #282347; + border-bottom: 0.1vw solid #282347; +} + +.blt__right::after { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(6, 78, 224, 0.35), + transparent 30%, + transparent 70%, + rgba(40, 125, 210, 0.35) + ); +} + +.blt__left { + background-color: #fbfafe; +} + +.blt__bottom { + background-color: #383358; +} + +.blt2 { + position: absolute; + left: 0; + top: 0; + width: 2vw; + height: 27vw; + transform: translateZ(20.5vw); +} + +.blt2__front { + width: 2vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26.25vw); +} + +.blt2__back { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-2vw) translateY(-0.75vw); +} + +.blt2__right { + width: 27vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(2vw) translateX(-27vw) translateY(-0.75vw); +} + +.blt2__left { + width: 27vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.blt2__top { + width: 2vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.blt2__bottom { + width: 2vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-2vw); +} + +.blt2__front { + background-color: #383358; +} + +.blt2__back { + background-color: #383358; +} + +.blt2__right { + background-image: linear-gradient(to right, #8f89b7, #9e99c1, #7169a4); +} + +.blt2__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + border-bottom: 0.1vw solid rgba(251, 250, 254, 0.75); + background-image: linear-gradient(to top, rgba(81, 137, 251, 0.35), transparent); +} + +.blt2__left { + background-color: #fbfafe; +} + +.blt2__top { + background-image: linear-gradient(to top, #9e99c1, #fbfafe); +} + +.blt2__bottom { + background-color: #383358; +} + +.blb { + position: absolute; + left: 1vw; + top: 0; + width: 26vw; + height: 1vw; + transform: translateZ(0.5vw); +} + +.blb__front { + width: 26vw; + height: 20vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-19vw); +} + +.blb__back { + width: 26vw; + height: 20vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-26vw) translateY(-20vw); +} + +.blb__right { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(26vw) translateX(-1vw) translateY(-20vw); +} + +.blb__left { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-20vw); +} + +.blb__top { + width: 26vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(20vw); +} + +.blb__bottom { + width: 26vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-26vw); +} + +.blb__front { + background-image: linear-gradient(to bottom, #4b4572, #595388 20%, #4b4572); +} + +.blb__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(40, 125, 210, 0.25), + transparent 20%, + transparent 80%, + rgba(40, 125, 210, 0.5) + ), + linear-gradient(to right, rgba(31, 33, 88, 0.35), transparent), + linear-gradient(to bottom, rgba(31, 33, 88, 0.35), transparent), + linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent 20%, transparent 80%, rgba(40, 125, 210, 0.25)); +} + +.blb__front::after { + content: ""; + position: absolute; + bottom: 0; + width: 100%; + height: 0.75vw; + background-image: linear-gradient(to bottom, #8f89b7, #287dd2); + border-top: 0.1vw solid #282347; + border-bottom: 0.1vw solid #282347; +} + +.blb__back { + background-color: #383358; +} + +.blb__right { + background-image: linear-gradient(to bottom, #151225, #0f0e17 80%, #151225); +} + +.blb__bottom { + background-color: #383358; +} + +.blb2 { + position: absolute; + left: 2vw; + top: 0; + width: 25vw; + height: 1vw; + transform: translateZ(20.5vw); +} + +.blb2__front { + width: 25vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.25vw); +} + +.blb2__back { + width: 25vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-25vw) translateY(-0.75vw); +} + +.blb2__right { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(25vw) translateX(-2vw) translateY(-0.75vw); +} + +.blb2__left { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.blb2__top { + width: 25vw; + height: 2vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.blb2__bottom { + width: 25vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-25vw); +} + +.blb2__front { + background-image: linear-gradient(to right, #7169a4, #9e99c1, #8f89b7); +} + +.blb2__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + border-bottom: 0.1vw solid rgba(251, 250, 254, 0.75); + background-image: linear-gradient(to top, rgba(40, 125, 210, 0.25), transparent); +} + +.blb2__back { + background-color: #383358; +} + +.blb2__right { + background-color: #151225; +} + +.blb2__left { + background-color: #9e99c1; +} + +.blb2__top { + background-image: linear-gradient(to left, #9e99c1, #fbfafe); +} + +.blb2__bottom { + background-color: #383358; +} + +/***************/ +/***************/ +.bocina-l, +.bocina-r { + position: absolute; + left: 1.5vw; + bottom: 5.25vw; + width: 0.75vw; + height: 1.5vw; + transform: translateZ(8vw); +} + +.bocina-l__front, +.bocina-r__front { + width: 0.75vw; + height: 6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-4.5vw); +} + +.bocina-l__back, +.bocina-r__back { + width: 0.75vw; + height: 6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.75vw) translateY(-6vw); +} + +.bocina-l__right, +.bocina-r__right { + width: 1.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.75vw) translateX(-1.5vw) translateY(-6vw); +} + +.bocina-l__left, +.bocina-r__left { + width: 1.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6vw); +} + +.bocina-l__top, +.bocina-r__top { + width: 0.75vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(6vw); +} + +.bocina-l__bottom, +.bocina-r__bottom { + width: 0.75vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.75vw); +} + +.bocina-l__right, +.bocina-r__right { + background-image: radial-gradient(black, black); +} + +.bocina-l__top, +.bocina-r__top { + background-image: linear-gradient(to left, #d9d0f6, #9e99c1, #7169a4); +} + +.bocina-l__bottom, +.bocina-r__bottom { + background-color: #383358; +} + +.bocina-l__front { + background-image: linear-gradient(to right, #5189fb, #595388 30%, #b7a5ed); +} + +.bocina-l__back { + background-image: linear-gradient(to right, #383358, #232038); +} + +.bocina-l__back::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(81, 137, 251, 0.35) 65%, rgba(81, 137, 251, 0.95)); +} + +.bocina-l__left { + background-color: #282347; +} + +.bocina-l__left::before { + content: ""; + position: absolute; + top: -10%; + left: 20%; + width: 120%; + height: 120%; + background-image: linear-gradient(to left, rgba(7, 23, 39, 0.75), rgba(0, 0, 0, 0.75)); + filter: blur(0.5vw); +} + +.bocina-r { + top: 5.25vw; +} + +.bocina-r__front { + background-image: linear-gradient(to right, #383358, #0f0e17); +} + +.bocina-r__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to left, rgba(81, 137, 251, 0.35) 65%, rgba(81, 137, 251, 0.95)); +} + +.bocina-r__back { + background-image: linear-gradient(to right, #595388, #b7a5ed); +} + +.bocina-r__left { + background-color: #282347; +} + +.bocina-r__left::before { + content: ""; + position: absolute; + top: -10%; + left: -20%; + width: 120%; + height: 120%; + background-image: linear-gradient(to right, rgba(7, 23, 39, 0.75), rgba(0, 0, 0, 0.75)); + filter: blur(0.5vw); +} + +.repisa-t, +.repisa-b { + position: absolute; + left: 1.5vw; + top: 9vw; + width: 1.5vw; + height: 10vw; + transform: translateZ(16vw); +} + +.repisa-t__front, +.repisa-b__front { + width: 1.5vw; + height: 0.25vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(9.75vw); +} + +.repisa-t__back, +.repisa-b__back { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1.5vw) translateY(-0.25vw); +} + +.repisa-t__right, +.repisa-b__right { + width: 10vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1.5vw) translateX(-10vw) translateY(-0.25vw); +} + +.repisa-t__left, +.repisa-b__left { + width: 10vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.25vw); +} + +.repisa-t__top, +.repisa-b__top { + width: 1.5vw; + height: 10vw; + transform-origin: top left; + transform: translateZ(0.25vw); +} + +.repisa-t__bottom, +.repisa-b__bottom { + width: 1.5vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1.5vw); +} + +.repisa-t__front, +.repisa-b__front { + background-color: #9e99c1; +} + +.repisa-t__back, +.repisa-b__back { + background-color: #fbfafe; +} + +.repisa-t__right, +.repisa-b__right { + background-color: #8079ae; +} + +.repisa-t__left, +.repisa-b__left { + background-color: #fbfafe; +} + +.repisa-t__top, +.repisa-b__top { + background-color: #d9d0f6; +} + +.repisa-t__top::before, +.repisa-b__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(6, 78, 224, 0.75), transparent); +} + +.repisa-t__bottom, +.repisa-b__bottom { + background-color: #383358; +} + +.repisa-t__bottom::before, +.repisa-b__bottom::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(6, 78, 224, 0.75), transparent); +} + +.repisa-b { + transform: translateZ(5vw); +} + +.tv { + position: absolute; + left: 1.51vw; + top: 8vw; + width: 0.5vw; + height: 12vw; + transform: translateZ(8vw); +} + +.tv__front { + width: 0.5vw; + height: 6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(6vw); +} + +.tv__back { + width: 0.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-6vw); +} + +.tv__right { + width: 12vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-12vw) translateY(-6vw); +} + +.tv__left { + width: 12vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6vw); +} + +.tv__top { + width: 0.5vw; + height: 12vw; + transform-origin: top left; + transform: translateZ(6vw); +} + +.tv__bottom { + width: 0.5vw; + height: 12vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.tv__front { + background-color: #0b0c1f; +} + +.tv__back { + background-color: #0b0c1f; +} + +.tv__right { + background-color: #9cbcfc; + border: 0.125vw solid black; + animation: pantalla-tv 0.25s infinite alternate; +} + +.tv__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + box-shadow: 0.125vw 0.125vw 1vw rgba(81, 137, 251, 0.5), -0.125vw 0.125vw 1vw rgba(81, 137, 251, 0.5), + 0.125vw -0.125vw 1vw rgba(81, 137, 251, 0.5), -0.125vw -0.125vw 1vw rgba(81, 137, 251, 0.5); + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/6351038493d46.gif"); + background-size: cover; + background-repeat: no-repeat; + background-position: bottom; + opacity: 0.8; +} + +.tv__left { + display: flex; + justify-content: center; + align-items: center; + background-color: #0b0c1f; +} + +.tv__left::before { + content: ""; + position: absolute; + width: 13vw; + height: 7vw; + background-image: radial-gradient(rgba(36, 112, 188, 0.95), rgba(56, 121, 250, 0.95)); + filter: blur(1.25vw); + animation: luz-tv 0.25s infinite alternate; +} + +.tv__top { + background-color: #0b0c1f; +} + +.tv__bottom { + background-color: #0b0c1f; +} + +.librero { + position: absolute; + left: 13vw; + top: 1vw; + width: 12vw; + height: 0.5vw; + transform: translateZ(7vw); +} + +.librero__front { + width: 12vw; + height: 0.25vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.25vw); +} + +.librero__back { + width: 12vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-12vw) translateY(-0.25vw); +} + +.librero__right { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(12vw) translateX(-1.5vw) translateY(-0.25vw); +} + +.librero__left { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.25vw); +} + +.librero__top { + width: 12vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(0.25vw); +} + +.librero__bottom { + width: 12vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-12vw); +} + +.librero__front { + background-color: #9e99c1; +} + +.librero__back { + background-color: #383358; +} + +.librero__back::before { + content: ""; + position: absolute; + width: 100%; + height: 4vw; + border-radius: 50%; + background-image: radial-gradient(rgba(106, 154, 251, 0.7) 50%, rgba(32, 99, 167, 0.6), transparent); + filter: blur(1.25vw); +} + +.librero__right { + background-color: #383358; +} + +.librero__left { + background-color: #9e99c1; +} + +.librero__top { + background-color: #d9d0f6; +} + +.librero__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(31, 104, 249, 0.75), transparent); +} + +.librero__bottom { + background-color: #383358; +} + +.librero__bottom::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(31, 104, 249, 0.75), transparent); +} + +.libros { + position: absolute; +} + +.libro { + position: absolute; + top: 1vw; + width: 0.5vw; + height: 1vw; + transform: translateZ(7.25vw); +} + +.libro__front { + width: 0.5vw; + height: 1.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-0.5vw); +} + +.libro__back { + width: 0.5vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-1.5vw); +} + +.libro__right { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-1vw) translateY(-1.5vw); +} + +.libro__left { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.5vw); +} + +.libro__top { + width: 0.5vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(1.5vw); +} + +.libro__bottom { + width: 0.5vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.libro__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.libro__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.libro__back { + background-color: #fbfafe; +} + +.libro__right { + background-color: #645c98; +} + +.libro__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.libro__left { + background-color: #9e99c1; +} + +.libro__top { + background-color: #d9d0f6; +} + +.libro__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.libro__bottom { + background-color: #554d85; +} + +.libro:nth-of-type(1) { + left: 16vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(-10deg); +} + +.libro:nth-of-type(2) { + left: 17vw; + transform: translateZ(7.25vw) rotateZ(2deg); +} + +.libro:nth-of-type(3) { + left: 17.75vw; + transform: translateZ(7.25vw) rotateZ(5deg); +} + +.libro:nth-of-type(4) { + left: 19vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(10deg); +} + +.libro:nth-of-type(5) { + left: 20vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(10deg); +} + +.libro:nth-of-type(6) { + left: 23vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateY(-90deg); +} + +.fotos { + position: absolute; +} + +.foto { + position: absolute; + width: 0.125vw; + height: 2vw; + left: 2vw; + top: 11vw; + transform: translateZ(5.26vw); +} + +.foto__front { + width: 0.125vw; + height: 1.125vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.125vw); +} + +.foto__back { + width: 0.125vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.125vw) translateY(-1.125vw); +} + +.foto__right { + width: 2.25vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.125vw) translateX(-2.25vw) translateY(-1.125vw); +} + +.foto__left { + width: 2.25vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.125vw); +} + +.foto__top { + width: 0.125vw; + height: 2.25vw; + transform-origin: top left; + transform: translateZ(1.125vw); +} + +.foto__bottom { + width: 0.125vw; + height: 2.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.125vw); +} + +.foto__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.foto__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.foto__back { + background-color: #fbfafe; +} + +.foto__right { + display: flex; + justify-content: center; + align-items: center; + background-color: #8f89b7; + border: 0.15vw solid #1f2158; +} + +.foto__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: repeating-linear-gradient(to bottom, #9e99c1 0.1vw, #b7a5ed 0.2vw); +} + +.foto__left { + background-color: #9e99c1; +} + +.foto__top { + background-color: #d9d0f6; +} + +.foto__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.foto__bottom { + background-color: #595388; +} + +.foto__bottom::before { + content: ""; + position: absolute; + right: -100%; + width: 400%; + height: 100%; + background-color: rgba(11, 12, 31, 0.75); + filter: blur(0.15vw); +} + +.foto:nth-of-type(1) { + top: 10.5vw; + transform: translateZ(5.26vw) rotateZ(5deg); +} + +.foto:nth-of-type(2) { + top: 15vw; + transform: translateZ(5.26vw) rotateZ(-15deg); +} + +.cajas { + position: absolute; +} + +.caja { + position: absolute; + width: 1vw; + height: 1.5vw; + left: 2vw; + transform: translateZ(16.35vw); +} + +.caja__front { + width: 1vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(0.75vw); +} + +.caja__back { + width: 1vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-0.75vw); +} + +.caja__right { + width: 1.5vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-1.5vw) translateY(-0.75vw); +} + +.caja__left { + width: 1.5vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.caja__top { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.caja__bottom { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.caja__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.caja__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.caja__back { + background-color: #9e99c1; +} + +.caja__right { + background-color: #645c98; +} + +.caja__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.caja__left { + background-color: #9e99c1; +} + +.caja__top { + background-color: #d9d0f6; +} + +.caja__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.caja__bottom { + background-color: #595388; +} + +.caja__bottom::before { + content: ""; + position: absolute; + right: -50%; + width: 150%; + height: 120%; + background-color: rgba(31, 33, 88, 0.5); + filter: blur(0.15vw); +} + +.caja:nth-of-type(1) { + top: 11.6vw; +} + +.caja:nth-of-type(2) { + top: 13.5vw; +} + +.caja:nth-of-type(3) { + top: 17vw; +} + +.cuadro-l, +.cuadro-r { + position: absolute; + left: 13vw; + top: 1vw; + width: 5vw; + height: 0.5vw; + transform: translateZ(10vw); +} + +.cuadro-l__front, +.cuadro-r__front { + width: 5vw; + height: 7vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-6.75vw); +} + +.cuadro-l__back, +.cuadro-r__back { + width: 5vw; + height: 7vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-5vw) translateY(-7vw); +} + +.cuadro-l__right, +.cuadro-r__right { + width: 0.25vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(5vw) translateX(-0.25vw) translateY(-7vw); +} + +.cuadro-l__left, +.cuadro-r__left { + width: 0.25vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-7vw); +} + +.cuadro-l__top, +.cuadro-r__top { + width: 5vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(7vw); +} + +.cuadro-l__bottom, +.cuadro-r__bottom { + width: 5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-5vw); +} + +.cuadro-l__front, +.cuadro-r__front { + background-repeat: no-repeat; + background-size: contain; + background-position: center; +} + +.cuadro-l__back, +.cuadro-r__back { + background-color: #383358; + box-shadow: 0.35vw 0.35vw 0.35vw rgba(81, 137, 251, 0.2), -0.35vw 0.35vw 0.35vw rgba(81, 137, 251, 0.2), + -0.35vw -0.35vw 0.35vw rgba(81, 137, 251, 0.2), 0.35vw -0.35vw 0.35vw rgba(81, 137, 251, 0.2); +} + +.cuadro-l__right, +.cuadro-r__right { + background-color: #383358; +} + +.cuadro-l__left, +.cuadro-r__left { + background-color: #9e99c1; +} + +.cuadro-l__top, +.cuadro-r__top { + background-color: #9e99c1; +} + +.cuadro-l__bottom, +.cuadro-r__bottom { + background-color: #383358; +} + +.cuadro-l__front { + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/63510384967db.jpg"); + background-color: #d51e24; + border: 1vw solid #d51e24; +} + +.cuadro-l__front::before { + content: ""; + position: absolute; + top: -1vw; + left: -1vw; + width: 5vw; + height: 7vw; + background-origin: padding-box; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.15), rgba(40, 125, 210, 0.15)); +} + +.cuadro-r { + left: 20vw; +} + +.cuadro-r__front { + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/6351038496f25.jpg"); + background-color: #0f1110; + border: 0.5vw solid #0f1110; +} + +.cuadro-r__front::before { + content: ""; + position: absolute; + top: -0.5vw; + left: -0.5vw; + width: 5vw; + height: 7vw; + background-origin: padding-box; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.15), rgba(40, 125, 210, 0.15)); +} + +.puerta-c { + position: absolute; + left: 3vw; + top: 1vw; + width: 8vw; + height: 0.5vw; + transform: translateZ(0.5vw); +} + +.puerta-c::before { + content: ""; + position: absolute; + width: 100%; + height: 200%; + background-color: rgba(0, 0, 0, 0.65); + filter: blur(0.5vw); +} + +.puerta { + position: absolute; + left: 0.5vw; + top: 0; + width: 7vw; + height: 0.5vw; +} + +.puerta__front { + width: 7vw; + height: 16vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-15.75vw); +} + +.puerta__back { + width: 7vw; + height: 16vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-7vw) translateY(-16vw); +} + +.puerta__right { + width: 0.25vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(7vw) translateX(-0.25vw) translateY(-16vw); +} + +.puerta__left { + width: 0.25vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-16vw); +} + +.puerta__top { + width: 7vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(16vw); +} + +.puerta__bottom { + width: 7vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-7vw); +} + +.puerta__front { + background-image: linear-gradient(to bottom, #0f1110, #121332); + border: 0.125vw solid #5189fb; +} + +.puerta__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: radial-gradient(transparent 50%, rgba(4, 61, 174, 0.25)); + box-shadow: 0.65vw 0.65vw 0.5vw rgba(81, 137, 251, 0.6), -0.65vw 0.65vw 0.5vw rgba(81, 137, 251, 0.6), + -0.65vw -0.65vw 0.5vw rgba(81, 137, 251, 0.6), 0.65vw -0.65vw 0.5vw rgba(81, 137, 251, 0.6); +} + +.puerta__front::after { + content: ""; + position: absolute; + top: 50%; + right: 0.75vw; + width: 1vw; + height: 0.25vw; + background-color: #9e99c1; + box-shadow: 0.125vw 0.125vw 0.25vw rgba(81, 137, 251, 0.6), -0.125vw 0.125vw 0.25vw rgba(81, 137, 251, 0.6), + -0.125vw -0.125vw 0.25vw rgba(81, 137, 251, 0.6), 0.125vw -0.125vw 0.25vw rgba(81, 137, 251, 0.6); +} + +.puerta-l, +.puerta-r { + position: absolute; + left: 0; + top: 0; + width: 0.5vw; + height: 0.5vw; +} + +.puerta-l__front, +.puerta-r__front { + width: 0.5vw; + height: 16vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-15.5vw); +} + +.puerta-l__back, +.puerta-r__back { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-16vw); +} + +.puerta-l__right, +.puerta-r__right { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-0.5vw) translateY(-16vw); +} + +.puerta-l__left, +.puerta-r__left { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-16vw); +} + +.puerta-l__top, +.puerta-r__top { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: translateZ(16vw); +} + +.puerta-l__bottom, +.puerta-r__bottom { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.puerta-l__front, +.puerta-r__front { + background-color: #121332; +} + +.puerta-l__back, +.puerta-r__back { + background-color: #0b0c1f; +} + +.puerta-l__right, +.puerta-r__right { + background-color: #0b0c1f; +} + +.puerta-l__left, +.puerta-r__left { + background-color: #121332; +} + +.puerta-l__bottom, +.puerta-r__bottom { + background-color: #0b0c1f; +} + +.puerta-r { + left: calc(100% - 0.5vw); +} + +.puerta-t { + left: 0; + top: 0; + width: 8vw; + height: 0.5vw; + transform: translateZ(16vw); +} + +.puerta-t__front { + width: 8vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(0vw); +} + +.puerta-t__back { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-8vw) translateY(-0.5vw); +} + +.puerta-t__right { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(8vw) translateX(-0.5vw) translateY(-0.5vw); +} + +.puerta-t__left { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.puerta-t__top { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.puerta-t__bottom { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-8vw); +} + +.puerta-t__front { + background-color: #121332; +} + +.puerta-t__back { + background-color: #0b0c1f; +} + +.puerta-t__right { + background-color: #0b0c1f; +} + +.puerta-t__left { + background-color: #121332; +} + +.puerta-t__top { + background-color: #1f2158; +} + +.puerta-t__bottom { + background-color: #0b0c1f; +} + +.muro { + position: absolute; + left: 1vw; + top: 6vw; + width: 0.5vw; + height: 16vw; + transform: translateZ(0.51vw); +} + +.muro__front { + width: 0.5vw; + height: 18vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-2vw); +} + +.muro__back { + width: 0.5vw; + height: 18vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-18vw); +} + +.muro__right { + width: 16vw; + height: 18vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-16vw) translateY(-18vw); +} + +.muro__left { + width: 16vw; + height: 18vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-18vw); +} + +.muro__top { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: translateZ(18vw); +} + +.muro__bottom { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.muro__front { + background-color: #0b0c1f; +} + +.muro__back { + background-color: #0b0c1f; +} + +.muro__right { + display: flex; + justify-content: center; + background-image: radial-gradient(circle, #1f2158, #0b0c1f); + overflow: hidden; +} + +.muro__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(40, 125, 210, 0.25), + transparent 30%, + transparent 70%, + rgba(40, 125, 210, 0.15) + ); +} + +.muro__right::after { + content: ""; + position: absolute; + bottom: 0; + left: 5%; + width: 90%; + height: 25%; + background-image: linear-gradient(to bottom, rgba(4, 5, 13, 0.75), rgba(4, 5, 13, 0.95)); + filter: blur(0.75vw); +} + +.muro__left { + background-color: #0b0c1f; + box-shadow: 0.5vw 0.5vw 0.6vw rgba(81, 137, 251, 0.3), 0.5vw -0.5vw 0.6vw rgba(81, 137, 251, 0.3), + -0.5vw 0.5vw 0.6vw rgba(81, 137, 251, 0.3), -0.5vw -0.5vw 0.6vw rgba(81, 137, 251, 0.3); +} + +.muro__top { + background-color: #0b0c1f; +} + +.muro__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + background-image: linear-gradient(to left, rgba(40, 125, 210, 0.5), rgba(81, 137, 251, 0.25)); +} + +.muro__bottom { + background-color: #0b0c1f; +} + +.muro__bottom::before { + content: ""; + position: absolute; + top: 0; + right: 0; + width: 5vw; + height: 100%; + background-image: linear-gradient(to left, #0b0c1f, transparent 50%); + transform-origin: right bottom; + transform: skewY(-20deg); + filter: blur(0.25vw); +} + +.sillon-c { + position: absolute; + right: 2vw; + bottom: 6vw; + width: 6vw; + height: 16vw; + transform: translateZ(0.5vw); +} + +.sillon-c::before { + content: ""; + position: absolute; + top: -10%; + left: -10%; + width: 120%; + height: 120%; + background-color: rgba(11, 12, 31, 0.85); + filter: blur(0.75vw); +} + +.sillon-b { + position: absolute; + left: 0; + top: 1vw; + width: 6vw; + height: 14vw; +} + +.sillon-b__front { + width: 6vw; + height: 3vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(11vw); +} + +.sillon-b__back { + width: 6vw; + height: 3vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-6vw) translateY(-3vw); +} + +.sillon-b__right { + width: 14vw; + height: 3vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(6vw) translateX(-14vw) translateY(-3vw); +} + +.sillon-b__left { + width: 14vw; + height: 3vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-3vw); +} + +.sillon-b__top { + width: 6vw; + height: 14vw; + transform-origin: top left; + transform: translateZ(3vw); +} + +.sillon-b__bottom { + width: 6vw; + height: 14vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-6vw); +} + +.sillon-b__front { + background-color: #121332; +} + +.sillon-b__back { + background-color: #0b0c1f; +} + +.sillon-b__right { + background-color: #0b0c1f; +} + +.sillon-b__left { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-b__left::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.1), transparent); +} + +.sillon-b__top { + background-image: linear-gradient(to right, #1f2158, #121332); + border-left: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-b__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.25), transparent); +} + +.sillon-b__bottom { + background-color: #0b0c1f; +} + +.sillon-l, +.sillon-r { + position: absolute; + left: 0; + bottom: 0; + width: 6vw; + height: 1vw; +} + +.sillon-l__front, +.sillon-r__front { + width: 6vw; + height: 4.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-3.5vw); +} + +.sillon-l__back, +.sillon-r__back { + width: 6vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-6vw) translateY(-4.5vw); +} + +.sillon-l__right, +.sillon-r__right { + width: 1vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(6vw) translateX(-1vw) translateY(-4.5vw); +} + +.sillon-l__left, +.sillon-r__left { + width: 1vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-4.5vw); +} + +.sillon-l__top, +.sillon-r__top { + width: 6vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(4.5vw); +} + +.sillon-l__bottom, +.sillon-r__bottom { + width: 6vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-6vw); +} + +.sillon-l__front, +.sillon-r__front { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-l__back, +.sillon-r__back { + background-color: #0b0c1f; +} + +.sillon-l__right, +.sillon-r__right { + background-image: linear-gradient(to bottom, #0b0c1f, black); +} + +.sillon-l__left, +.sillon-r__left { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-l__top, +.sillon-r__top { + background-image: linear-gradient(to right, #1f2158, #0f102b); + border-bottom: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-l__top::before, +.sillon-r__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.75), transparent); +} + +.sillon-l__bottom, +.sillon-r__bottom { + background-color: #0b0c1f; +} + +.sillon-r { + top: 0; +} + +.sillon-t { + position: absolute; + right: 0; + top: 1vw; + width: 1vw; + height: 1vw; + transform-origin: right; + transform: rotateY(7deg); +} + +.sillon-t__front { + width: 1vw; + height: 6.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(7.5vw); +} + +.sillon-t__back { + width: 1vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-6.5vw); +} + +.sillon-t__right { + width: 14vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-14vw) translateY(-6.5vw); +} + +.sillon-t__left { + width: 14vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6.5vw); +} + +.sillon-t__top { + width: 1vw; + height: 14vw; + transform-origin: top left; + transform: translateZ(6.5vw); +} + +.sillon-t__bottom { + width: 1vw; + height: 14vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.sillon-t__front { + background-image: linear-gradient(to bottom, #0b0c1f, #070814); +} + +.sillon-t__back { + background-image: linear-gradient(to bottom, #0b0c1f, #0b0c1f); +} + +.sillon-t__right { + background-image: linear-gradient(to bottom, #0b0c1f, black); +} + +.sillon-t__left { + background-color: #121332; +} + +.sillon-t__top { + background-image: linear-gradient(to right, #1f2158, #0f102b); + border-bottom: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-t__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.5), transparent); +} + +.sillon-t__bottom { + background-color: #0b0c1f; +} + +.mesa-c { + position: absolute; + left: 7vw; + top: 9.5vw; + width: 10vw; + height: 9vw; + transform: translateZ(0.5vw); +} + +.mesa-shadow { + position: absolute; + width: 100%; + height: 100%; + border-radius: 10%; + background-color: rgba(11, 12, 31, 0.95); + filter: blur(1vw); + transform: translateZ(0); +} + +.mesa { + position: absolute; + left: 0; + top: 0; + width: 10vw; + height: 9vw; + transform: translateZ(2vw); +} + +.mesa__front { + width: 10vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(8.5vw); +} + +.mesa__back { + width: 10vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-10vw) translateY(-0.5vw); +} + +.mesa__right { + width: 9vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(10vw) translateX(-9vw) translateY(-0.5vw); +} + +.mesa__left { + width: 9vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.mesa__top { + width: 10vw; + height: 9vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.mesa__bottom { + width: 10vw; + height: 9vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-10vw); +} + +.mesa__front { + background-image: linear-gradient(to right, #0b0c1f, black); +} + +.mesa__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(45deg, rgba(81, 137, 251, 0.125), rgba(180, 205, 253, 0.25), transparent 55%); +} + +.mesa__back { + background-color: #0b0c1f; +} + +.mesa__right { + background-color: black; +} + +.mesa__left { + background-color: #121332; +} + +.mesa__top { + background-image: linear-gradient(45deg, #0e0f27, #04050d); + overflow: hidden; +} + +.mesa__top::before { + content: ""; + position: absolute; + bottom: 0; + width: 50%; + height: 50%; + background-image: linear-gradient(45deg, rgba(81, 137, 251, 0.5), rgba(251, 250, 254, 0.125) 50%, transparent 55%); + filter: blur(0.5vw); +} + +.mesa__top::after { + content: ""; + position: absolute; + left: 2vw; + top: 2vw; + width: 20%; + height: 50%; + border-radius: 50%; + background-color: rgba(40, 125, 210, 0.079); + transform: rotateZ(-40deg); + filter: blur(0.75vw); +} + +.mesa__bottom { + background-color: #0b0c1f; +} + +.mesa-p { + position: absolute; + width: 0.25vw; + height: 0.25vw; +} + +.mesa-p__front { + width: 0.25vw; + height: 1.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-1.5vw); +} + +.mesa-p__back { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.25vw) translateY(-1.75vw); +} + +.mesa-p__right { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.25vw) translateX(-0.25vw) translateY(-1.75vw); +} + +.mesa-p__left { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.75vw); +} + +.mesa-p__top { + width: 0.25vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(1.75vw); +} + +.mesa-p__bottom { + width: 0.25vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.25vw); +} + +.mesa-p__front { + background-color: #0b0c1f; +} + +.mesa-p__back { + background-color: #0b0c1f; +} + +.mesa-p__right { + background-color: black; +} + +.mesa-p__left { + background-color: #121332; +} + +.mesa-p__top { + background-color: #1f2158; +} + +.mesa-p__bottom { + background-color: #0b0c1f; +} + +.mesa-p__bottom::before { + content: ""; + position: absolute; + width: 600%; + height: 200%; + top: 0; + right: 0; + border-radius: 10%; + transform: translateZ(-0.1vw); + background-color: rgba(0, 0, 0, 0.75); + filter: blur(0.35vw); +} + +.mesa-p:nth-of-type(1) { + left: 0.5vw; + top: 0.5vw; +} + +.mesa-p:nth-of-type(2) { + right: 0.5vw; + top: 0.5vw; +} + +.mesa-p:nth-of-type(3) { + left: 0.5vw; + bottom: 0.5vw; +} + +.mesa-p:nth-of-type(4) { + right: 0.5vw; + bottom: 0.5vw; +} + +.tablet { + position: absolute; + left: 13vw; + top: 12vw; + width: 2vw; + height: 2.5vw; + transform: translateZ(3.01vw) rotateZ(15deg); +} + +.tablet__front { + width: 2vw; + height: 0.125vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(2.375vw); +} + +.tablet__back { + width: 2vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-2vw) translateY(-0.125vw); +} + +.tablet__right { + width: 2.5vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(2vw) translateX(-2.5vw) translateY(-0.125vw); +} + +.tablet__left { + width: 2.5vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.125vw); +} + +.tablet__top { + width: 2vw; + height: 2.5vw; + transform-origin: top left; + transform: translateZ(0.125vw); +} + +.tablet__bottom { + width: 2vw; + height: 2.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-2vw); +} + +.tablet__front { + background-color: #8079ae; +} + +.tablet__back { + background-color: #383358; +} + +.tablet__right { + background-color: #383358; +} + +.tablet__left { + background-color: #9e99c1; +} + +.tablet__top { + background-color: #83abfc; + border: 0.2vw solid rgba(81, 137, 251, 0.25); + animation: pantalla-tablet 0.25s infinite; +} + +.tablet__bottom { + background-color: black; + box-shadow: 0.25vw 0.25vw 0.5vw rgba(24, 74, 124, 0.75), -0.25vw 0.25vw 0.5vw rgba(24, 74, 124, 0.75), + -0.25vw -0.25vw 0.5vw rgba(24, 74, 124, 0.75), 0.25vw -0.25vw 0.5vw rgba(24, 74, 124, 0.75); +} + +/**********************/ +/**********************/ +@keyframes pantalla-tablet { + from { + background-color: #6a9afb; + } +} + +@keyframes pantalla-tv { + from { + background-color: #6a9afb; + box-shadow: 0.125vw 0.125vw 0vw rgba(81, 137, 251, 0), -0.125vw 0.125vw 0vw rgba(81, 137, 251, 0), + 0.125vw -0.125vw 0vw rgba(81, 137, 251, 0), -0.125vw -0.125vw 0vw rgba(81, 137, 251, 0); + } +} + +@keyframes luz-tv { + from { + background-image: radial-gradient(rgba(36, 112, 188, 0.8), rgba(56, 121, 250, 0.8)); + } +} + +div#runtime { + width: 180px; + margin: auto; + color: #fff; + padding-inline: 5px; + border-radius: 10px; + background-color: rgba(0, 0, 0, 0.7); +} +#workboard { + font-size: 12px; +} +[data-theme="dark"] div#runtime { + color: #28b4c8; + box-shadow: 0 0 5px rgba(28, 69, 218, 0.71); + animation: flashlight 1s linear infinite alternate; +} +#ghbdages .github-badge img { + height: 20px; + max-width: 150px; + border-radius: 4px; + pointer-events: none; +} +#workboard img.boardsign { + width: 100%; + max-width: 130px; + border-radius: 0px; +} +@-moz-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@-webkit-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@-o-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} + +.author-content.author-content-item { + height: 19rem; + background-color: var(--anzhiyu-main); + background-position: left 28%; + background-repeat: no-repeat; + background-size: cover; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0; + background-image: linear-gradient(-45deg, var(--anzhiyu-main), #0f4667, #2a6973 150%, #67044d); + background-size: 400%; + animation: gradient 15s ease infinite; +} + +#skills-tags-group-all { + display: flex; + transform: rotate(0); + transition: 0.3s; +} +#skills-tags-group-all .tags-group-wrapper { + margin-top: 40px; + display: flex; + flex-wrap: nowrap; + animation: rowup 60s linear infinite; +} +#skills-tags-group-all .tags-group-icon-pair { + margin-left: 1rem; +} +#skills-tags-group-all .tags-group-icon { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 66px; + font-weight: 700; + box-shadow: var(--anzhiyu-shadow-blackdeep); + width: 120px; + height: 120px; + border-radius: 30px; +} +#skills-tags-group-all .tags-group-icon img { + width: 60px; + margin: 0 auto !important; +} +[data-theme="dark"] #skills-tags-group-all .tags-group-icon img { + filter: none; +} +#skills-tags-group-all .tags-group-icon-pair .tags-group-icon:nth-child(even) { + margin-top: 1rem; + transform: translate(-60px); +} + +#skills-tags-group-all .etc { + margin-right: 10px; + margin-top: 10px; +} + +@keyframes rowup { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-50%); + } +} + +#article-container .tag-Link { + background: var(--anzhiyu-secondbg); + border-radius: 8px !important; + display: flex; + border: var(--style-border); + flex-direction: column; + padding: 0.5rem 1rem !important; + border-width: 1px !important; + margin: 1rem 0; +} + +#article-container .tag-Link:hover { + border: var(--style-border-hover); +} + +#article-container .tag-Link .tag-link-tips { + border-bottom: var(--style-border); + padding-bottom: 4px; + font-size: 12px; + color: var(--anzhiyu-gray); + font-weight: normal; +} + +#article-container .tag-Link:hover .tag-link-tips { + color: var(--anzhiyu-white); +} + +#article-container .tag-Link .tag-link-bottom { + display: flex; + margin-top: 0.5rem; + align-items: center; + justify-content: space-around; +} + +#article-container .tag-Link .tag-link-bottom .tag-link-left { + width: 60px; + min-width: 60px; + height: 60px; + background-size: cover; + border-radius: var(--anzhiyu-border-radius); + background-color: var(--anzhiyu-card-bg); + display: flex; + align-items: center; + justify-content: center; +} +#article-container .tag-Link .tag-link-bottom .tag-link-left i { + margin: 0; + padding: 0; + margin: auto; + font-size: 24px; + color: var(--anzhiyu-fontcolor); +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right { + margin-left: 1rem; + max-width: calc(100% - 76px - 1rem); +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right .tag-link-title { + font-size: 1rem; + line-height: 1.2; +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right .tag-link-sitename { + font-size: 0.7rem; + color: var(--anzhiyu-gray); + font-weight: normal; + margin-top: 4px; +} + +#article-container .tag-Link:hover .tag-link-bottom .tag-link-right .tag-link-sitename { + color: var(--anzhiyu-white); +} + +#article-container .tag-Link .tag-link-bottom i { + margin-left: auto; +} + +.site-card-group .site-card .info { + margin-top: 0; +} +.site-card-group > a { + width: calc(100% / 4 - 0.5rem); + height: 150px; + position: relative; + display: block; + margin: 0.5rem 0.25rem; + float: left; + overflow: hidden; + padding: 0; + border-radius: 8px; + transition: all 0.3s ease 0s, transform cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + box-shadow: none; + border: var(--style-border) !important; +} + +.site-card-group > a .wrapper { + position: relative; +} + +.site-card-group > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} + +.site-card-group > a .info, +.site-card-group > a .wrapper .cover { + position: absolute; + top: 0; + left: 0; +} + +.site-card-group > a .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 3px; + background-color: rgba(255, 255, 255, 0.7); + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: -moz-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: -o-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: -ms-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; +} + +.site-card-group > a .info img { + position: relative; + top: 19px; + width: 80px; + height: 80px; + border-radius: 50%; + -webkit-box-shadow: 0 0 10px rgb(0 0 0 / 30%); + box-shadow: 0 0 10px rgb(0 0 0 / 30%); + z-index: 1; + text-align: center; + pointer-events: none; +} + +.site-card-group > a .info span { + padding: 20px 10% 60px 10%; + font-size: 16px; + width: 100%; + text-align: center; + -webkit-box-shadow: 0 0 10px rgb(0 0 0 / 30%); + box-shadow: 0 0 10px rgb(0 0 0 / 30%); + background-color: rgba(255, 255, 255, 0.7); + color: var(--font-color); + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + +.site-card-group .site-card:hover { + border-color: var(--anzhiyu-main) !important; + background-color: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme) !important; + box-shadow: var(--anzhiyu-shadow-theme) !important; +} +.site-card-group > a:hover .wrapper img { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); +} + +.site-card-group > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} +.site-card-group > a .wrapper img { + height: 150px; + pointer-events: none; +} +.site-card-group .site-card .wrapper img { + -webkit-transition: -webkit-transform 0.5s ease-out !important; + -moz-transition: -moz-transform 0.5s ease-out !important; + -o-transition: -o-transform 0.5s ease-out !important; + -ms-transition: -ms-transform 0.5s ease-out !important; + transition: transform 0.5s ease-out !important; +} +.site-card-group > a .wrapper .fadeIn { + -webkit-animation: coverIn 0.8s ease-out forwards; + -moz-animation: coverIn 0.8s ease-out forwards; + -o-animation: coverIn 0.8s ease-out forwards; + -ms-animation: coverIn 0.8s ease-out forwards; + animation: coverIn 0.8s ease-out forwards; +} + +.site-card-group > a:hover .info { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); +} + diff --git a/css/var.css b/css/var.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dailyPhoto/index.html b/dailyPhoto/index.html new file mode 100644 index 0000000000..4460e6b0f5 --- /dev/null +++ b/dailyPhoto/index.html @@ -0,0 +1,342 @@ +日常生活 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/equipment/index.html b/equipment/index.html new file mode 100644 index 0000000000..7973b3a17b --- /dev/null +++ b/equipment/index.html @@ -0,0 +1,341 @@ +我的装备 | WaterBoat的博客
    加载头像

    我的装备

    好物
    实物装备推荐
    跟 安知鱼 一起享受科技带来的乐趣

    生产力

    提升自己生产效率的硬件设备
    MacBook Pro 2021 14 英寸
    MacBook Pro 2021 14 英寸
    M1 16G / 512TB
    屏幕显示效果好、色彩准确、对比度强、性能强劲、续航优秀。可以用来开发和设计。
    redmi K60
    redmi K60
    黑色 / 512G
    超瓷晶面板,玻璃背板搭配铝金属边框,曲线优美的圆角设计,mini大小正好一只手就抓住,深得我心,唯一缺点大概就是续航不够。

    出行

    用来出行的实物及设备
    Apple Watch Series 8
    Apple Watch Series 8
    黑色
    始终为我的健康放哨,深夜弹出站立提醒,不过确实有效的提高了我的运动频率,配合apple全家桶还是非常棒的产品,缺点依然是续航。
    NATIONAL GEOGRAPHIC双肩包
    NATIONAL GEOGRAPHIC双肩包
    黑色
    国家地理黑色大包,正好装下16寸 Macbook Pro,并且背起来很舒适,底部自带防雨罩也好用,各种奇怪的小口袋深得我心。
    NATIONAL GEOGRAPHIC学生书包🎒
    NATIONAL GEOGRAPHIC学生书包🎒
    红白色
    国家地理黑色大包,冰冰🧊同款,颜值在线且实用。
    引用到评论
    \ No newline at end of file diff --git a/essay/index.html b/essay/index.html new file mode 100644 index 0000000000..c10e929f36 --- /dev/null +++ b/essay/index.html @@ -0,0 +1,341 @@ +即刻短文 | WaterBoat的博客
    加载头像

    即刻短文

    即刻短文
    咸鱼的日常生活。
    随时随地,分享生活
    • 高强度学习中....


    • 大伟哥:技术宅拯救世界真的很酷!!!


      链接
    • 今天在深圳去阳光国风认识了一位桂林老表,2333


    • JOJO是真的好看!


      链接
    - 只展示最近30条短文 -
    引用到评论
    \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd8205bc37febe8217fe7b384abaa69fb05cfadb GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/img/512.png b/img/512.png new file mode 100644 index 0000000000000000000000000000000000000000..c38a1c05bef99082b508113a90054e810788eac5 GIT binary patch literal 4172 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 D8#%s* literal 0 HcmV?d00001 diff --git a/img/algolia.svg b/img/algolia.svg new file mode 100644 index 0000000000..fd1569187a --- /dev/null +++ b/img/algolia.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/comment_bg.png b/img/comment_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0d5d5369377d756d149e8f975a09bff3e153f8 GIT binary patch literal 4246 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 Tk#o%d^ZR_goZx56eXRa}1tAeP literal 0 HcmV?d00001 diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd8205bc37febe8217fe7b384abaa69fb05cfadb GIT binary patch literal 4286 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

  • 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%0A=r*Dc}9;LU#+7##msnfSIVNPPLPhvS=8hw!7 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

    weNNvYU0DpyO(>WWvb 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

    e0}>ZhoOwbt(!z4*+KoS;8@(NIWPK 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 Xt}0sA4ezpIvQ|Y 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 Tdt?0E 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

    a)$xJ^Yud)wHu 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 b(b+{L(8J$d#Qf?F7Z;z4*Y!MH0Vn?#Ec#zk literal 0 HcmV?d00001 diff --git a/img/siteicon/16.png b/img/siteicon/16.png new file mode 100644 index 0000000000000000000000000000000000000000..16afd7ed577ad55010fcac1028a52e02b08a4631 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%BU0G|+7_X3}IU&qYb$@>faGjF9N_&O$Ldj9VW``;P<*&O$OdEWG@stGl1v4}>EZDz)!Ttt^1rBpp zirNFklRRATMou+N_+MmNmbNv;JnZ$=fM1jaaZ)`)Yh#Be(IPWbe4;&)jzb|W!>M& bE3dL2U&?;m&HPvd&^887S3j3^P6Px#T2M?>MMrQ>+hqU$|M-AR|EGcf;?@7ftMGS1h+IctO+w;iE$MDJuWL-S zvtHMGQk!H-c3ekDK?chJ000eiQchC)u@4muzF;CXl0!$wtQB+gY)r%99nF`c;I(#r=hz68J^ zrNpIf8fxRF@!C42h)V6(yKM=P`Z!J_KAeB36Tj~^;{J5sWBpU#Yot;USZs@oWDKxc za{$DEPWPCPZ~+|_09XPn55V^Xz5}NK*fJpVErceDzQ#Q><( Z{s4d-BKx(%Ja_;A002ovPDHLkV1n>Gw0Zyl literal 0 HcmV?d00001 diff --git a/img/siteicon/apple-icon-180.png b/img/siteicon/apple-icon-180.png new file mode 100644 index 0000000000000000000000000000000000000000..2007e6da968531187d8a884281fdf06752c59a59 GIT binary patch literal 2272 zcmcJQ={wX97sf|I)u{K#_lI)t9Y?Cd*APO^Oi6j)Vj+n9jiV8Cb zjXhh2u@}jVCENGsxt`}=c+Pd*_kDfdoEPWCxsz?J&3L&)xj-NgulaRj_)(JnqZ6!0 z&Ly~Y`A}gz?OA zWat~=ZT{TM^r!Wf%yy6A*Um4~5|M8ltLqRw6%i{o%SAY2m#imUc0U3@>!dTMu-LB?7Gau;YLWt{g!LoBLmynw(tEOTHzUsA zNdorQAq=DGHnJc#zweLnGKjR5%aX7*aLH)@=E;?La(H*rFTZBALh^D#kA7Q9X9rRd z==+3wGg{kmwr0jf-DTqIEaio#3dbeHk00H}+R2R{QhUL!zn{x0X3_Ks_tC~@&b5>^ zzJBraAui8N+4R&oC54+~nYf3zk1k#N_Q;(GcjXscbE*%})$79kJN`msH)jhgP%BH7)W*J&&=1s9u@Vw0ouu3Mo$EZg!20-C;@Bi#LE?T`TqPd~?f=3xlL?#s%4u*%8nf zg;b^5ZYXpq%8N}h#Hwr-OSoLIQ{b2hfi8W3lQ|F$8u2wTx34M}2vfP2*qFz5rwTbj zSwpD5wmVjPL1&pXN9G~h4*r6{FlMKrXa{4i`FG_KSNwAp7pHp$Vhx!Ik2o&1#BsEWp)XxyhJFaSO zl@t}B2KgKQP;Pc-XMZIaRuDc)v@eIUMbl*8`Lr#3Yoq7@;Oi_Jj0wIR)5_-~%gf7N zjJd@ZZSAF*MV_(+wcv}lUikR<^e$Xb&z`%I&fObE;dCvq7TiVZh-oReKH5`Dj?%<) zqf(H9p06*HViL#KDg*VCqYj-3`Y}1jYEct|?Cw8nJ` zoO$;Duu`U$Jp!eL1%@}guIt@xciW_lB+!>sT zJXI^V->upjNiQq#+}-vx3bq&uA+QW`7vX(-_?tWC4T*eq7!47pL@!fs_LWoV?7fP2 z>h&NZc<&JJ%=UD!P>67kp{tAt-d3fTKf+N+WBY`vcwmJ4vU9fmY@jZ+hkAa3&1f%6 zSC9z9xCw;dN~JV-#Ez{H|7mDwE`c9Q!|m?u`!j{89>t2f+ANjojGcQVQM> z%HrlYep;3Zju7B6i|F^zk4xEhQm7pwJsP?nfAagaLS8>A^7J2bc~pE?n%1$;oX>VZ zaP?P7?5C)_ne|^FRTM$6tj4*qeo{$Q^i%fmW*g2LI;Z${I;brb$=}G!?t>kO5Bn2u zO~Xnb*snakCp|Ma;2)#g{LgyHH%BG2lJMrl8y&6H>7*IDl1jT zmHSjPp!%>x-LmH%dv#+ODOAAjyg1d5V#Md&yZSTLXp^ z248H<#{a1=&Rt*>ha2Oo%wA(S&I9V!R!{-bg2n^R?Ufc0Np4s7Wk#E6Om7hw^75HOs53Xp#mJQg_$Bz=+(MgHupH0OZEPYmow&-_BL3CJ# zOZ@C)%9;841`%x$)8d zjX<}MgHCS34DxFtkwv1<0jrY>o<-&-6K}}(WxaO~M_jjIOc}LXQ$!}j=t#L#5@y>t xor(KBb>V=1F1N_wzL{HO^#f+z_0=VSwKV#@$8)vNmZLTXnVVP}6O8V}{R?#Vnu`Dc literal 0 HcmV?d00001 diff --git a/img/siteicon/manifest-icon-192.maskable.png b/img/siteicon/manifest-icon-192.maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d7056ae4566694e087ed01f1f5495065e359e6 GIT binary patch literal 2329 zcmb`I>p#5dWnnE%Z)8w4R#DVP6S zw!_5^dVxG1_{0N@bGvcDiWln){@DZ*Fq60S!Bi}`z6@5xgLC8H;_TK#Com%re3K47 z^8%X-!R~sH^>YPp1NJxLm{>6DJ~-UN!I`abSHXN@+(Zn{(`7sEa<(^WlH}aC_N^qB zRy|j~ytu#`|CRbElG2PB9vq0oVM8xl-->XYou6(jzPga;8tHzfmGQp!mHXHW*M`p6 zk2r^~9j#vZu$A3A$b~pLTmpW7CNb3vAzZ1gubKEg*2xTqyz#Y*IbI7Jxfm1x2vAYh z7U)nWhb9!vL`b!XRD7IL-%$B}&o4@hkrt?CXq#R=7!o$WwA0w>4#gRXE1xSKV2#q; zOslF0$eF9l2Zfq~wfm(C1AicVC?>KEl*x=AW$F3zg6i>OsJ!hwmD(mieFZnXxAB3L1MhN$TOE1gT|^oo-?Tj-k54Zk9zi)db?qR<3KNXeB$O8vl9_`zdw7`<)U!yY$=j z>WL}3jc$7_EloHLKcT*@SS zNDfSnWK?gG4h!!|(9rZ&y%P=iNA^ z{}yv^aD`iy5!+W+a{y?0d-yG&?;tJtlmK-#%X*~557)YW)m?y@llm2|V3zfKqp$Y} zvG*;E{dcSYk#%$aKxT-gD(NFk-MHt`mk-pOq>9j%HnuaYr}t23_wvAazVV9qQD8Q3 zr(td0e>;4jZRS~4hX~L#|JFQ@vl7mKvsy+6AJG0iEIYKG{L6T*%S{k4*mi>ygud;L zyPKMLCY9G0cF83`*&yt;=sN@5rbC3x2yeZZveBYzqZD*+NN139i!$KEq03|yeZ`Z$ zbQ5aJl+sHlkOo3;7wXkJeJdZ_cdyAe@cp9W)9=@T+mzU@8>l#ib9oPz_>cN?dXnF3#y!yXK@bRFH;hY2jmn8}cq~LLNP6%&!|qS4Eys><4M_ zkroA>hJX1>799=FmErC^63rMxPA2@pUH%y^-tfO?Cc=QLhya`ZOh!Pm0HMfoG2JF| zv{aHyF8ozj%-@LBXZxpr&)|!g@LRl+8Z~OB#9iN66mtY3qWL$itbZv_KzS;Po3^qf zq@6G~=-Q$fIw~SZanp)_OnFX_=V`xbn;wbuSU-Unk>Nr*7Zd8q5$y=>%@LGBpwefY z+rIvD%rVpSlzW*K$gVt(`*~L=i|=b~9EQ(I*FDtKme%%I&kLj0jBV3Tlmxqe>sWgs zezl`t@A5|v=99@Cv41X7vtOr_owM}YPu($->D8IupuS2p|D>NGe?#w*poxaD@T1~J z8W~@c)We2{>tPD}sfJTMvUezGgr9;T#{YQJ^#CP9(LG5{VIzM)AXP8-<87XL({7Ce NC>sasQcKUse*t9zq8$JL literal 0 HcmV?d00001 diff --git a/img/siteicon/manifest-icon-512.maskable.png b/img/siteicon/manifest-icon-512.maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..2a24339f3beabd07fd24c0b9da13e2a0e30c434e GIT binary patch literal 6723 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的博客 - 正因你我生于繁华,弥足之花方显珍贵

    加载头像
    引用到评论
    \ No newline at end of file diff --git a/js/anzhiyu/ai_abstract.js b/js/anzhiyu/ai_abstract.js new file mode 100644 index 0000000000..e018047bdf --- /dev/null +++ b/js/anzhiyu/ai_abstract.js @@ -0,0 +1,438 @@ +(function () { + const { + randomNum, + basicWordCount, + btnLink, + key: AIKey, + Referer: AIReferer, + gptName, + switchBtn, + mode: initialMode, + } = GLOBAL_CONFIG.postHeadAiDescription; + + const { title, postAI, pageFillDescription } = GLOBAL_CONFIG_SITE; + + let lastAiRandomIndex = -1; + let animationRunning = true; + let mode = initialMode; + let refreshNum = 0; + let prevParam; + let audio = null; + let isPaused = false; + let summaryID = null; + + const post_ai = document.querySelector(".post-ai-description"); + const aiTitleRefreshIcon = post_ai.querySelector(".ai-title .anzhiyufont.anzhiyu-icon-arrow-rotate-right"); + let aiReadAloudIcon = post_ai.querySelector(".anzhiyu-icon-circle-dot"); + const explanation = post_ai.querySelector(".ai-explanation"); + + let aiStr = ""; + let aiStrLength = ""; + let delayInit = 600; + let indexI = 0; + let indexJ = 0; + let timeouts = []; + let elapsed = 0; + + const observer = createIntersectionObserver(); + const aiFunctions = [introduce, aiTitleRefreshIconClick, aiRecommend, aiGoHome]; + + const aiBtnList = post_ai.querySelectorAll(".ai-btn-item"); + const filteredHeadings = Array.from(aiBtnList).filter(heading => heading.id !== "go-tianli-blog"); + filteredHeadings.forEach((item, index) => { + item.addEventListener("click", () => { + aiFunctions[index](); + }); + }); + + document.getElementById("ai-tag").addEventListener("click", onAiTagClick); + aiTitleRefreshIcon.addEventListener("click", onAiTitleRefreshIconClick); + document.getElementById("go-tianli-blog").addEventListener("click", () => { + window.open(btnLink, "_blank"); + }); + aiReadAloudIcon.addEventListener("click", readAloud); + + async function readAloud() { + if (!summaryID) { + anzhiyu.snackbarShow("摘要还没加载完呢,请稍后。。。"); + return; + } + aiReadAloudIcon = post_ai.querySelector(".anzhiyu-icon-circle-dot"); + aiReadAloudIcon.style.opacity = "0.2"; + if (audio && !isPaused) { + audio.pause(); + isPaused = true; + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.animation = ""; + aiReadAloudIcon.style.cssText = "animation: ''; opacity: 1;cursor: pointer;"; + return; + } + + if (audio && isPaused) { + audio.play(); + isPaused = false; + aiReadAloudIcon.style.cssText = "animation: breathe .5s linear infinite; opacity: 0.2;cursor: pointer"; + return; + } + + const options = { + key: AIKey, + Referer: AIReferer, + }; + const requestParams = new URLSearchParams({ + key: options.key, + id: summaryID, + }); + + const requestOptions = { + method: "GET", + headers: { + "Content-Type": "application/json", + Referer: options.Referer, + }, + }; + + try { + const response = await fetch(`https://summary.tianli0.top/audio?${requestParams}`, requestOptions); + if (response.status === 403) { + console.error("403 refer与key不匹配。"); + } else if (response.status === 500) { + console.error("500 系统内部错误"); + } else { + const audioBlob = await response.blob(); + const audioURL = URL.createObjectURL(audioBlob); + audio = new Audio(audioURL); + audio.play(); + aiReadAloudIcon.style.cssText = "animation: breathe .5s linear infinite; opacity: 0.2;cursor: pointer"; + audio.addEventListener("ended", () => { + audio = null; + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.animation = ""; + }); + } + } catch (error) { + console.error("请求发生错误❎"); + } + } + if (switchBtn) { + document.getElementById("ai-Toggle").addEventListener("click", changeShowMode); + } + + aiAbstract(); + showAiBtn(); + + function createIntersectionObserver() { + return new IntersectionObserver( + entries => { + let isVisible = entries[0].isIntersecting; + animationRunning = isVisible; + if (animationRunning) { + delayInit = indexI === 0 ? 200 : 20; + timeouts[1] = setTimeout(() => { + if (indexJ) { + indexI = 0; + indexJ = 0; + } + if (indexI === 0) { + explanation.innerHTML = aiStr.charAt(0); + } + requestAnimationFrame(animate); + }, delayInit); + } + }, + { threshold: 0 } + ); + } + + function animate(timestamp) { + if (!animationRunning) { + return; + } + if (!animate.start) animate.start = timestamp; + elapsed = timestamp - animate.start; + if (elapsed >= 20) { + animate.start = timestamp; + if (indexI < aiStrLength - 1) { + let char = aiStr.charAt(indexI + 1); + let delay = /[,.,。!?!?]/.test(char) ? 150 : 20; + if (explanation.firstElementChild) { + explanation.removeChild(explanation.firstElementChild); + } + explanation.innerHTML += char; + let div = document.createElement("div"); + div.className = "ai-cursor"; + explanation.appendChild(div); + indexI++; + if (delay === 150) { + post_ai.querySelector(".ai-explanation .ai-cursor").style.opacity = "0.2"; + } + if (indexI === aiStrLength - 1) { + observer.disconnect(); + explanation.removeChild(explanation.firstElementChild); + } + timeouts[0] = setTimeout(() => { + requestAnimationFrame(animate); + }, delay); + } + } else { + requestAnimationFrame(animate); + } + } + + function clearTimeouts() { + if (timeouts.length) { + timeouts.forEach(item => { + if (item) { + clearTimeout(item); + } + }); + } + } + + function startAI(str, df = true) { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + observer.disconnect(); + explanation.innerHTML = df ? "生成中. . ." : "请等待. . ."; + aiStr = str; + aiStrLength = aiStr.length; + observer.observe(post_ai); + } + + async function aiAbstract(num = basicWordCount) { + if (mode === "tianli") { + await aiAbstractTianli(num); + } else { + aiAbstractLocal(); + } + } + + async function aiAbstractTianli(num) { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + observer.disconnect(); + + num = Math.max(10, Math.min(2000, num)); + const options = { + key: AIKey, + Referer: AIReferer, + }; + const truncateDescription = (title + pageFillDescription).trim().substring(0, num); + + const requestBody = { + key: options.key, + content: truncateDescription, + url: location.href, + }; + + const requestOptions = { + method: "POST", + headers: { + "Content-Type": "application/json", + Referer: options.Referer, + }, + body: JSON.stringify(requestBody), + }; + console.info(truncateDescription.length); + try { + let animationInterval = null; + let summary; + if (animationInterval) clearInterval(animationInterval); + animationInterval = setInterval(() => { + const animationText = "生成中" + ".".repeat(indexJ); + explanation.innerHTML = animationText; + indexJ = (indexJ % 3) + 1; + }, 500); + const response = await fetch(`https://summary.tianli0.top/`, requestOptions); + let result; + if (response.status === 403) { + result = { + summary: "403 refer与key不匹配。", + }; + } else if (response.status === 500) { + result = { + summary: "500 系统内部错误", + }; + } else { + result = await response.json(); + } + + summary = result.summary.trim(); + summaryID = result.id; + + setTimeout(() => { + aiTitleRefreshIcon.style.opacity = "1"; + }, 300); + if (summary) { + startAI(summary); + } else { + startAI("摘要获取失败!!!请检查Tianli服务是否正常!!!"); + } + clearInterval(animationInterval); + } catch (error) { + console.error(error); + explanation.innerHTML = "发生异常" + error; + } + } + + function aiAbstractLocal() { + const strArr = postAI.split(",").map(item => item.trim()); + if (strArr.length !== 1) { + let randomIndex = Math.floor(Math.random() * strArr.length); + while (randomIndex === lastAiRandomIndex) { + randomIndex = Math.floor(Math.random() * strArr.length); + } + lastAiRandomIndex = randomIndex; + startAI(strArr[randomIndex]); + } else { + startAI(strArr[0]); + } + setTimeout(() => { + aiTitleRefreshIcon.style.opacity = "1"; + }, 600); + } + + function aiRecommend() { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + explanation.innerHTML = "生成中. . ."; + aiStr = ""; + aiStrLength = ""; + observer.disconnect(); + timeouts[2] = setTimeout(() => { + explanation.innerHTML = recommendList(); + }, 600); + } + + function recommendList() { + let thumbnail = document.querySelectorAll(".relatedPosts-list a"); + if (!thumbnail.length) { + const cardRecentPost = document.querySelector(".card-widget.card-recent-post"); + if (!cardRecentPost) return ""; + + thumbnail = cardRecentPost.querySelectorAll(".aside-list-item a"); + + let list = ""; + for (let i = 0; i < thumbnail.length; i++) { + const item = thumbnail[i]; + list += `
    ${ + i + 1 + }:${item.title}
    `; + } + + return `很抱歉,无法找到类似的文章,你也可以看看本站最新发布的文章:
    ${list}
    `; + } + + let list = ""; + for (let i = 0; i < thumbnail.length; i++) { + const item = thumbnail[i]; + list += `
    推荐${ + i + 1 + }:${item.title}
    `; + } + + return `推荐文章:
    ${list}
    `; + } + + function aiGoHome() { + startAI("正在前往博客主页...", false); + timeouts[2] = setTimeout(() => { + if (window.pjax) { + pjax.loadUrl("/"); + } else { + location.href = location.origin; + } + }, 1000); + } + + function introduce() { + if (mode == "tianli") { + startAI("我是文章辅助AI: TianliGPT,点击下方的按钮,让我生成本文简介、推荐相关文章等。"); + } else { + startAI(`我是文章辅助AI: ${gptName} GPT,点击下方的按钮,让我生成本文简介、推荐相关文章等。`); + } + } + + function aiTitleRefreshIconClick() { + aiTitleRefreshIcon.click(); + } + + function onAiTagClick() { + if (mode === "tianli") { + post_ai.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "none")); + document.getElementById("go-tianli-blog").style.display = "block"; + startAI( + "你好,我是Tianli开发的摘要生成助理TianliGPT,是一个基于GPT-4的生成式AI。我在这里只负责摘要的预生成和显示,你无法与我直接沟通,如果你也需要一个这样的AI摘要接口,可以在下方购买。" + ); + } else { + post_ai.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "block")); + document.getElementById("go-tianli-blog").style.display = "none"; + startAI( + `你好,我是本站摘要生成助理${gptName} GPT,是一个基于GPT-4的生成式AI。我在这里只负责摘要的预生成和显示,你无法与我直接沟通。` + ); + } + } + + function onAiTitleRefreshIconClick() { + const truncateDescription = (title + pageFillDescription).trim().substring(0, basicWordCount); + + aiTitleRefreshIcon.style.opacity = "0.2"; + aiTitleRefreshIcon.style.transitionDuration = "0.3s"; + aiTitleRefreshIcon.style.transform = "rotate(" + 360 * refreshNum + "deg)"; + if (truncateDescription.length <= basicWordCount) { + let param = truncateDescription.length - Math.floor(Math.random() * randomNum); + while (param === prevParam || truncateDescription.length - param === prevParam) { + param = truncateDescription.length - Math.floor(Math.random() * randomNum); + } + prevParam = param; + aiAbstract(param); + } else { + let value = Math.floor(Math.random() * randomNum) + basicWordCount; + while (value === prevParam || truncateDescription.length - value === prevParam) { + value = Math.floor(Math.random() * randomNum) + basicWordCount; + } + aiAbstract(value); + } + refreshNum++; + } + + function changeShowMode() { + mode = mode === "tianli" ? "local" : "tianli"; + if (mode === "tianli") { + document.getElementById("ai-tag").innerHTML = "TianliGPT"; + + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.cursor = "pointer"; + } else { + aiReadAloudIcon.style.opacity = "0"; + aiReadAloudIcon.style.cursor = "auto"; + if ((document.getElementById("go-tianli-blog").style.display = "block")) { + document.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "block")); + document.getElementById("go-tianli-blog").style.display = "none"; + } + document.getElementById("ai-tag").innerHTML = gptName + " GPT"; + } + aiAbstract(); + } + + function showAiBtn() { + if (mode === "tianli") { + document.getElementById("ai-tag").innerHTML = "TianliGPT"; + } else { + document.getElementById("ai-tag").innerHTML = gptName + " GPT"; + } + } +})(); diff --git a/js/anzhiyu/comment_barrage.js b/js/anzhiyu/comment_barrage.js new file mode 100644 index 0000000000..b7e456fe3c --- /dev/null +++ b/js/anzhiyu/comment_barrage.js @@ -0,0 +1,179 @@ +if (document.querySelector(".comment-barrage")) { + var commentBarrageConfig = { + maxBarrage: GLOBAL_CONFIG.commentBarrageConfig.maxBarrage, + barrageTime: GLOBAL_CONFIG.commentBarrageConfig.barrageTime, + twikooUrl: GLOBAL_CONFIG.twikooEnvId, + accessToken: GLOBAL_CONFIG.commentBarrageConfig.accessToken, + mailMd5: GLOBAL_CONFIG.commentBarrageConfig.mailMd5, + pageUrl: window.location.pathname, + barrageTimer: [], + barrageList: [], + barrageIndex: 0, + dom: document.querySelector(".comment-barrage"), + }; + var commentInterval = null; + var hoverOnCommentBarrage = false; + + document.querySelector(".comment-barrage").addEventListener("mouseenter", function () { + hoverOnCommentBarrage = true; + }); + document.querySelector(".comment-barrage").addEventListener("mouseleave", function () { + hoverOnCommentBarrage = false; + }); + + function initCommentBarrage() { + if (!commentBarrageConfig.dom) return; + + var data = JSON.stringify({ + event: "COMMENT_GET", + "commentBarrageConfig.accessToken": commentBarrageConfig.accessToken, + url: commentBarrageConfig.pageUrl, + }); + var xhr = new XMLHttpRequest(); + xhr.withCredentials = true; + xhr.addEventListener("readystatechange", function () { + if (this.readyState === 4 && this.responseText) { + commentBarrageConfig.barrageList = commentLinkFilter(JSON.parse(this.responseText).data); + commentBarrageConfig.dom.innerHTML = ""; + } + }); + xhr.open("POST", commentBarrageConfig.twikooUrl); + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.send(data); + + clearInterval(commentInterval); + commentInterval = null; + + commentInterval = setInterval(() => { + if (commentBarrageConfig.barrageList.length && !hoverOnCommentBarrage) { + popCommentBarrage(commentBarrageConfig.barrageList[commentBarrageConfig.barrageIndex]); + commentBarrageConfig.barrageIndex += 1; + commentBarrageConfig.barrageIndex %= commentBarrageConfig.barrageList.length; + } + if ( + commentBarrageConfig.barrageTimer.length > + (commentBarrageConfig.barrageList.length > commentBarrageConfig.maxBarrage + ? commentBarrageConfig.maxBarrage + : commentBarrageConfig.barrageList.length) && + !hoverOnCommentBarrage + ) { + removeCommentBarrage(commentBarrageConfig.barrageTimer.shift()); + } + }, commentBarrageConfig.barrageTime); + } + + function commentLinkFilter(data) { + data.sort((a, b) => { + return a.created - b.created; + }); + let newData = []; + data.forEach(item => { + newData.push(...getCommentReplies(item)); + }); + return newData; + } + + function getCommentReplies(item) { + if (item.replies) { + let replies = [item]; + item.replies.forEach(item => { + replies.push(...getCommentReplies(item)); + }); + return replies; + } else { + return []; + } + } + + function popCommentBarrage(data) { + let barrage = document.createElement("div"); + barrage.className = "comment-barrage-item"; + barrage.innerHTML = ` + + + ${data.comment} + + `; + + // 获取anzhiyu标签内的所有pre元素 + let anzhiyuPres = barrage.querySelectorAll("anzhiyu pre"); + + // 遍历每个pre元素,将其替换为"【代码】" + anzhiyuPres.forEach(pre => { + let codePlaceholder = document.createElement("span"); + codePlaceholder.innerText = "【代码】"; + pre.parentNode.replaceChild(codePlaceholder, pre); + }); + + // 获取anzhiyu标签内的所有图片元素 + let anzhiyuImages = barrage.querySelectorAll("anzhiyu img"); + + // 遍历每个图片元素,将其替换为"【图片】",但排除带有class=tk-owo-emotion的图片 + anzhiyuImages.forEach(image => { + if (!image.classList.contains("tk-owo-emotion")) { + image.style.display = "none"; // 隐藏图片 + let placeholder = document.createElement("span"); + placeholder.innerText = "【图片】"; + image.parentNode.replaceChild(placeholder, image); + } + }); + commentBarrageConfig.barrageTimer.push(barrage); + commentBarrageConfig.dom.append(barrage); + } + + function removeCommentBarrage(barrage) { + barrage.className = "comment-barrage-item out"; + + setTimeout(() => { + if (commentBarrageConfig.dom && commentBarrageConfig.dom.contains(barrage)) { + commentBarrageConfig.dom.removeChild(barrage); + } + }, 1000); + } + + // 自动隐藏 + const commentEntryCallback = entries => { + const commentBarrage = document.querySelector(".comment-barrage"); + const postComment = document.getElementById("post-comment"); + + entries.forEach(entry => { + if (postComment && commentBarrage && document.body.clientWidth > 768) { + commentBarrage.style.bottom = entry.isIntersecting ? `-${commentBarrageConfig.maxBarrage * 200}px` : "0"; + } + }); + }; + // 创建IntersectionObserver实例 + const observer = new IntersectionObserver(commentEntryCallback, { + root: null, + rootMargin: "0px", + threshold: 0, + }); + // 监视目标元素 + const postCommentTarget = document.getElementById("post-comment"); + if (postCommentTarget) { + observer.observe(postCommentTarget); + } + + initCommentBarrage(); + + if (localStorage.getItem("commentBarrageSwitch") !== "false") { + document.querySelector(".comment-barrage").style.display = "flex"; + document.querySelector(".menu-commentBarrage-text").textContent = "关闭热评"; + } else { + document.querySelector(".comment-barrage").style.display = "none"; + document.querySelector(".menu-commentBarrage-text").textContent = "显示热评"; + } + + document.addEventListener("pjax:send", function () { + clearInterval(commentInterval); + }); +} diff --git a/js/anzhiyu/people.js b/js/anzhiyu/people.js new file mode 100644 index 0000000000..bf90d9b663 --- /dev/null +++ b/js/anzhiyu/people.js @@ -0,0 +1,271 @@ +"use strict"; +function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _unsupportedIterableToArray(e) || _nonIterableSpread(); +} + +function _nonIterableSpread() { + throw new TypeError( + "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." + ); +} + +function _unsupportedIterableToArray(e, r) { + if (e) { + if ("string" == typeof e) return _arrayLikeToArray(e, r); + var t = Object.prototype.toString.call(e).slice(8, -1); + return ( + "Object" === t && e.constructor && (t = e.constructor.name), + "Map" === t || "Set" === t + ? Array.from(e) + : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) + ? _arrayLikeToArray(e, r) + : void 0 + ); + } +} + +function _iterableToArray(e) { + if (("undefined" != typeof Symbol && null != e[Symbol.iterator]) || null != e["@@iterator"]) return Array.from(e); +} + +function _arrayWithoutHoles(e) { + if (Array.isArray(e)) return _arrayLikeToArray(e); +} + +function _arrayLikeToArray(e, r) { + (null == r || r > e.length) && (r = e.length); + for (var t = 0, a = new Array(r); t < r; t++) a[t] = e[t]; + return a; +} + +function _classCallCheck(e, r) { + if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function"); +} + +function _defineProperties(e, r) { + for (var t = 0; t < r.length; t++) { + var a = r[t]; + (a.enumerable = a.enumerable || !1), + (a.configurable = !0), + "value" in a && (a.writable = !0), + Object.defineProperty(e, a.key, a); + } +} + +function _createClass(e, r, t) { + return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), e; +} +var peopleConfig = { + src: GLOBAL_CONFIG.peoplecanvas.img, + rows: 15, + cols: 7, + }, + randomRange = function (e, r) { + return e + Math.random() * (r - e); + }, + randomIndex = function (e) { + return 0 | randomRange(0, e.length); + }, + removeFromArray = function (e, r) { + return e.splice(r, 1)[0]; + }, + removeItemFromArray = function (e, r) { + return removeFromArray(e, e.indexOf(r)); + }, + removeRandomFromArray = function (e) { + return removeFromArray(e, randomIndex(e)); + }, + getRandomFromArray = function (e) { + return e[0 | randomIndex(e)]; + }, + resetPeep = function (e) { + var r, + t, + a = e.stage, + n = e.peep, + o = 0.5 < Math.random() ? 1 : -1, + i = 100 - 250 * gsap.parseEase("power2.in")(Math.random()), + s = a.height - n.height + i; + return ( + 1 == o ? ((r = -n.width), (t = a.width), (n.scaleX = 1)) : ((r = a.width + n.width), (t = 0), (n.scaleX = -1)), + (n.x = r), + (n.y = s), + { + startX: r, + startY: (n.anchorY = s), + endX: t, + } + ); + }, + normalWalk = function (e) { + var r = e.peep, + t = e.props, + a = (t.startX, t.startY), + n = t.endX, + o = gsap.timeline(); + return ( + o.timeScale(randomRange(0.5, 1.5)), + o.to( + r, + { + duration: 10, + x: n, + ease: "none", + }, + 0 + ), + o.to( + r, + { + duration: 0.25, + repeat: 40, + yoyo: !0, + y: a - 10, + }, + 0 + ), + o + ); + }, + walks = [normalWalk], + Peep = (function () { + function a(e) { + var r = e.image, + t = e.rect; + _classCallCheck(this, a), + (this.image = r), + this.setRect(t), + (this.x = 0), + (this.y = 0), + (this.anchorY = 0), + (this.scaleX = 1), + (this.walk = null); + } + return ( + _createClass(a, [ + { + key: "setRect", + value: function (e) { + (this.rect = e), + (this.width = e[2]), + (this.height = e[3]), + (this.drawArgs = [this.image].concat(_toConsumableArray(e), [0, 0, this.width, this.height])); + }, + }, + { + key: "render", + value: function (e) { + e.save(), + e.translate(this.x, this.y), + e.scale(this.scaleX, 1), + e.drawImage.apply(e, _toConsumableArray(this.drawArgs)), + e.restore(); + }, + }, + ]), + a + ); + })(), + img = document.createElement("img"); +(img.onload = init), (img.src = peopleConfig.src); +let peoplecanvasEl = document.getElementById("peoplecanvas"); + +let ctx = peoplecanvasEl ? peoplecanvasEl.getContext("2d") : undefined, + stage = { + width: 0, + height: 0, + }, + allPeeps = [], + availablePeeps = [], + crowd = []; + +function init() { + if (!peoplecanvasEl) return; + createPeeps(), resize(), gsap.ticker.add(render), window.addEventListener("resize", resize); +} +document.addEventListener("pjax:success", e => { + peoplecanvasEl = document.getElementById("peoplecanvas"); + if (peoplecanvasEl) { + (ctx = peoplecanvasEl ? peoplecanvasEl.getContext("2d") : undefined), window.removeEventListener("resize", resize); + gsap.ticker.remove(render); + setTimeout(() => { + if (!peoplecanvasEl) return; + resize(), gsap.ticker.add(render), window.addEventListener("resize", resize); + }, 300); + } +}); + +function createPeeps() { + for ( + var e = peopleConfig.rows, + r = peopleConfig.cols, + t = e * r, + a = img.naturalWidth / e, + n = img.naturalHeight / r, + o = 0; + o < t; + o++ + ) + allPeeps.push( + new Peep({ + image: img, + rect: [(o % e) * a, ((o / e) | 0) * n, a, n], + }) + ); +} + +function resize() { + if (peoplecanvasEl && peoplecanvasEl.clientWidth != 0) { + (stage.width = peoplecanvasEl.clientWidth), + (stage.height = peoplecanvasEl.clientHeight), + (peoplecanvasEl.width = stage.width * devicePixelRatio), + (peoplecanvasEl.height = stage.height * devicePixelRatio), + crowd.forEach(function (e) { + e.walk.kill(); + }), + (crowd.length = 0), + (availablePeeps.length = 0), + availablePeeps.push.apply(availablePeeps, allPeeps), + initCrowd(); + } +} + +function initCrowd() { + for (; availablePeeps.length; ) addPeepToCrowd().walk.progress(Math.random()); +} + +function addPeepToCrowd() { + var e = removeRandomFromArray(availablePeeps), + r = getRandomFromArray(walks)({ + peep: e, + props: resetPeep({ + peep: e, + stage: stage, + }), + }).eventCallback("onComplete", function () { + removePeepFromCrowd(e), addPeepToCrowd(); + }); + return ( + (e.walk = r), + crowd.push(e), + crowd.sort(function (e, r) { + return e.anchorY - r.anchorY; + }), + e + ); +} + +function removePeepFromCrowd(e) { + removeItemFromArray(crowd, e), availablePeeps.push(e); +} + +function render() { + if (!peoplecanvasEl) return; + (peoplecanvasEl.width = peoplecanvasEl.width), + ctx.save(), + ctx.scale(devicePixelRatio, devicePixelRatio), + crowd.forEach(function (e) { + e.render(ctx); + }), + ctx.restore(); +} diff --git a/js/anzhiyu/random_friends_post.js b/js/anzhiyu/random_friends_post.js new file mode 100644 index 0000000000..d717ec212e --- /dev/null +++ b/js/anzhiyu/random_friends_post.js @@ -0,0 +1,215 @@ +var fdata = { + apiurl: GLOBAL_CONFIG.friends_vue_info.apiurl, + defaultFish: 100, + hungryFish: 100, +}; +//可通过 var fdataUser 替换默认值 +if (typeof fdataUser !== "undefined") { + for (var key in fdataUser) { + if (fdataUser[key]) { + fdata[key] = fdataUser[key]; + } + } +} +var randomPostTimes = 0; +var randomPostWorking = false; +var randomPostTips = [ + "钓到了绝世好文!", + "在河边打了个喷嚏,吓跑了", + "你和小伙伴抢夺着", + "你击败了巨龙,在巢穴中发现了", + "挖掘秦始皇坟时找到了", + "在路边闲逛的时候随手买了一个", + "从学校班主任那拿来了孩子上课偷偷看的", + "你的同桌无情的从你的语文书中撕下了那篇你最喜欢的", + "考古学家近日发现了", + "外星人降临地球学习地球文化,落地时被你塞了", + "从图书馆顶层的隐秘角落里发现了闪着金光的", + "徒弟修炼走火入魔,为师立刻掏出了", + "在大山中唱山歌,隔壁的阿妹跑来了,带着", + "隔壁家的孩子数学考了满分,都是因为看了", + "隔壁家的孩子英语考了满分,都是因为看了", + "小米研发了全新一代MIX手机,据说灵感", + "修炼渡劫成功,还好提前看了", + "库克坐上了苹果CEO的宝座,因为他面试的时候看了", + "阿里巴巴大喊芝麻开门,映入眼帘的就是", + "师傅说练武要先炼心,然后让我好生研读", + "科考队在南极大陆发现了被冰封的", + "飞机窗户似乎被一张纸糊上了,仔细一看是", + "历史上满写的仁义道德四个字,透过字缝里却全是", + "十几年前的录音机似乎还能够使用,插上电发现正在播的是", + "新版语文书拟增加一篇熟读并背诵的", + "经调查,99%的受访者都没有背诵过", + "今年的高考满分作文是", + "唐僧揭开了佛祖压在五指山上的", + "科学家发现能够解决衰老的秘密,就是每日研读", + "英特尔发布了全新的至强处理器,其芯片的制造原理都是", + "新的iPhone产能很足,新的进货渠道是", + "今年亩产突破了八千万斤,多亏了", + "陆隐一统天上宗,在无数祖境高手的目光下宣读了", + "黑钻风跟白钻风说道,吃了唐僧肉能长生不老,他知道是因为看了", + "上卫生间没带纸,直接提裤跑路也不愿意玷污手中", + "种下一篇文章就会产生很多很多文章,我种下了", + "三十年河东,三十年河西,莫欺我没有看过", + "踏破铁血无觅处,得来全靠", + "今日双色球中了两千万,预测全靠", + "因为卷子上没写名字,老师罚抄", + "为了抗议世间的不公,割破手指写下了", + "在艺术大街上被贴满了相同的纸,走近一看是", + "这区区迷阵岂能难得住我?其实能走出来多亏了", + "今日被一篇文章顶上了微博热搜,它是", + "你送给乞丐一个暴富秘籍,它是", + "UZI一个走A拿下五杀,在事后采访时说他当时回想起了", + "科学家解刨了第一个感染丧尸病毒的人,发现丧尸抗体存在于", + "如果你有梦想的话,就要努力去看", + "决定我们成为什么样人的,不是我们的能力,而是是否看过", + "有信心不一定会成功,没信心就去看", + "你真正是谁并不重要,重要的是你看没看过", + "玄天境重要的是锻体,为师赠你此书,好好修炼去吧,这是", + "上百祖境高手在天威湖大战三天三夜为了抢夺", + "这化仙池水乃上古真仙对后人的考校,要求熟读并背诵", + "庆氏三千年根基差点竟被你小子毁于一旦,能够被我拯救全是因为我看了", + "我就是神奇宝贝大师!我这只皮卡丘可是", + "我就是神奇宝贝大师!我这只小火龙可是", + "我就是神奇宝贝大师!我这只可达鸭可是", + "我就是神奇宝贝大师!我这只杰尼龟可是", + "上古遗迹中写道,只要习得此书,便得成功。你定睛一看,原来是", + "奶奶的,玩阴的是吧,我就是双料特工代号穿山甲,", + "你的背景太假了,我的就逼真多了,学到这个技术全是因为看了", + "我是云南的,云南怒江的,怒江芦水市,芦水市六库,六库傈僳族,傈僳族是", + "我真的栓Q了,我真的会谢如果你看", + "你已经习得退退退神功,接下来的心法已经被记录在", + "人生无常大肠包小肠,小肠包住了", + "你抽到了普通文章,它是", + "你收到了稀有文章,它是", + "你抽到了金色普通文章,它是", + "你抽到了金色稀有文章,它是", + "你抽到了传说文章!它是", + "哇!金色传说!你抽到了金色传说文章,它是", + "报告!侦察兵说在前往300米有一个男子在偷偷看一本书,上面赫然写着", + "芷莲姑娘大摆擂台,谁若是能读完此书,便可娶了她。然后从背后掏出了", + "请问你的梦想是什么?我的梦想是能读到", + "读什么才能增智慧?当然是读", + "纳兰嫣然掏出了退婚书,可是发现出门带错了,结果拿出了一本", + "你要尽全力保护你的梦想。那些嘲笑你的人,他们必定会失败,他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去读", + "走人生的路就像爬山一样,看起来走了许多冤枉的路,崎岖的路,但终究需要读完", + "游戏的规则就是这么的简单,你听懂了吗?管你听没听懂,快去看", +]; +var randomPostClick = 0; +function fetchRandomPost() { + if (!document.getElementById("random-post")) return; + if (randomPostWorking == false) { + randomPostWorking = true; + //获取旋转角度 + let randomRotate = randomPostTimes * 360; + let randomPostTipsItem = randomPostTips[Math.floor(Math.random() * randomPostTips.length)]; + let randomPostLevel = ""; + if (randomPostTimes > 10000) { + randomPostLevel = "愿者上钩"; + } else if (randomPostTimes > 1000) { + randomPostLevel = "俯览天下"; + } else if (randomPostTimes > 1000) { + randomPostLevel = "超越神了"; + } else if (randomPostTimes > 100) { + randomPostLevel = "绝世渔夫"; + } else if (randomPostTimes > 75) { + randomPostLevel = "钓鱼王者"; + } else if (randomPostTimes > 50) { + randomPostLevel = "钓鱼宗师"; + } else if (randomPostTimes > 20) { + randomPostLevel = "钓鱼专家"; + } else if (randomPostTimes > 5) { + randomPostLevel = "钓鱼高手"; + } else { + randomPostLevel = "钓鱼新手"; + } + if (randomPostTimes >= 5) { + document.getElementById("random-post").innerHTML = + `钓鱼中... (Lv.` + randomPostTimes + ` 当前称号:` + randomPostLevel + `)`; + } else { + document.getElementById("random-post").innerHTML = `钓鱼中...`; + } + + let randomTime = randomNum(1000, 3000); + + if (randomPostTimes == 0) { + randomTime = 0; + } + + document.querySelector(".random-post-start").style.opacity = "0.2"; + document.querySelector(".random-post-start").style.transitionDuration = "0.3s"; + document.querySelector(".random-post-start").style.transform = "rotate(" + randomRotate + "deg)"; + + //判断是否饥饿 + if ( + document.getElementById("random-post") && + randomPostClick * fdata.hungryFish + fdata.defaultFish < randomPostTimes && + Math.round(Math.random()) == 0 + ) { + document.getElementById("random-post").innerHTML = + "因为只钓鱼不吃鱼,过分饥饿导致本次钓鱼失败...(点击任意一篇钓鱼获得的文章即可恢复)"; + randomPostWorking = false; + } else { + var fetchUrl = fdata.apiurl + "randompost"; + fetch(fetchUrl) + .then(res => res.json()) + .then(json => { + var title = json.title; + var link = json.link; + var author = json.author; + if (document.getElementById("random-post")) { + window.setTimeout(function () { + document.getElementById("random-post").innerHTML = + randomPostTipsItem + + `来自友链 ` + + author + + ` 的文章:` + + title + + ``; + randomPostTimes += 1; + localStorage.setItem("randomPostTimes", randomPostTimes); + document.querySelector(".random-post-start").style.opacity = "1"; + }, randomTime); + } + }); + randomPostWorking = false; + } + } +} + +//初始化检查 +function initRandomPost() { + // 获取已经存储的数据 + if (localStorage.randomPostTimes) { + randomPostTimes = parseInt(localStorage.randomPostTimes); + randomPostClick = parseInt(localStorage.randomPostClick); + document.querySelector(".random-post-start").style.transitionDuration = "0.3s"; + document.querySelector(".random-post-start").style.transform = "rotate(" + 360 * randomPostTimes + "deg)"; + } + fetchRandomPost(); +} + +initRandomPost(); + +//添加点击统计 +function randomClickLink() { + randomPostClick += 1; + localStorage.setItem("randomPostClick", randomPostClick); +} + +// 生成随机数 +function randomNum(minNum, maxNum) { + switch (arguments.length) { + case 1: + return parseInt(Math.random() * minNum + 1, 10); + break; + case 2: + return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10); + break; + default: + return 0; + break; + } +} diff --git a/js/anzhiyu/right_click_menu.js b/js/anzhiyu/right_click_menu.js new file mode 100644 index 0000000000..9cae0ffe72 --- /dev/null +++ b/js/anzhiyu/right_click_menu.js @@ -0,0 +1,479 @@ +// 初始化函数 +rm = {}; + +//禁止图片与超链接拖拽 +let aElements = document.getElementsByTagName("a"); +for (let i = 0; i < aElements.length; i++) { + aElements[i].setAttribute("draggable", "false"); + let imgElements = aElements[i].getElementsByTagName("img"); + for (let j = 0; j < imgElements.length; j++) { + imgElements[j].setAttribute("draggable", "false"); + } +} + +// 显示菜单 +rm.showRightMenu = function (isTrue, x = 0, y = 0) { + console.info(x, y); + let rightMenu = document.getElementById("rightMenu"); + rightMenu.style.top = x + "px"; + rightMenu.style.left = y + "px"; + if (isTrue) { + rightMenu.style.display = "block"; + stopMaskScroll(); + } else { + rightMenu.style.display = "none"; + } +}; + +// 隐藏菜单 +rm.hideRightMenu = function () { + rm.showRightMenu(false); + let rightMenuMask = document.querySelector("#rightmenu-mask"); + rightMenuMask.style.display = "none"; +}; + +// 尺寸 +let rmWidth = document.getElementById("rightMenu").offsetWidth; +let rmHeight = document.getElementById("rightMenu").offsetHeight; + +// 重新定义尺寸 +rm.reloadrmSize = function () { + rightMenu.style.visibility = "hidden"; + rightMenu.style.display = "block"; + // 获取宽度和高度 + rmWidth = document.getElementById("rightMenu").offsetWidth; + rmHeight = document.getElementById("rightMenu").offsetHeight; + rightMenu.style.visibility = "visible"; +}; + +// 获取点击的href +let domhref = ""; +let domImgSrc = ""; +let globalEvent = null; + +var oncontextmenuFunction = function (event) { + if (document.body.clientWidth > 768) { + let pageX = event.clientX + 10; //加10是为了防止显示时鼠标遮在菜单上 + let pageY = event.clientY; + + //其他额外菜单 + const $rightMenuOther = document.querySelector(".rightMenuOther"); + const $rightMenuPlugin = document.querySelector(".rightMenuPlugin"); + const $rightMenuCopyText = document.querySelector("#menu-copytext"); + const $rightMenuPasteText = document.querySelector("#menu-pastetext"); + const $rightMenuCommentText = document.querySelector("#menu-commenttext"); + const $rightMenuNewWindow = document.querySelector("#menu-newwindow"); + const $rightMenuNewWindowImg = document.querySelector("#menu-newwindowimg"); + const $rightMenuCopyLink = document.querySelector("#menu-copylink"); + const $rightMenuCopyImg = document.querySelector("#menu-copyimg"); + const $rightMenuDownloadImg = document.querySelector("#menu-downloadimg"); + const $rightMenuSearch = document.querySelector("#menu-search"); + const $rightMenuSearchBaidu = document.querySelector("#menu-searchBaidu"); + const $rightMenuMusicToggle = document.querySelector("#menu-music-toggle"); + const $rightMenuMusicBack = document.querySelector("#menu-music-back"); + const $rightMenuMusicForward = document.querySelector("#menu-music-forward"); + const $rightMenuMusicPlaylist = document.querySelector("#menu-music-playlist"); + const $rightMenuMusicCopyMusicName = document.querySelector("#menu-music-copyMusicName"); + + let href = event.target.href; + let imgsrc = event.target.currentSrc; + + // 判断模式 扩展模式为有事件 + let pluginMode = false; + $rightMenuOther.style.display = "block"; + globalEvent = event; + + // 检查是否需要复制 是否有选中文本 + if (selectTextNow && window.getSelection()) { + pluginMode = true; + $rightMenuCopyText.style.display = "block"; + $rightMenuCommentText.style.display = "block"; + $rightMenuSearch.style.display = "block"; + $rightMenuSearchBaidu.style.display = "block"; + } else { + $rightMenuCopyText.style.display = "none"; + $rightMenuCommentText.style.display = "none"; + $rightMenuSearchBaidu.style.display = "none"; + $rightMenuSearch.style.display = "none"; + } + + //检查是否右键点击了链接a标签 + if (href) { + pluginMode = true; + $rightMenuNewWindow.style.display = "block"; + $rightMenuCopyLink.style.display = "block"; + domhref = href; + } else { + $rightMenuNewWindow.style.display = "none"; + $rightMenuCopyLink.style.display = "none"; + } + + //检查是否需要复制图片 + if (imgsrc) { + pluginMode = true; + $rightMenuCopyImg.style.display = "block"; + $rightMenuDownloadImg.style.display = "block"; + $rightMenuNewWindowImg.style.display = "block"; + document.getElementById("rightMenu").style.width = "12rem"; + domImgSrc = imgsrc; + } else { + $rightMenuCopyImg.style.display = "none"; + $rightMenuDownloadImg.style.display = "none"; + $rightMenuNewWindowImg.style.display = "none"; + } + + // 判断是否为输入框 + if (event.target.tagName.toLowerCase() === "input" || event.target.tagName.toLowerCase() === "textarea") { + pluginMode = true; + $rightMenuPasteText.style.display = "block"; + } else { + $rightMenuPasteText.style.display = "none"; + } + const navMusicEl = document.querySelector("#nav-music"); + //判断是否是音乐 + if (navMusicEl && navMusicEl.contains(event.target)) { + pluginMode = true; + $rightMenuMusicToggle.style.display = "block"; + $rightMenuMusicBack.style.display = "block"; + $rightMenuMusicForward.style.display = "block"; + $rightMenuMusicPlaylist.style.display = "block"; + $rightMenuMusicCopyMusicName.style.display = "block"; + } else { + $rightMenuMusicToggle.style.display = "none"; + $rightMenuMusicBack.style.display = "none"; + $rightMenuMusicForward.style.display = "none"; + $rightMenuMusicPlaylist.style.display = "none"; + $rightMenuMusicCopyMusicName.style.display = "none"; + } + + // 如果不是扩展模式则隐藏扩展模块 + if (pluginMode) { + $rightMenuOther.style.display = "none"; + $rightMenuPlugin.style.display = "block"; + } else { + $rightMenuPlugin.style.display = "none"; + } + + rm.reloadrmSize(); + + // 鼠标默认显示在鼠标右下方,当鼠标靠右或靠下时,将菜单显示在鼠标左方\上方 + if (pageX + rmWidth > window.innerWidth) { + pageX -= rmWidth + 10; + } + if (pageY + rmHeight > window.innerHeight) { + pageY -= pageY + rmHeight - window.innerHeight; + } + + rm.showRightMenu(true, pageY, pageX); + document.getElementById("rightmenu-mask").style.display = "flex"; + return false; + } +}; + +// 监听右键初始化 +window.oncontextmenu = oncontextmenuFunction; + +// 下载图片状态 +rm.downloadimging = false; + +// 复制图片到剪贴板 +rm.writeClipImg = function (imgsrc) { + console.log("按下复制"); + rm.hideRightMenu(); + anzhiyu.snackbarShow("正在下载中,请稍后", false, 10000); + if (rm.downloadimging == false) { + rm.downloadimging = true; + setTimeout(function () { + copyImage(imgsrc); + anzhiyu.snackbarShow("复制成功!图片已添加盲水印,请遵守版权协议"); + rm.downloadimging = false; + }, "10000"); + } +}; + +function imageToBlob(imageURL) { + const img = new Image(); + const c = document.createElement("canvas"); + const ctx = c.getContext("2d"); + img.crossOrigin = ""; + img.src = imageURL; + return new Promise(resolve => { + img.onload = function () { + c.width = this.naturalWidth; + c.height = this.naturalHeight; + ctx.drawImage(this, 0, 0); + c.toBlob( + blob => { + // here the image is a blob + resolve(blob); + }, + "image/png", + 0.75 + ); + }; + }); +} + +async function copyImage(imageURL) { + const blob = await imageToBlob(imageURL); + const item = new ClipboardItem({ "image/png": blob }); + navigator.clipboard.write([item]); +} + +rm.copyUrl = function (id) { + const input = document.createElement("input"); // Create a new element + input.id = "copyVal"; // Set the id of the new element to "copyVal" + document.body.appendChild(input); // Append the new element to the end of the element + + const text = id; + input.value = text; + input.select(); + input.setSelectionRange(0, input.value.length); + document.execCommand("copy"); + + input.remove(); // Remove the element from the DOM +}; + +function stopMaskScroll() { + if (document.getElementById("rightmenu-mask")) { + let xscroll = document.getElementById("rightmenu-mask"); + xscroll.addEventListener( + "mousewheel", + function (e) { + //阻止浏览器默认方法 + rm.hideRightMenu(); + // e.preventDefault(); + }, + { passive: true } + ); + } + if (document.getElementById("rightMenu")) { + let xscroll = document.getElementById("rightMenu"); + xscroll.addEventListener( + "mousewheel", + function (e) { + //阻止浏览器默认方法 + rm.hideRightMenu(); + // e.preventDefault(); + }, + { passive: true } + ); + } +} + +rm.rightmenuCopyText = function (txt) { + if (navigator.clipboard) { + navigator.clipboard.writeText(txt); + } + rm.hideRightMenu(); +}; + +rm.copyPageUrl = function (url) { + if (!url) { + url = window.location.href; + } + rm.copyUrl(url); + anzhiyu.snackbarShow("复制链接地址成功", false, 2000); + rm.hideRightMenu(); +}; + +// 复制当前选中文本 +var selectTextNow = ""; +document.onmouseup = document.ondblclick = selceText; + +function selceText() { + var txt; + if (document.selection) { + txt = document.selection.createRange().text; + } else { + txt = window.getSelection().toString(); + } + selectTextNow = txt !== "" ? txt : ""; +} + +// 读取剪切板 +rm.readClipboard = function () { + if (navigator.clipboard) { + navigator.clipboard.readText().then(clipText => rm.insertAtCaret(globalEvent.target, clipText)); + } +}; + +// 粘贴文本到焦点 +rm.insertAtCaret = function (elemt, value) { + const startPos = elemt.selectionStart, + endPos = elemt.selectionEnd; + if (document.selection) { + elemt.focus(); + var sel = document.selection.createRange(); + sel.text = value; + elemt.focus(); + } else { + if (startPos || startPos == "0") { + var scrollTop = elemt.scrollTop; + elemt.value = elemt.value.substring(0, startPos) + value + elemt.value.substring(endPos, elemt.value.length); + elemt.focus(); + elemt.selectionStart = startPos + value.length; + elemt.selectionEnd = startPos + value.length; + elemt.scrollTop = scrollTop; + } else { + elemt.value += value; + elemt.focus(); + } + } +}; + +//粘贴文本 +rm.pasteText = function () { + const result = rm.readClipboard() || ""; + rm.hideRightMenu(); +}; + +//引用到评论 +rm.rightMenuCommentText = function (txt) { + rm.hideRightMenu(); + const postCommentDom = document.getElementById("post-comment"); + var domTop = postCommentDom.offsetTop; + window.scrollTo(0, domTop - 80); + if (txt == "undefined" || txt == "null") txt = "好棒!"; + function setText() { + setTimeout(() => { + var input = document.getElementsByClassName("el-textarea__inner")[0]; + if (!input) setText(); + let evt = document.createEvent("HTMLEvents"); + evt.initEvent("input", true, true); + let inputValue = replaceAll(txt, "\n", "\n> "); + input.value = "> " + inputValue + "\n\n"; + input.dispatchEvent(evt); + input.focus(); + input.setSelectionRange(-1, -1); + if (document.getElementById("comment-tips")) { + document.getElementById("comment-tips").classList.add("show"); + } + }, 100); + } + setText(); +}; + +//替换所有内容 +function replaceAll(string, search, replace) { + return string.split(search).join(replace); +} + +// 百度搜索 +rm.searchBaidu = function () { + anzhiyu.snackbarShow("即将跳转到百度搜索", false, 2000); + setTimeout(function () { + window.open("https://www.baidu.com/s?wd=" + selectTextNow); + }, "2000"); + rm.hideRightMenu(); +}; + +//分享链接 +rm.copyLink = function () { + rm.rightmenuCopyText(domhref); + anzhiyu.snackbarShow("已复制链接地址"); +}; + +function addRightMenuClickEvent() { + // 添加点击事件 + document.getElementById("menu-backward").addEventListener("click", function () { + window.history.back(); + rm.hideRightMenu(); + }); + + document.getElementById("menu-forward").addEventListener("click", function () { + window.history.forward(); + rm.hideRightMenu(); + }); + + document.getElementById("menu-refresh").addEventListener("click", function () { + window.location.reload(); + }); + + document.getElementById("menu-top").addEventListener("click", function () { + anzhiyu.scrollToDest(0, 500); + rm.hideRightMenu(); + }); + + document.getElementById("menu-translate").addEventListener("click", function () { + window.translateFn.translatePage(); + rm.hideRightMenu(); + }); + + const menuLinks = document.querySelectorAll(".menu-link"); + menuLinks.forEach(function (link) { + link.addEventListener("click", rm.hideRightMenu); + }); + + document.getElementById("menu-home") && + document.getElementById("menu-home").addEventListener("click", function () { + window.location.href = window.location.origin; + }); + + document.getElementById("menu-randomPost").addEventListener("click", function () { + toRandomPost(); + }); + + document.getElementById("menu-commentBarrage").addEventListener("click", anzhiyu.switchCommentBarrage); + + document.getElementById("rightmenu-mask").addEventListener("click", rm.hideRightMenu); + + document.getElementById("rightmenu-mask").addEventListener("contextmenu", function (event) { + rm.hideRightMenu(); + event.preventDefault(); // Prevent the default context menu from appearing + }); + + document.getElementById("menu-copy").addEventListener("click", () => { + rm.copyPageUrl(); + }); + + document.getElementById("menu-pastetext").addEventListener("click", rm.pasteText); + + document.getElementById("menu-copytext").addEventListener("click", function () { + rm.rightmenuCopyText(selectTextNow); + const copyright = GLOBAL_CONFIG.copyright; + if (copyright.copy) { + anzhiyu.snackbarShow(copyright.languages.copySuccess); + } + }); + + document.getElementById("menu-commenttext").addEventListener("click", function () { + rm.rightMenuCommentText(selectTextNow); + }); + + document.getElementById("menu-newwindow").addEventListener("click", function () { + window.open(domhref, "_blank"); + rm.hideRightMenu(); + }); + + document.getElementById("menu-copylink").addEventListener("click", rm.copyLink); + + document.getElementById("menu-downloadimg").addEventListener("click", function () { + anzhiyu.downloadImage(domImgSrc, "anzhiyu"); + }); + + document.getElementById("menu-newwindowimg").addEventListener("click", function () { + window.open(domImgSrc, "_blank"); + rm.hideRightMenu(); + }); + + document.getElementById("menu-copyimg").addEventListener("click", function () { + rm.writeClipImg(domImgSrc); + }); + + document.getElementById("menu-searchBaidu").addEventListener("click", rm.searchBaidu); + + //音乐 + document.getElementById("menu-music-toggle").addEventListener("click", anzhiyu.musicToggle); + + document.getElementById("menu-music-back").addEventListener("click", anzhiyu.musicSkipBack); + + document.getElementById("menu-music-forward").addEventListener("click", anzhiyu.musicSkipForward); + + document.getElementById("menu-music-copyMusicName").addEventListener("click", function () { + rm.rightmenuCopyText(anzhiyu.musicGetName()); + anzhiyu.snackbarShow("复制歌曲名称成功", false, 3000); + }); +} + +addRightMenuClickEvent(); diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000000..fd10511344 --- /dev/null +++ b/js/main.js @@ -0,0 +1,1813 @@ +// 第一次播放音乐 +var anzhiyu_musicFirst = false; +// 快捷键 +var anzhiyu_keyboard = null; +// 音乐播放状态 +var anzhiyu_musicPlaying = false; +var $bodyWrap = document.getElementById("body-wrap"); +var anzhiyu_intype = false; +var anzhiyu_keyUpEvent_timeoutId = null; +var anzhiyu_keyUpShiftDelayEvent_timeoutId = null; + +// 右键菜单对象 +var rm = null; + +var popupWindowTimer = null; + +var adjectives = [ + "美丽的", + "英俊的", + "聪明的", + "勇敢的", + "可爱的", + "慷慨的", + "善良的", + "可靠的", + "开朗的", + "成熟的", + "稳重的", + "真诚的", + "幽默的", + "豁达的", + "有趣的", + "活泼的", + "优雅的", + "敏捷的", + "温柔的", + "温暖的", + "敬业的", + "细心的", + "耐心的", + "深沉的", + "朴素的", + "含蓄的", + "率直的", + "开放的", + "务实的", + "坚强的", + "自信的", + "谦虚的", + "文静的", + "深刻的", + "纯真的", + "朝气蓬勃的", + "慎重的", + "大方的", + "顽强的", + "迷人的", + "机智的", + "善解人意的", + "富有想象力的", + "有魅力的", + "独立的", + "好奇的", + "干净的", + "宽容的", + "尊重他人的", + "体贴的", + "守信的", + "有耐性的", + "有责任心的", + "有担当的", + "有远见的", + "有智慧的", + "有眼光的", + "有冒险精神的", + "有爱心的", + "有同情心的", + "喜欢思考的", + "喜欢学习的", + "具有批判性思维的", + "善于表达的", + "善于沟通的", + "善于合作的", + "善于领导的", + "有激情的", + "有幽默感的", + "有思想的", + "有个性的", + "有正义感的", + "有责任感的", + "有创造力的", + "有想象力的", + "有艺术细胞的", + "有团队精神的", + "有协调能力的", + "有决策能力的", + "有组织能力的", + "有学习能力的", + "有执行能力的", + "有分析能力的", + "有逻辑思维的", + "有创新能力的", + "有专业素养的", + "有商业头脑的", +]; +var vegetablesAndFruits = [ + "萝卜", + "白菜", + "芹菜", + "生菜", + "青椒", + "辣椒", + "茄子", + "豆角", + "黄瓜", + "西红柿", + "洋葱", + "大蒜", + "土豆", + "南瓜", + "豆腐", + "韭菜", + "花菜", + "西兰花", + "蘑菇", + "金针菇", + "苹果", + "香蕉", + "橙子", + "柠檬", + "猕猴桃", + "草莓", + "葡萄", + "桃子", + "杏子", + "李子", + "石榴", + "西瓜", + "哈密瓜", + "蜜瓜", + "樱桃", + "蓝莓", + "柿子", + "橄榄", + "柚子", + "火龙果", +]; + +// 已随机的歌曲 +var selectRandomSong = []; +// 音乐默认声音大小 +var musicVolume = 0.8; +// 是否切换了周杰伦音乐列表 +var changeMusicListFlag = false; +// 当前默认播放列表 +var defaultPlayMusicList = []; +var themeColorMeta, pageHeaderEl, navMusicEl, consoleEl; + +document.addEventListener("DOMContentLoaded", function () { + let headerContentWidth, $nav, $rightMenu; + let mobileSidebarOpen = false; + + const adjustMenu = init => { + const getAllWidth = ele => { + return Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0); + }; + + if (init) { + const blogInfoWidth = getAllWidth(document.querySelector("#blog_name > a").children); + const menusWidth = getAllWidth(document.getElementById("menus").children); + headerContentWidth = blogInfoWidth + menusWidth; + $nav = document.getElementById("nav"); + } + + const hideMenuIndex = window.innerWidth <= 768 || headerContentWidth > $nav.offsetWidth - 120; + $nav.classList.toggle("hide-menu", hideMenuIndex); + }; + + // 初始化header + const initAdjust = () => { + adjustMenu(true); + $nav.classList.add("show"); + }; + + // sidebar menus + const sidebarFn = { + open: () => { + anzhiyu.sidebarPaddingR(); + anzhiyu.animateIn(document.getElementById("menu-mask"), "to_show 0.5s"); + document.getElementById("sidebar-menus").classList.add("open"); + mobileSidebarOpen = true; + }, + close: () => { + const $body = document.body; + $body.style.paddingRight = ""; + anzhiyu.animateOut(document.getElementById("menu-mask"), "to_hide 0.5s"); + document.getElementById("sidebar-menus").classList.remove("open"); + mobileSidebarOpen = false; + }, + }; + + /** + * 首頁top_img底下的箭頭 + */ + const scrollDownInIndex = () => { + const handleScrollToDest = () => { + const bbTimeList = document.getElementById("bbTimeList"); + if (bbTimeList) { + anzhiyu.scrollToDest(bbTimeList.offsetTop - 62, 300); + } else { + anzhiyu.scrollToDest(document.getElementById("home_top").offsetTop - 60, 300); + } + }; + + const $scrollDownEle = document.getElementById("scroll-down"); + $scrollDownEle && anzhiyu.addEventListenerPjax($scrollDownEle, "click", handleScrollToDest); + }; + + /** + * 代码 + * 只适用于Hexo默认的代码渲染 + */ + const addHighlightTool = function () { + const highLight = GLOBAL_CONFIG.highlight; + if (!highLight) return; + + const { highlightCopy, highlightLang, highlightHeightLimit, plugin } = highLight; + const isHighlightShrink = GLOBAL_CONFIG_SITE.isHighlightShrink; + const isShowTool = highlightCopy || highlightLang || isHighlightShrink !== undefined; + const $figureHighlight = + plugin === "highlight.js" + ? document.querySelectorAll("figure.highlight") + : document.querySelectorAll('pre[class*="language-"]'); + + if (!((isShowTool || highlightHeightLimit) && $figureHighlight.length)) return; + + const isPrismjs = plugin === "prismjs"; + const highlightShrinkClass = isHighlightShrink === true ? "closed" : ""; + const highlightShrinkEle = + isHighlightShrink !== undefined + ? '' + : ""; + const highlightCopyEle = highlightCopy + ? '
    ' + : ""; + + const alertInfo = (ele, text) => { + if (GLOBAL_CONFIG.Snackbar !== undefined) { + anzhiyu.snackbarShow(text); + } else { + const prevEle = ele.previousElementSibling; + prevEle.textContent = text; + prevEle.style.opacity = 1; + setTimeout(() => { + prevEle.style.opacity = 0; + }, 800); + } + }; + + const copy = ctx => { + if (document.queryCommandSupported && document.queryCommandSupported("copy")) { + document.execCommand("copy"); + alertInfo(ctx, GLOBAL_CONFIG.copy.success); + } else { + alertInfo(ctx, GLOBAL_CONFIG.copy.noSupport); + } + }; + + // click events + const highlightCopyFn = ele => { + const $buttonParent = ele.parentNode; + $buttonParent.classList.add("copy-true"); + const selection = window.getSelection(); + const range = document.createRange(); + const preCodeSelector = isPrismjs ? "pre code" : "table .code pre"; + range.selectNodeContents($buttonParent.querySelectorAll(`${preCodeSelector}`)[0]); + selection.removeAllRanges(); + selection.addRange(range); + copy(ele.lastChild); + selection.removeAllRanges(); + $buttonParent.classList.remove("copy-true"); + }; + + const highlightShrinkFn = ele => { + ele.classList.toggle("closed"); + }; + + const highlightToolsFn = function (e) { + const $target = e.target.classList; + if ($target.contains("expand")) highlightShrinkFn(this); + else if ($target.contains("copy-button")) highlightCopyFn(this); + }; + + const expandCode = function () { + this.classList.toggle("expand-done"); + }; + + const createEle = (lang, item, service) => { + const fragment = document.createDocumentFragment(); + + if (isShowTool) { + const hlTools = document.createElement("div"); + hlTools.className = `highlight-tools ${highlightShrinkClass}`; + hlTools.innerHTML = highlightShrinkEle + lang + highlightCopyEle; + anzhiyu.addEventListenerPjax(hlTools, "click", highlightToolsFn); + fragment.appendChild(hlTools); + } + + if (highlightHeightLimit && item.offsetHeight > highlightHeightLimit + 30) { + const ele = document.createElement("div"); + ele.className = "code-expand-btn"; + ele.innerHTML = ''; + anzhiyu.addEventListenerPjax(ele, "click", expandCode); + fragment.appendChild(ele); + } + + if (service === "hl") { + item.insertBefore(fragment, item.firstChild); + } else { + item.parentNode.insertBefore(fragment, item); + } + }; + + if (isPrismjs) { + $figureHighlight.forEach(item => { + if (highlightLang) { + const langName = item.getAttribute("data-language") || "Code"; + const highlightLangEle = `
    ${langName}
    `; + anzhiyu.wrap(item, "figure", { class: "highlight" }); + createEle(highlightLangEle, item); + } else { + anzhiyu.wrap(item, "figure", { class: "highlight" }); + createEle("", item); + } + }); + } else { + $figureHighlight.forEach(item => { + if (highlightLang) { + let langName = item.getAttribute("class").split(" ")[1]; + if (langName === "plain" || langName === undefined) langName = "Code"; + const highlightLangEle = `
    ${langName}
    `; + createEle(highlightLangEle, item, "hl"); + } else { + createEle("", item, "hl"); + } + }); + } + }; + + /** + * PhotoFigcaption + */ + function addPhotoFigcaption() { + document.querySelectorAll("#article-container img").forEach(function (item) { + const parentEle = item.parentNode; + const altValue = item.title || item.alt; + if (altValue && !parentEle.parentNode.classList.contains("justified-gallery")) { + const ele = document.createElement("div"); + ele.className = "img-alt is-center"; + ele.textContent = altValue; + parentEle.insertBefore(ele, item.nextSibling); + } + }); + } + + /** + * Lightbox + */ + const runLightbox = () => { + anzhiyu.loadLightbox(document.querySelectorAll("#article-container img:not(.no-lightbox)")); + }; + + /** + * justified-gallery 圖庫排版 + */ + const runJustifiedGallery = function (ele) { + const htmlStr = arr => { + let str = ""; + const replaceDq = str => str.replace(/"/g, """); // replace double quotes to " + arr.forEach(i => { + const alt = i.alt ? `alt="${replaceDq(i.alt)}"` : ""; + const title = i.title ? `title="${replaceDq(i.title)}"` : ""; + const address = i.address ? i.address : ""; + const galleryItem = ` + + `; + str += galleryItem; + }); + + return str; + }; + + const lazyloadFn = (i, arr, limit) => { + const loadItem = Number(limit); + const arrLength = arr.length; + if (arrLength > loadItem) i.insertAdjacentHTML("beforeend", htmlStr(arr.splice(0, loadItem))); + else { + i.insertAdjacentHTML("beforeend", htmlStr(arr)); + i.classList.remove("lazyload"); + } + window.lazyLoadInstance && window.lazyLoadInstance.update(); + return arrLength > loadItem ? loadItem : arrLength; + }; + + const fetchUrl = async url => { + const response = await fetch(url); + return await response.json(); + }; + + const runJustifiedGallery = (item, arr) => { + const limit = item.getAttribute("data-limit") ?? arr.length; + if (!item.classList.contains("lazyload") || arr.length < limit) { + // 不懒加载 + item.innerHTML = htmlStr(arr); + item.nextElementSibling.style.display = "none"; + } else { + if (!item.classList.contains("btn_album_detail_lazyload") || item.classList.contains("page_img_lazyload")) { + // 滚动懒加载 + lazyloadFn(item, arr, limit); + const clickBtnFn = () => { + const lastItemLength = lazyloadFn(item, arr, limit); + fjGallery( + item, + "appendImages", + item.querySelectorAll(`.fj-gallery-item:nth-last-child(-n+${lastItemLength})`) + ); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + if (lastItemLength < Number(limit)) { + observer.unobserve(item.nextElementSibling); + } + }; + + // 创建IntersectionObserver实例 + const observer = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + // 如果元素进入视口 + if (entry.isIntersecting) { + // 执行clickBtnFn函数 + setTimeout(clickBtnFn(), 100); + } + }); + }); + observer.observe(item.nextElementSibling); + } else { + // 相册详情 按钮懒加载 + lazyloadFn(item, arr, limit); + const clickBtnFn = () => { + const lastItemLength = lazyloadFn(item, arr, limit); + fjGallery( + item, + "appendImages", + item.querySelectorAll(`.fj-gallery-item:nth-last-child(-n+${lastItemLength})`) + ); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + lastItemLength < limit && item.nextElementSibling.removeEventListener("click", clickBtnFn); + }; + item.nextElementSibling.addEventListener("click", clickBtnFn); + } + } + + anzhiyu.initJustifiedGallery(item); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + window.lazyLoadInstance && window.lazyLoadInstance.update(); + }; + + const addJustifiedGallery = () => { + ele.forEach(item => { + item.classList.contains("url") + ? fetchUrl(item.textContent).then(res => { + runJustifiedGallery(item, res); + }) + : runJustifiedGallery(item, JSON.parse(item.textContent)); + }); + }; + + if (window.fjGallery) { + addJustifiedGallery(); + return; + } + + getCSS(`${GLOBAL_CONFIG.source.justifiedGallery.css}`); + getScript(`${GLOBAL_CONFIG.source.justifiedGallery.js}`).then(addJustifiedGallery); + }; + + /** + * 滚动处理 + */ + const scrollFn = function () { + const $rightside = document.getElementById("rightside"); + const innerHeight = window.innerHeight + 56; + let lastScrollTop = 0; + + if (document.body.scrollHeight <= innerHeight) { + $rightside.style.cssText = "opacity: 1; transform: translateX(-58px)"; + } + + // find the scroll direction + function scrollDirection(currentTop) { + const result = currentTop > initTop; // true is down & false is up + initTop = currentTop; + return result; + } + + let initTop = 0; + let isChatShow = true; + const $header = document.getElementById("page-header"); + const $popupWindow = document.getElementById("popup-window"); + const isChatBtnHide = typeof chatBtnHide === "function"; + const isChatBtnShow = typeof chatBtnShow === "function"; + + // 第一次滑动到底部的标识符 + let scrollBottomFirstFlag = false; + // 缓存常用dom元素 + const musicDom = document.getElementById("nav-music"), + footerDom = document.getElementById("footer"), + waterfallDom = document.getElementById("waterfall"), + $percentBtn = document.getElementById("percent"), + $navTotop = document.getElementById("nav-totop"), + $bodyWrap = document.getElementById("body-wrap"); + // 页面底部Dom是否存在 + let pageBottomDomFlag = document.getElementById("post-comment") || document.getElementById("footer"); + + function percentageScrollFn(currentTop) { + // 处理滚动百分比 + let docHeight = $bodyWrap.clientHeight; + const winHeight = document.documentElement.clientHeight; + const contentMath = + docHeight > winHeight ? docHeight - winHeight : document.documentElement.scrollHeight - winHeight; + const scrollPercent = currentTop / contentMath; + const scrollPercentRounded = Math.round(scrollPercent * 100); + const percentage = scrollPercentRounded > 100 ? 100 : scrollPercentRounded <= 0 ? 1 : scrollPercentRounded; + $percentBtn.textContent = percentage; + + function isInViewPortOfOneNoDis(el) { + if (!el) return; + const elDisplay = window.getComputedStyle(el).getPropertyValue("display"); + if (elDisplay == "none") { + return; + } + const viewPortHeight = + window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + const offsetTop = el.offsetTop; + const scrollTop = document.documentElement.scrollTop; + const top = offsetTop - scrollTop; + return top <= viewPortHeight; + } + + if (isInViewPortOfOneNoDis(pageBottomDomFlag || percentage > 90) && currentTop > 20) { + $navTotop.classList.add("long"); + $percentBtn.textContent = "返回顶部"; + } else { + $navTotop.classList.remove("long"); + $percentBtn.textContent = percentage; + } + + // 如果当前页面需要瀑布流,就处理瀑布流 + if (waterfallDom) { + const waterfallResult = currentTop % document.documentElement.clientHeight; // 卷去一个视口 + if (!scrollBottomFirstFlag && waterfallResult + 100 >= document.documentElement.clientHeight) { + console.info(waterfallResult, document.documentElement.clientHeight); + setTimeout(() => { + waterfall("#waterfall"); + }, 500); + } else { + setTimeout(() => { + waterfallDom && waterfall("#waterfall"); + }, 500); + } + } + } + + const scrollTask = anzhiyu.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop; + const isDown = scrollDirection(currentTop); + + const delta = Math.abs(lastScrollTop - currentTop); + if (currentTop > 60 && delta < 20 && delta != 0) { + // ignore small scrolls + return; + } + if ( + $popupWindow && + $popupWindow.classList.contains("show-popup-window") && + currentTop > 60 && + delta > 20 && + lastScrollTop != 0 + ) { + // 滚动后延迟1s关闭弹窗 + anzhiyu.throttle(() => { + if (popupWindowTimer) clearTimeout(popupWindowTimer); + popupWindowTimer = setTimeout(() => { + if (!$popupWindow.classList.contains("popup-hide")) { + $popupWindow.classList.add("popup-hide"); + } + setTimeout(() => { + $popupWindow.classList.remove("popup-hide"); + $popupWindow.classList.remove("show-popup-window"); + }, 1000); + }, 1000); + }, 1000)(); + } + lastScrollTop = currentTop; + + if (currentTop > 26) { + if (isDown) { + if ($header.classList.contains("nav-visible")) $header.classList.remove("nav-visible"); + if (isChatBtnShow && isChatShow === true) { + chatBtnHide(); + isChatShow = false; + } + } else { + if (!$header.classList.contains("nav-visible")) $header.classList.add("nav-visible"); + if (isChatBtnHide && isChatShow === false) { + chatBtnShow(); + isChatShow = true; + } + } + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + $header.classList.add("nav-fixed"); + }); + if (window.getComputedStyle($rightside).getPropertyValue("opacity") === "0") { + $rightside.style.cssText = "opacity: 0.8; transform: translateX(-58px)"; + } + } else { + if (currentTop <= 5) { + requestAnimationFrame(() => { + $header.classList.remove("nav-fixed"); + $header.classList.remove("nav-visible"); + // 修改顶栏颜色 + anzhiyu.initThemeColor(); + }); + } + $rightside.style.cssText = "opacity: ''; transform: ''"; + } + + if (document.body.scrollHeight <= innerHeight) { + $rightside.style.cssText = "opacity: 0.8; transform: translateX(-58px)"; + } + + percentageScrollFn(currentTop); + }, 96); + + // 进入footer隐藏音乐 + if (footerDom) { + anzhiyu + .intersectionObserver( + () => { + if (footerDom && musicDom && 768 < document.body.clientWidth) { + musicDom.style.bottom = "-10px"; + musicDom.style.opacity = "0"; + } + scrollBottomFirstFlag = true; + }, + () => { + if (footerDom && musicDom && 768 < document.body.clientWidth) { + musicDom.style.bottom = "20px"; + musicDom.style.opacity = "1"; + } + } + )() + .observe(footerDom); + } + + scrollTask(); + anzhiyu.addEventListenerPjax(window, "scroll", scrollTask, { passive: true }); + }; + + /** + * toc,anchor + */ + const scrollFnToDo = function () { + const isToc = GLOBAL_CONFIG_SITE.isToc; + const isAnchor = GLOBAL_CONFIG.isAnchor; + const $article = document.getElementById("article-container"); + + if (!($article && (isToc || isAnchor))) return; + + let $tocLink, $cardToc, autoScrollToc, isExpand; + if (isToc) { + const $cardTocLayout = document.getElementById("card-toc"); + $cardToc = $cardTocLayout.querySelector(".toc-content"); + $tocLink = $cardToc.querySelectorAll(".toc-link"); + isExpand = $cardToc.classList.contains("is-expand"); + + // toc元素點擊 + const tocItemClickFn = e => { + const target = e.target.closest(".toc-link"); + if (!target) return; + + e.preventDefault(); + anzhiyu.scrollToDest( + anzhiyu.getEleTop(document.getElementById(decodeURI(target.getAttribute("href")).replace("#", ""))) - 60, + 300 + ); + if (window.innerWidth < 900) { + $cardTocLayout.classList.remove("open"); + } + }; + + anzhiyu.addEventListenerPjax($cardToc, "click", tocItemClickFn); + + autoScrollToc = item => { + const activePosition = item.getBoundingClientRect().top; + const sidebarScrollTop = $cardToc.scrollTop; + if (activePosition > document.documentElement.clientHeight - 100) { + $cardToc.scrollTop = sidebarScrollTop + 150; + } + if (activePosition < 100) { + $cardToc.scrollTop = sidebarScrollTop - 150; + } + }; + } + + // find head position & add active class + const list = $article.querySelectorAll("h1,h2,h3,h4,h5,h6"); + const filteredHeadings = Array.from(list).filter(heading => heading.id !== "CrawlerTitle"); + let detectItem = ""; + const findHeadPosition = function (top) { + if (top === 0) { + return false; + } + + let currentId = ""; + let currentIndex = ""; + + filteredHeadings.forEach(function (ele, index) { + if (top > anzhiyu.getEleTop(ele) - 80) { + const id = ele.id; + currentId = id ? "#" + encodeURI(id) : ""; + currentIndex = index; + } + }); + if (detectItem === currentIndex) return; + if (isAnchor) anzhiyu.updateAnchor(currentId); + detectItem = currentIndex; + if (isToc) { + $cardToc.querySelectorAll(".active").forEach(i => { + i.classList.remove("active"); + }); + + if (currentId === "") { + return; + } + const currentActive = $tocLink[currentIndex]; + currentActive.classList.add("active"); + + setTimeout(() => { + autoScrollToc(currentActive); + }, 0); + + if (isExpand) return; + let parent = currentActive.parentNode; + + for (; !parent.matches(".toc"); parent = parent.parentNode) { + if (parent.matches("li")) parent.classList.add("active"); + } + } + }; + + // main of scroll + const tocScrollFn = anzhiyu.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop; + findHeadPosition(currentTop); + }, 100); + + anzhiyu.addEventListenerPjax(window, "scroll", tocScrollFn, { passive: true }); + }; + + const handleThemeChange = mode => { + const globalFn = window.globalFn || {}; + const themeChange = globalFn.themeChange || {}; + if (!themeChange) { + return; + } + + Object.keys(themeChange).forEach(key => { + const themeChangeFn = themeChange[key]; + themeChangeFn(mode); + }); + + rm && rm.hideRightMenu(); + + const menuDarkmodeText = $rightMenu.querySelector(".menu-darkmode-text"); + if (mode === "light") { + menuDarkmodeText.textContent = "深色模式"; + } else { + menuDarkmodeText.textContent = "浅色模式"; + } + + if (!GLOBAL_CONFIG_SITE.isPost) { + const root = document.querySelector(":root"); + root.style.setProperty("--anzhiyu-bar-background", "var(--anzhiyu-meta-theme-color)"); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + // 要改回来默认主色; + document.documentElement.style.setProperty( + "--anzhiyu-main", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-theme") + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + }; + + /** + * Rightside + */ + const rightSideFn = { + readmode: () => { + // read mode + const $body = document.body; + $body.classList.add("read-mode"); + const newEle = document.createElement("button"); + newEle.type = "button"; + newEle.className = "anzhiyufont anzhiyu-icon-xmark exit-readmode"; + $body.appendChild(newEle); + + const clickFn = () => { + $body.classList.remove("read-mode"); + newEle.remove(); + newEle.removeEventListener("click", clickFn); + }; + + newEle.addEventListener("click", clickFn); + }, + darkmode: () => { + // switch between light and dark mode + const willChangeMode = document.documentElement.getAttribute("data-theme") === "dark" ? "light" : "dark"; + if (willChangeMode === "dark") { + activateDarkMode(); + GLOBAL_CONFIG.Snackbar !== undefined && anzhiyu.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night); + } else { + activateLightMode(); + GLOBAL_CONFIG.Snackbar !== undefined && anzhiyu.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day); + } + saveToLocal.set("theme", willChangeMode, 2); + handleThemeChange(willChangeMode); + }, + "rightside-config": item => { + // Show or hide rightside-hide-btn + const hideLayout = item.firstElementChild; + if (hideLayout.classList.contains("show")) { + hideLayout.classList.add("status"); + setTimeout(() => { + hideLayout.classList.remove("status"); + }, 300); + } + + hideLayout.classList.toggle("show"); + }, + "go-up": () => { + // Back to top + anzhiyu.scrollToDest(0, 500); + }, + "hide-aside-btn": () => { + // Hide aside + const $htmlDom = document.documentElement.classList; + const saveStatus = $htmlDom.contains("hide-aside") ? "show" : "hide"; + saveToLocal.set("aside-status", saveStatus, 2); + $htmlDom.toggle("hide-aside"); + }, + "mobile-toc-button": item => { + // Show mobile toc + const tocEle = document.getElementById("card-toc"); + tocEle.style.transformOrigin = `right ${item.getBoundingClientRect().top + 17}px`; + tocEle.style.transition = "transform 0.3s ease-in-out"; + tocEle.classList.toggle("open"); + tocEle.addEventListener( + "transitionend", + () => { + tocEle.style.transition = ""; + tocEle.style.transformOrigin = ""; + }, + { once: true } + ); + }, + "chat-btn": () => { + // Show chat + window.chatBtnFn(); + }, + translateLink: () => { + // switch between traditional and simplified chinese + window.translateFn.translatePage(); + }, + }; + + document.getElementById("rightside").addEventListener("click", function (e) { + const $target = e.target.closest("[id]"); + if ($target && rightSideFn[$target.id]) { + rightSideFn[$target.id](this); + } + }); + + //监听蒙版关闭 + document.addEventListener( + "touchstart", + e => { + anzhiyu.removeRewardMask(); + }, + { passive: true } + ); + + /** + * menu + * 側邊欄sub-menu 展開/收縮 + */ + const clickFnOfSubMenu = () => { + const handleClickOfSubMenu = e => { + const target = e.target.closest(".site-page.group"); + if (!target) return; + target.classList.toggle("hide"); + }; + + document.querySelector("#sidebar-menus .menus_items") && + document.querySelector("#sidebar-menus .menus_items").addEventListener("click", handleClickOfSubMenu); + }; + + /** + * 手机端目录点击 + */ + const openMobileMenu = () => { + const handleClick = () => { + sidebarFn.open(); + }; + anzhiyu.addEventListenerPjax(document.getElementById("toggle-menu"), "click", handleClick); + }; + + /** + * 複製時加上版權信息 + */ + const addCopyright = () => { + const { limitCount, languages, copy, copyrightEbable } = GLOBAL_CONFIG.copyright; + + const handleCopy = e => { + if (copy) { + anzhiyu.snackbarShow(languages.copySuccess); + } + if (copyrightEbable) { + e.preventDefault(); + const copyFont = window.getSelection(0).toString(); + let textFont = copyFont; + if (copyFont.length > limitCount) { + textFont = `${copyFont}\n\n\n${languages.author}\n${languages.link}${window.location.href}\n${languages.source}\n${languages.info}`; + } + if (e.clipboardData) { + return e.clipboardData.setData("text", textFont); + } else { + return window.clipboardData.setData("text", textFont); + } + } + }; + + document.body.addEventListener("copy", handleCopy); + }; + + /** + * 網頁運行時間 + */ + const addRuntime = () => { + const $runtimeCount = document.getElementById("runtimeshow"); + if ($runtimeCount) { + const publishDate = $runtimeCount.getAttribute("data-publishDate"); + $runtimeCount.textContent = `${anzhiyu.diffDate(publishDate)} ${GLOBAL_CONFIG.runtime}`; + } + }; + + /** + * 最後一次更新時間 + */ + const addLastPushDate = () => { + const $lastPushDateItem = document.getElementById("last-push-date"); + if ($lastPushDateItem) { + const lastPushDate = $lastPushDateItem.getAttribute("data-lastPushDate"); + $lastPushDateItem.textContent = anzhiyu.diffDate(lastPushDate, true); + } + }; + + /** + * table overflow + */ + const addTableWrap = () => { + const $table = document.querySelectorAll("#article-container table"); + if (!$table.length) return; + + $table.forEach(item => { + if (!item.closest(".highlight")) { + anzhiyu.wrap(item, "div", { class: "table-wrap" }); + } + }); + }; + + /** + * tag-hide + */ + const clickFnOfTagHide = () => { + const hideButtons = document.querySelectorAll("#article-container .hide-button"); + if (!hideButtons.length) return; + const handleClick = function (e) { + const $this = this; + $this.classList.add("open"); + const $fjGallery = $this.nextElementSibling.querySelectorAll(".gallery-container"); + $fjGallery.length && addJustifiedGallery($fjGallery); + }; + + hideButtons.forEach(item => { + item.addEventListener("click", handleClick, { once: true }); + }); + }; + + const tabsFn = () => { + const navTabsElement = document.querySelectorAll("#article-container .tabs"); + if (!navTabsElement.length) return; + + const removeAndAddActiveClass = (elements, detect) => { + Array.from(elements).forEach(element => { + element.classList.remove("active"); + if (element === detect || element.id === detect) { + element.classList.add("active"); + } + }); + }; + + const addTabNavEventListener = (item, isJustifiedGallery) => { + const navClickHandler = function (e) { + const target = e.target.closest("button"); + if (target.classList.contains("active")) return; + removeAndAddActiveClass(this.children, target); + this.classList.remove("no-default"); + const tabId = target.getAttribute("data-href"); + const tabContent = this.nextElementSibling; + removeAndAddActiveClass(tabContent.children, tabId); + if (isJustifiedGallery) { + const $isTabJustifiedGallery = tabContent.querySelectorAll(`#${tabId} .fj-gallery`); + if ($isTabJustifiedGallery.length > 0) { + anzhiyu.initJustifiedGallery($isTabJustifiedGallery); + } + } + }; + anzhiyu.addEventListenerPjax(item.firstElementChild, "click", navClickHandler); + }; + + const addTabToTopEventListener = item => { + const btnClickHandler = e => { + const target = e.target.closest("button"); + if (!target) return; + anzhiyu.scrollToDest(anzhiyu.getEleTop(item), 300); + }; + anzhiyu.addEventListenerPjax(item.lastElementChild, "click", btnClickHandler); + }; + + navTabsElement.forEach(item => { + const isJustifiedGallery = !!item.querySelectorAll(".gallery-container"); + addTabNavEventListener(item, isJustifiedGallery); + addTabToTopEventListener(item); + }); + }; + + const toggleCardCategory = () => { + const cardCategory = document.querySelector("#aside-cat-list.expandBtn"); + if (!cardCategory) return; + + const handleToggleBtn = e => { + const target = e.target; + if (target.nodeName === "I") { + e.preventDefault(); + target.parentNode.classList.toggle("expand"); + } + }; + anzhiyu.addEventListenerPjax(cardCategory, "click", handleToggleBtn, true); + }; + + const switchComments = () => { + const switchBtn = document.getElementById("switch-btn"); + if (!switchBtn) return; + let switchDone = false; + const commentContainer = document.getElementById("post-comment"); + const handleSwitchBtn = () => { + commentContainer.classList.toggle("move"); + if (!switchDone && typeof loadOtherComment === "function") { + switchDone = true; + loadOtherComment(); + } + }; + anzhiyu.addEventListenerPjax(switchBtn, "click", handleSwitchBtn); + }; + + const addPostOutdateNotice = function () { + const data = GLOBAL_CONFIG.noticeOutdate; + const diffDay = anzhiyu.diffDate(GLOBAL_CONFIG_SITE.postUpdate); + if (diffDay >= data.limitDay) { + const ele = document.createElement("div"); + ele.className = "post-outdate-notice"; + ele.textContent = data.messagePrev + " " + diffDay + " " + data.messageNext; + const $targetEle = document.getElementById("article-container"); + if (data.position === "top") { + $targetEle.insertBefore(ele, $targetEle.firstChild); + } else { + $targetEle.appendChild(ele); + } + } + }; + + const lazyloadImg = () => { + window.lazyLoadInstance = new LazyLoad({ + elements_selector: "img", + threshold: 0, + data_src: "lazy-src", + }); + }; + + const relativeDate = function (selector) { + selector.forEach(item => { + const timeVal = item.getAttribute("datetime"); + item.textContent = anzhiyu.diffDate(timeVal, true); + item.style.display = "inline"; + }); + }; + + const mouseleaveHomeCard = function () { + const topGroup = document.querySelector(".topGroup"); + if (!topGroup) return; + //首页大卡片恢复显示 + topGroup.addEventListener("mouseleave", function () { + document.getElementById("todayCard").classList.remove("hide"); + document.getElementById("todayCard").style.zIndex = 1; + }); + }; + + // 表情放大 + const owoBig = function () { + let flag = 1, // 设置节流阀 + owo_time = "", // 设置计时器 + m = 3; // 设置放大倍数 + // 创建盒子 + let div = document.createElement("div"); + // 设置ID + div.id = "owo-big"; + // 插入盒子 + let body = document.querySelector("body"); + body.appendChild(div); + + // 监听 post-comment 元素的子元素添加事件 + const observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + const addedNodes = mutation.addedNodes; + // 判断新增的节点中是否包含 OwO-body 类名的元素 + for (let i = 0; i < addedNodes.length; i++) { + const node = addedNodes[i]; + if ( + node.nodeType === Node.ELEMENT_NODE && + node.classList.contains("OwO-body") && + !node.classList.contains("comment-barrage") + ) { + const owo_body = node; + // 禁用右键(手机端长按会出现右键菜单,为了体验给禁用掉) + owo_body.addEventListener("contextmenu", e => e.preventDefault()); + // 鼠标移入 + owo_body.addEventListener("mouseover", handleMouseOver); + // 鼠标移出 + owo_body.addEventListener("mouseout", handleMouseOut); + } + } + }); + }); + + // 配置 MutationObserver 选项 + const config = { childList: true, subtree: true }; + + // 开始监听 + observer.observe(document.getElementById("post-comment"), config); + + function handleMouseOver(e) { + if (e.target.tagName == "IMG" && flag) { + flag = 0; + // 移入100毫秒后显示盒子 + owo_time = setTimeout(() => { + let height = e.target.clientHeight * m; // 盒子高 + let width = e.target.clientWidth * m; // 盒子宽 + let left = e.x - e.offsetX - (width - e.target.clientWidth) / 2; // 盒子与屏幕左边距离 + if (left + width > body.clientWidth) { + left -= left + width - body.clientWidth + 10; + } // 右边缘检测,防止超出屏幕 + if (left < 0) left = 10; // 左边缘检测,防止超出屏幕 + let top = e.y - e.offsetY; // 盒子与屏幕顶部距离 + + // 设置盒子样式 + div.style.height = height + "px"; + div.style.width = width + "px"; + div.style.left = left + "px"; + div.style.top = top + "px"; + div.style.display = "flex"; + // 在盒子中插入图片 + div.innerHTML = ``; + }, 100); + } + } + + function handleMouseOut(e) { + // 隐藏盒子 + div.style.display = "none"; + flag = 1; + clearTimeout(owo_time); + } + }; + + //封面纯色 + const coverColor = async () => { + const root = document.querySelector(":root"); + const path = document.getElementById("post-top-bg")?.src; + if (!path) { + // 非文章情况,直接设置不需要请求了 + root.style.setProperty("--anzhiyu-bar-background", "var(--anzhiyu-meta-theme-color)"); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + // 要改回来默认主色 + document.documentElement.style.setProperty( + "--anzhiyu-main", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-theme") + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + + return; + } + + // 文章内 + if (GLOBAL_CONFIG.mainTone) { + if (GLOBAL_CONFIG_SITE.postMainColor) { + let value = GLOBAL_CONFIG_SITE.postMainColor; + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + const fallbackValue = "var(--anzhiyu-theme)"; + let fetchPath = ""; + if (GLOBAL_CONFIG.mainTone.mode == "cdn" || GLOBAL_CONFIG.mainTone.mode == "both") { + fetchPath = path + "?imageAve"; + } else if (GLOBAL_CONFIG.mainTone.mode == "api") { + fetchPath = GLOBAL_CONFIG.mainTone.api + path; + } + // cdn/api模式请求 + try { + const response = await fetch(fetchPath); + if (response.ok && response.headers.get("content-type")?.includes("application/json")) { + const obj = await response.json(); + let value = + GLOBAL_CONFIG.mainTone.mode == "cdn" || GLOBAL_CONFIG.mainTone.mode == "both" + ? "#" + obj.RGB.slice(2) + : obj.RGB; + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + if (GLOBAL_CONFIG.mainTone.mode == "both") { + // both继续请求 + try { + const response = await fetch(GLOBAL_CONFIG.mainTone.api + path); + if (response.ok && response.headers.get("content-type")?.includes("application/json")) { + const obj = await response.json(); + let value = obj.RGB; + + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } catch { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } else { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } + } catch (err) { + console.error("Error fetching data:", err); + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } + } + }; + + //RGB颜色转化为16进制颜色 + const colorHex = str => { + const hexRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/; + + if (/^(rgb|RGB)/.test(str)) { + const aColor = str.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","); + return aColor.reduce((acc, val) => { + const hex = Number(val).toString(16).padStart(2, "0"); + return acc + hex; + }, "#"); + } + + if (hexRegex.test(str)) { + if (str.length === 4) { + return Array.from(str.slice(1)).reduce((acc, val) => acc + val + val, "#"); + } + return str; + } + + return str; + }; + + // Lighten or darken a color + const LightenDarkenColor = (col, amt) => { + const usePound = col.startsWith("#"); + + if (usePound) { + col = col.slice(1); + } + + let num = parseInt(col, 16); + + const processColor = (colorValue, amount) => { + colorValue += amount; + return colorValue > 255 ? 255 : colorValue < 0 ? 0 : colorValue; + }; + + const r = processColor(num >> 16, amt); + const b = processColor((num >> 8) & 0x00ff, amt); + const g = processColor(num & 0x0000ff, amt); + + return (usePound ? "#" : "") + String("000000" + (g | (b << 8) | (r << 16)).toString(16)).slice(-6); + }; + + // Determine whether a color is light or dark + const getContrastYIQ = hexcolor => { + const colorRgb = color => { + const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + color = color.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b); + + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(color); + return result ? `rgb(${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)})` : null; + }; + + const colorrgb = colorRgb(hexcolor); + const colors = colorrgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); + + const [_, red, green, blue] = colors; + + const brightness = (red * 299 + green * 587 + blue * 114) / 255000; + + return brightness >= 0.5 ? "light" : "dark"; + }; + + //监听跳转页面输入框是否按下回车 + const listenToPageInputPress = function () { + var input = document.getElementById("toPageText"); + if (input) { + input.addEventListener("keydown", event => { + if (event.keyCode === 13) { + // 如果按下的是回车键,则执行特定的函数 + anzhiyu.toPage(); + var link = document.getElementById("toPageButton"); + var href = link.href; + pjax.loadUrl(href); + } + }); + } + }; + + // 监听nav是否被其他音频暂停⏸️ + const listenNavMusicPause = function () { + const timer = setInterval(() => { + if (navMusicEl && navMusicEl.querySelector("#nav-music meting-js").aplayer) { + clearInterval(timer); + let msgPlay = '播放音乐'; + let msgPause = '暂停音乐'; + navMusicEl.querySelector("#nav-music meting-js").aplayer.on("pause", function () { + navMusicEl.classList.remove("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPlay; + document.getElementById("nav-music-hoverTips").innerHTML = "音乐已暂停"; + document.querySelector("#consoleMusic").classList.remove("on"); + anzhiyu_musicPlaying = false; + navMusicEl.classList.remove("stretch"); + }); + navMusicEl.querySelector("#nav-music meting-js").aplayer.on("play", function () { + navMusicEl.classList.add("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPause; + document.querySelector("#consoleMusic").classList.add("on"); + anzhiyu_musicPlaying = true; + // navMusicEl.classList.add("stretch"); + }); + } + }, 16); + }; + + // 开发者工具键盘监听 + window.onkeydown = function (e) { + 123 === e.keyCode && anzhiyu.snackbarShow("开发者模式已打开,请遵循GPL协议", !1); + }; + + // 欢迎语 + function greetingInit() { + const greetingBoxInfo = GLOBAL_CONFIG.greetingBox.list; + const greetingBoxDefault = GLOBAL_CONFIG.greetingBox.default; + //- 创建盒子 + let div = document.createElement("div"); + //- 设置ID + div.id = "greeting"; + //- 设置class + setTimeout(() => { + div.classList.add("shown"); + }, 1000); + //- 插入盒子 + let greetingBox = document.getElementById("greetingBox"); + if (!greetingBox) return; + greetingBox.appendChild(div); + const nowTime = new Date().getHours(); + let greetings = greetingBoxDefault; + for (let i = 0; i < greetingBoxInfo.length; i++) { + if (nowTime >= greetingBoxInfo[i].startTime && nowTime <= greetingBoxInfo[i].endTime) { + greetings = greetingBoxInfo[i].greeting; + break; + } + } + div.innerHTML = greetings; + setTimeout(() => { + div.classList.remove("shown"); + setTimeout(() => { + greetingBox.remove(); + }, 500); + }, 3000); + } + function statistics51aInit() { + const loadScript = (url, charset = "UTF-8", crossorigin, id) => { + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = url; + script.async = true; + if (id) { + script.setAttribute("id", id); + } + if (charset) { + script.setAttribute("charset", charset); + } + if (crossorigin) { + script.setAttribute("crossorigin", crossorigin); + } + script.onerror = reject; + script.onload = script.onreadystatechange = function () { + const loadState = this.readyState; + if (loadState && loadState !== "loaded" && loadState !== "complete") return; + script.onload = script.onreadystatechange = null; + resolve(); + }; + document.head.appendChild(script); + }); + }; + + const scriptUrls = [ + { url: "https://sdk.51.la/js-sdk-pro.min.js", charset: "UTF-8", crossorigin: false, id: "LA_COLLECT" }, + { url: "https://sdk.51.la/perf/js-sdk-perf.min.js", crossorigin: "anonymous" }, + ]; + + Promise.all(scriptUrls.map(({ url, charset, crossorigin, id }) => loadScript(url, charset, crossorigin, id))) + .then(() => { + LA.init({ id: GLOBAL_CONFIG.LA51.ck, ck: GLOBAL_CONFIG.LA51.ck }); + new LingQue.Monitor().init({ id: GLOBAL_CONFIG.LA51.LingQueMonitorID, sendSuspicious: true }); + }) + .catch(error => { + console.error("加载51a统计异常,本地加载403是正常情况:", error); + }); + } + + function setInputFocusListener() { + const inputs = document.querySelectorAll("input, textarea"); + const filteredinputs = Array.from(inputs).filter(heading => { + if (heading.id !== "center-console" || heading.id !== "page-type") { + return; + } + }); + filteredinputs.forEach(input => { + input.addEventListener("focus", () => { + anzhiyu_intype = true; + }); + + input.addEventListener("blur", () => { + anzhiyu_intype = false; + }); + }); + } + + // 是否开启快捷键 + function executeShortcutKeyFunction() { + // 是否开启快捷键 + anzhiyu_keyboard = localStorage.getItem("keyboardToggle") ? localStorage.getItem("keyboardToggle") : false; + function addKeyShotListener() { + const windowObject = window; + windowObject.removeEventListener("keydown", keyDownEvent); + windowObject.removeEventListener("keyup", keyUpEvent); + windowObject.addEventListener("keydown", keyDownEvent); + windowObject.addEventListener("keyup", keyUpEvent); + } + + function keyDownEvent(event) { + const isEscapeKeyPressed = event.keyCode === 27; + const isShiftKeyPressed = event.shiftKey; + const isKeyboardEnabled = anzhiyu_keyboard; + const isInInputField = anzhiyu_intype; + + if (isEscapeKeyPressed) { + anzhiyu.hideLoading(); + anzhiyu.hideConsole(); + rm && rm.hideRightMenu(); + } + const shortcutKeyDelay = GLOBAL_CONFIG.shortcutKey.delay ? GLOBAL_CONFIG.shortcutKey.delay : 100; + const shortcutKeyShiftDelay = GLOBAL_CONFIG.shortcutKey.shiftDelay ? GLOBAL_CONFIG.shortcutKey.shiftDelay : 200; + if (isKeyboardEnabled && isShiftKeyPressed && !isInInputField) { + anzhiyu_keyUpShiftDelayEvent_timeoutId = setTimeout(() => { + switch (event.keyCode) { + case 16: + anzhiyu_keyUpEvent_timeoutId = setTimeout(() => { + document.querySelector("#keyboard-tips").classList.add("show"); + }, shortcutKeyShiftDelay); + break; + case 65: + anzhiyu.switchConsole(); + break; + case 77: + anzhiyu.musicToggle(); + break; + case 75: + anzhiyu.keyboardToggle(); + break; + case 73: + anzhiyu.rightMenuToggle(); + break; + case 82: + toRandomPost(); + break; + case 72: + pjax.loadUrl("/"); + break; + case 68: + rightSideFn.darkmode(); + break; + case 70: + pjax.loadUrl("/fcircle/"); + break; + case 76: + pjax.loadUrl("/link/"); + break; + case 80: + pjax.loadUrl("/about/"); + break; + default: + break; + } + event.preventDefault(); + }, shortcutKeyDelay); + } + } + + window.onfocus = function () { + document.getElementById("keyboard-tips").classList.remove("show"); + }; + + function keyUpEvent(event) { + anzhiyu_keyUpEvent_timeoutId && clearTimeout(anzhiyu_keyUpEvent_timeoutId); + anzhiyu_keyUpShiftDelayEvent_timeoutId && clearTimeout(anzhiyu_keyUpShiftDelayEvent_timeoutId); + if (event.keyCode === 16) { + const keyboardTips = document.querySelector("#keyboard-tips"); + keyboardTips.classList.remove("show"); + } + } + + addKeyShotListener(); + } + + function changeDocumentTitle() { + let leaveTitle = GLOBAL_CONFIG.diytitle.leaveTitle; + let backTitle = GLOBAL_CONFIG.diytitle.backTitle; + let OriginTitile = document.title; + let titleTime; + + document.addEventListener("visibilitychange", function () { + if (document.hidden) { + //离开当前页面时标签显示内容 + document.title = leaveTitle; + clearTimeout(titleTime); + } else { + //返回当前页面时标签显示内容 + document.title = backTitle + OriginTitile; + //两秒后变回正常标题 + titleTime = setTimeout(function () { + document.title = OriginTitile; + }, 2000); + } + }); + } + + function addDarkModeEventListener(elementId, childSelector) { + const element = document.getElementById(elementId); + if (element && childSelector) { + const childElement = element.querySelector(childSelector); + childElement && childElement.addEventListener("click", rightSideFn.darkmode); + } else if (element) { + element.addEventListener("click", rightSideFn.darkmode); + } + } + + const unRefreshFn = function () { + window.addEventListener("resize", () => { + adjustMenu(false); + mobileSidebarOpen && anzhiyu.isHidden(document.getElementById("toggle-menu")) && sidebarFn.close(); + }); + + document.getElementById("menu-mask").addEventListener("click", e => { + sidebarFn.close(); + }); + + // 处理右键 + $rightMenu = document.getElementById("rightMenu"); + addDarkModeEventListener("menu-darkmode"); + addDarkModeEventListener("sidebar", ".darkmode_switchbutton"); + + clickFnOfSubMenu(); + GLOBAL_CONFIG.islazyload && lazyloadImg(); + GLOBAL_CONFIG.copyright !== undefined && addCopyright(); + GLOBAL_CONFIG.navMusic && listenNavMusicPause(); + if (GLOBAL_CONFIG.shortcutKey && document.getElementById("consoleKeyboard")) { + localStorage.setItem("keyboardToggle", "true"); + document.getElementById("consoleKeyboard").classList.add("on"); + anzhiyu_keyboard = true; + executeShortcutKeyFunction(); + } + if (GLOBAL_CONFIG.autoDarkmode) { + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e => { + if (saveToLocal.get("theme") !== undefined) return; + e.matches ? handleThemeChange("dark") : handleThemeChange("light"); + }); + } + // 欢迎语 + GLOBAL_CONFIG.greetingBox && greetingInit(); + // 51la统计&灵雀统计 + GLOBAL_CONFIG.LA51 && statistics51aInit(); + }; + + window.refreshFn = function () { + initAdjust(); + themeColorMeta = document.querySelector('meta[name="theme-color"]'); + pageHeaderEl = document.getElementById("page-header"); + navMusicEl = document.getElementById("nav-music"); + consoleEl = document.getElementById("console"); + + addDarkModeEventListener("console", ".darkmode_switchbutton"); + + if (GLOBAL_CONFIG_SITE.isPost) { + GLOBAL_CONFIG.noticeOutdate !== undefined && addPostOutdateNotice(); + GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll("#post-meta time")); + } else { + if (GLOBAL_CONFIG.relativeDate.homepage) { + relativeDate(document.querySelectorAll("#recent-posts time")); + } else if (GLOBAL_CONFIG.relativeDate.simplehomepage) { + relativeDate(document.querySelectorAll("#recent-posts time"), true); + } + GLOBAL_CONFIG.runtime && addRuntime(); + addLastPushDate(); + toggleCardCategory(); + } + + GLOBAL_CONFIG.diytitle && changeDocumentTitle(); + scrollFnToDo(); + GLOBAL_CONFIG_SITE.isHome && scrollDownInIndex(); + addHighlightTool(); + GLOBAL_CONFIG.isPhotoFigcaption && addPhotoFigcaption(); + scrollFn(); + + // 刷新时第一次滚动百分比 + window.scrollCollect && window.scrollCollect(); + + const $jgEle = document.querySelectorAll("#content-inner .fj-gallery"); + $jgEle.length && runJustifiedGallery($jgEle); + + runLightbox(); + addTableWrap(); + clickFnOfTagHide(); + tabsFn(); + switchComments(); + document.getElementById("toggle-menu").addEventListener("click", () => { + sidebarFn.open(); + }); + + // 如果当前页有评论就执行函数 + if (document.getElementById("post-comment")) owoBig(); + + mouseleaveHomeCard(); + coverColor(); + listenToPageInputPress(); + openMobileMenu(); + + // needRefresh + // nav中间的标题变化 + document.getElementById("page-name").innerText = document.title.split(` | ${GLOBAL_CONFIG_SITE.configTitle}`)[0]; + anzhiyu.initIndexEssay(); + anzhiyu.changeTimeInEssay(); + anzhiyu.removeBodyPaceClass(); + anzhiyu.qrcodeCreate(); + anzhiyu.changeTimeInAlbumDetail(); + anzhiyu.reflashEssayWaterFall(); + anzhiyu.sayhi(); + anzhiyu.stopImgRightDrag(); + anzhiyu.addNavBackgroundInit(); + anzhiyu.setValueToBodyType(); + anzhiyu.catalogActive(); + anzhiyu.tagsPageActive(); + anzhiyu.categoriesBarActive(); + anzhiyu.topCategoriesBarScroll(); + anzhiyu.switchRightClickMenuHotReview(); + anzhiyu.getCustomPlayList(); + anzhiyu.addEventListenerConsoleMusicList(false); + anzhiyu.initPaginationObserver(); + + setTimeout(() => { + setInputFocusListener(); + if (typeof addFriendLinksInFooter === "function") { + addFriendLinksInFooter(); + } + }, 200); + }; + + refreshFn(); + unRefreshFn(); +}); diff --git a/js/search/algolia.js b/js/search/algolia.js new file mode 100644 index 0000000000..e004701b39 --- /dev/null +++ b/js/search/algolia.js @@ -0,0 +1,192 @@ +window.addEventListener("load", () => { + const $searchMask = document.getElementById("search-mask"); + const $searchDialog = document.querySelector("#algolia-search .search-dialog"); + + const openSearch = () => { + anzhiyu.animateIn($searchMask, "to_show 0.5s"); + $searchDialog.style.display = "block"; + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 100); + + // shortcut: ESC + document.addEventListener("keydown", function f(event) { + if (event.code === "Escape") { + closeSearch(); + document.removeEventListener("keydown", f); + } + }); + + fixSafariHeight(); + window.addEventListener("resize", fixSafariHeight); + }; + + // shortcut: shift+S + if (anzhiyu_keyboard) { + window.addEventListener("keydown", function (event) { + if (event.keyCode == 83 && event.shiftKey) { + console.info(selectTextNow); + if (selectTextNow) { + openSearch(); + const t = document.querySelector("#algolia-search-input > div > form > input"); + t.value = selectTextNow; + t.dispatchEvent(new Event("input")); + setTimeout(() => { + document.querySelector("#algolia-search-input > div > form > button.ais-SearchBox-submit").click(); + }, 64); + } else { + openSearch(); + } + + return false; + } + }); + } + + const closeSearch = () => { + anzhiyu.animateOut($searchDialog, "search_close .5s"); + anzhiyu.animateOut($searchMask, "to_hide 0.5s"); + window.removeEventListener("resize", fixSafariHeight); + }; + + // fix safari + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty("--search-height", window.innerHeight + "px"); + } + }; + + const searchClickFn = () => { + anzhiyu.addEventListenerPjax(document.querySelector("#search-button > .search"), "click", openSearch); + }; + + const searchFnOnce = () => { + $searchMask.addEventListener("click", closeSearch); + document.querySelector("#algolia-search .search-close-button").addEventListener("click", closeSearch); + }; + + const algolia = GLOBAL_CONFIG.algolia; + const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName; + if (!isAlgoliaValid) { + return console.error("Algolia setting is invalid!"); + } + + const search = instantsearch({ + indexName: algolia.indexName, + /* global algoliasearch */ + searchClient: algoliasearch(algolia.appId, algolia.apiKey), + searchFunction(helper) { + if (helper.state.query) { + let innerLoading = ''; + document.getElementById("algolia-hits").innerHTML = innerLoading; + helper.search(); + } + }, + }); + + const configure = instantsearch.widgets.configure({ + hitsPerPage: algolia.hits.per_page ?? 5, + }); + + const searchBox = instantsearch.widgets.searchBox({ + container: "#algolia-search-input", + showReset: false, + showSubmit: false, + placeholder: algolia.languages.input_placeholder, + showLoadingIndicator: true, + searchOnEnterKeyPressOnly: true, + searchAsYouType: false, + }); + + const hits = instantsearch.widgets.hits({ + container: "#algolia-hits", + templates: { + item(data) { + const link = data.permalink ? data.permalink : GLOBAL_CONFIG.root + data.path; + const result = data._highlightResult; + const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin"); + if (loadingLogo) { + loadingLogo.style.display = "none"; + } + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 200); + return ` + + ${result.title.value || "no-title"} + `; + }, + empty: function (data) { + const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin"); + console.info(loadingLogo); + if (loadingLogo) { + loadingLogo.style.display = "none"; + } + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 200); + return ( + '
    ' + + GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) + + "
    " + ); + }, + }, + cssClasses: { + item: "algolia-hit-item", + }, + }); + + const stats = instantsearch.widgets.stats({ + container: "#algolia-info > .algolia-stats", + templates: { + text: function (data) { + const stats = GLOBAL_CONFIG.algolia.languages.hits_stats + .replace(/\$\{hits}/, data.nbHits) + .replace(/\$\{time}/, data.processingTimeMS); + return `
    ${stats}`; + }, + }, + }); + + const powerBy = instantsearch.widgets.poweredBy({ + container: "#algolia-info > .algolia-poweredBy", + }); + + const pagination = instantsearch.widgets.pagination({ + container: "#algolia-pagination", + totalPages: algolia.hits.per_page ?? 5, + templates: { + first: '', + last: '', + previous: '', + next: '', + }, + scrollTo: false, + showFirstLast: false, + cssClasses: { + root: "pagination", + item: "pagination-item", + link: "page-number", + active: "current", + disabled: "disabled-item", + }, + }); + + search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]); // add the widgets to the instantsearch instance + + search.start(); + + searchClickFn(); + searchFnOnce(); + + window.addEventListener("pjax:complete", () => { + !anzhiyu.isHidden($searchMask) && closeSearch(); + searchClickFn(); + }); + + window.pjax && + search.on("render", () => { + window.pjax.refresh(document.getElementById("algolia-hits")); + }); +}); diff --git a/js/search/local-search.js b/js/search/local-search.js new file mode 100644 index 0000000000..44b5d62ff2 --- /dev/null +++ b/js/search/local-search.js @@ -0,0 +1,270 @@ +window.addEventListener("load", () => { + let loadFlag = false; + let dataObj = []; + const $searchMask = document.getElementById("search-mask"); + + const openSearch = () => { + const bodyStyle = document.body.style; + bodyStyle.width = "100%"; + bodyStyle.overflow = "hidden"; + anzhiyu.animateIn($searchMask, "to_show 0.5s"); + anzhiyu.animateIn(document.querySelector("#local-search .search-dialog"), "titleScale 0.5s"); + setTimeout(() => { + document.querySelector("#local-search-input input").focus(); + }, 100); + if (!loadFlag) { + search(); + loadFlag = true; + } + // shortcut: ESC + document.addEventListener("keydown", function f(event) { + if (event.code === "Escape") { + closeSearch(); + document.removeEventListener("keydown", f); + } + }); + }; + + const closeSearch = () => { + const bodyStyle = document.body.style; + bodyStyle.width = ""; + bodyStyle.overflow = ""; + anzhiyu.animateOut(document.querySelector("#local-search .search-dialog"), "search_close .5s"); + anzhiyu.animateOut($searchMask, "to_hide 0.5s"); + }; + + const searchClickFn = () => { + document.querySelector("#search-button > .search").addEventListener("click", openSearch); + document.querySelector("#menu-search").addEventListener("click", openSearch); + }; + + const searchClickFnOnce = () => { + document.querySelector("#local-search .search-close-button").addEventListener("click", closeSearch); + $searchMask.addEventListener("click", closeSearch); + if (GLOBAL_CONFIG.localSearch.preload) dataObj = fetchData(GLOBAL_CONFIG.localSearch.path); + }; + + // check url is json or not + const isJson = url => { + const reg = /\.json$/; + return reg.test(url); + }; + + const fetchData = async path => { + let data = []; + const response = await fetch(path); + if (isJson(path)) { + data = await response.json(); + } else { + const res = await response.text(); + const t = await new window.DOMParser().parseFromString(res, "text/xml"); + const a = await t; + + data = [...a.querySelectorAll("entry")].map(item => { + let tagsArr = []; + if (item.querySelector("tags") && item.querySelector("tags").getElementsByTagName("tag")) { + Array.prototype.forEach.call(item.querySelector("tags").getElementsByTagName("tag"), function (item, index) { + tagsArr.push(item.textContent); + }); + } + let content = item.querySelector("content") && item.querySelector("content").textContent; + let imgReg = /|\/>)/gi; //匹配图片中的img标签 + let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; // 匹配图片中的src + let arr = content.match(imgReg); //筛选出所有的img + + let srcArr = []; + if (arr) { + for (let i = 0; i < arr.length; i++) { + let src = arr[i].match(srcReg); + // 获取图片地址 + if (!src[1].indexOf("http")) srcArr.push(src[1]); + } + } + + return { + title: item.querySelector("title").textContent, + content: content, + url: item.querySelector("url").textContent, + tags: tagsArr, + oneImage: srcArr && srcArr[0], + }; + }); + } + if (response.ok) { + const $loadDataItem = document.getElementById("loading-database"); + $loadDataItem.nextElementSibling.style.display = "block"; + $loadDataItem.remove(); + } + return data; + }; + + const search = () => { + if (!GLOBAL_CONFIG.localSearch.preload) { + dataObj = fetchData(GLOBAL_CONFIG.localSearch.path); + } + const $input = document.querySelector("#local-search-input input"); + const $resultContent = document.getElementById("local-search-results"); + const $loadingStatus = document.getElementById("loading-status"); + + $input.addEventListener("input", function () { + const keywords = this.value.trim().toLowerCase().split(/[\s]+/); + if (keywords[0] !== "") + $loadingStatus.innerHTML = ''; + + $resultContent.innerHTML = ""; + let str = '
    '; + if (keywords.length <= 0) return; + let count = 0; + // perform local searching + dataObj.then(data => { + data.forEach(data => { + let isMatch = true; + let dataTitle = data.title ? data.title.trim().toLowerCase() : ""; + let dataTags = data.tags; + let oneImage = data.oneImage ?? ""; + const dataContent = data.content + ? data.content + .trim() + .replace(/<[^>]+>/g, "") + .toLowerCase() + : ""; + const dataUrl = data.url.startsWith("/") ? data.url : GLOBAL_CONFIG.root + data.url; + let indexTitle = -1; + let indexContent = -1; + let firstOccur = -1; + // only match articles with not empty titles and contents + if (dataTitle !== "" || dataContent !== "") { + keywords.forEach((keyword, i) => { + indexTitle = dataTitle.indexOf(keyword); + indexContent = dataContent.indexOf(keyword); + if (indexTitle < 0 && indexContent < 0) { + isMatch = false; + } else { + if (indexContent < 0) { + indexContent = 0; + } + if (i === 0) { + firstOccur = indexContent; + } + } + }); + } else { + isMatch = false; + } + + // show search results + if (isMatch) { + if (firstOccur >= 0) { + // cut out 130 characters + // let start = firstOccur - 30 < 0 ? 0 : firstOccur - 30 + // let end = firstOccur + 50 > dataContent.length ? dataContent.length : firstOccur + 50 + let start = firstOccur - 30; + let end = firstOccur + 100; + let pre = ""; + let post = ""; + + if (start < 0) { + start = 0; + } + + if (start === 0) { + end = 100; + } else { + pre = "..."; + } + + if (end > dataContent.length) { + end = dataContent.length; + } else { + post = "..."; + } + + let matchContent = dataContent.substring(start, end); + + // highlight all keywords + keywords.forEach(keyword => { + const regS = new RegExp(keyword, "gi"); + matchContent = matchContent.replace(regS, '' + keyword + ""); + dataTitle = dataTitle.replace(regS, '' + keyword + ""); + }); + + str += '
    '; + if (oneImage) { + str += `
    ${dataTitle}`; + } else { + str += '
    '; + } + + str += "
    "; + + if (oneImage) { + str += + '
    ' + + dataTitle + + ""; + } else { + str += + '
    ' + + dataTitle + + ""; + } + + count += 1; + + if (dataContent !== "") { + str += + '

    ' + + pre + + matchContent + + post + + "

    "; + } + if (dataTags.length) { + str += '
    '; + + for (let i = 0; i < dataTags.length; i++) { + const element = dataTags[i].trim(); + + str += + '#' + + element + + ""; + } + + str += "
    "; + } + } + str += "
    "; + } + }); + if (count === 0) { + str += + '
    ' + + GLOBAL_CONFIG.localSearch.languages.hits_empty.replace(/\$\{query}/, this.value.trim()) + + "
    "; + } + str += "
    "; + $resultContent.innerHTML = str; + if (keywords[0] !== "") $loadingStatus.innerHTML = ""; + window.pjax && window.pjax.refresh($resultContent); + }); + }); + }; + + searchClickFn(); + searchClickFnOnce(); + + // pjax + window.addEventListener("pjax:complete", () => { + !anzhiyu.isHidden($searchMask) && closeSearch(); + searchClickFn(); + }); +}); diff --git a/js/tw_cn.js b/js/tw_cn.js new file mode 100644 index 0000000000..86a0d7b033 --- /dev/null +++ b/js/tw_cn.js @@ -0,0 +1,130 @@ +document.addEventListener('DOMContentLoaded', function () { + const { defaultEncoding, translateDelay, msgToTraditionalChinese, msgToSimplifiedChinese } = GLOBAL_CONFIG.translate + const snackbarData = GLOBAL_CONFIG.Snackbar + let currentEncoding = defaultEncoding + const targetEncodingCookie = 'translate-chn-cht' + let targetEncoding = + saveToLocal.get(targetEncodingCookie) === undefined + ? defaultEncoding + : Number(saveToLocal.get('translate-chn-cht')) + let translateButtonObject, translateRightMenuButtonObject; + const isSnackbar = snackbarData !== undefined + + function setLang () { + document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' + } + + function translateText (txt) { + if (txt === '' || txt == null) return '' + if (currentEncoding === 1 && targetEncoding === 2) return Simplized(txt) + else if (currentEncoding === 2 && targetEncoding === 1) { + return Traditionalized(txt) + } else return txt + } + + function translateBody (fobj) { + let objs + if (typeof fobj === 'object') objs = fobj.childNodes + else objs = document.body.childNodes + for (let i = 0; i < objs.length; i++) { + const obj = objs.item(i) + if ( + '||BR|HR|'.indexOf('|' + obj.tagName + '|') > 0 || + obj === translateButtonObject + ) { + continue + } + if (obj.title !== '' && obj.title != null) { + obj.title = translateText(obj.title) + } + if (obj.alt !== '' && obj.alt != null) obj.alt = translateText(obj.alt) + if (obj.placeholder !== '' && obj.placeholder != null) { obj.placeholder = translateText(obj.placeholder) } + if ( + obj.tagName === 'INPUT' && + obj.value !== '' && + obj.type !== 'text' && + obj.type !== 'hidden' + ) { + obj.value = translateText(obj.value) + } + if (obj.nodeType === 3) obj.data = translateText(obj.data) + else translateBody(obj) + } + } + function translatePage () { + if (targetEncoding === 1) { + currentEncoding = 1 + targetEncoding = 2 + translateButtonObject.textContent = msgToTraditionalChinese + isSnackbar && anzhiyu.snackbarShow(snackbarData.cht_to_chs) + } else if (targetEncoding === 2) { + currentEncoding = 2 + targetEncoding = 1 + translateButtonObject.textContent = msgToSimplifiedChinese + isSnackbar && anzhiyu.snackbarShow(snackbarData.chs_to_cht) + } + saveToLocal.set(targetEncodingCookie, targetEncoding, 2) + setLang() + translateBody() + } + + function JTPYStr () { + return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' + } + function FTPYStr () { + return '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' + } + function Traditionalized (cc) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) !== -1) { + str += tt.charAt(ss.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + function Simplized (cc) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) !== -1) { + str += ss.charAt(tt.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + + function translateInitialization() { + translateButtonObject = document.getElementById('translateLink'); + translateRightMenuButtonObject = document.getElementById('menu-translate').querySelector('span'); + + if (translateButtonObject || translateRightMenuButtonObject) { + if (currentEncoding !== targetEncoding) { + const textContent = targetEncoding === 1 ? msgToSimplifiedChinese : msgToTraditionalChinese; + + if (translateButtonObject) { + translateButtonObject.textContent = textContent; + } + + if (translateRightMenuButtonObject) { + translateRightMenuButtonObject.textContent = textContent; + } + + setLang(); + setTimeout(translateBody, translateDelay); + } + } + } + + window.translateFn = { + translatePage, + Traditionalized, + Simplized + } + + translateInitialization() + document.addEventListener('pjax:complete', translateInitialization) +}) \ No newline at end of file diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000000..01e887b4be --- /dev/null +++ b/js/utils.js @@ -0,0 +1,1435 @@ +const anzhiyu = { + debounce: (func, wait = 0, immediate = false) => { + let timeout; + return (...args) => { + const later = () => { + timeout = null; + if (!immediate) func(...args); + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func(...args); + }; + }, + + throttle: function (func, wait, options = {}) { + let timeout, context, args; + let previous = 0; + + const later = () => { + previous = options.leading === false ? 0 : new Date().getTime(); + timeout = null; + func.apply(context, args); + if (!timeout) context = args = null; + }; + + const throttled = (...params) => { + const now = new Date().getTime(); + if (!previous && options.leading === false) previous = now; + const remaining = wait - (now - previous); + context = this; + args = params; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + }; + + return throttled; + }, + + sidebarPaddingR: () => { + const innerWidth = window.innerWidth; + const clientWidth = document.body.clientWidth; + const paddingRight = innerWidth - clientWidth; + if (innerWidth !== clientWidth) { + document.body.style.paddingRight = paddingRight + "px"; + } + }, + + snackbarShow: (text, showActionFunction = false, duration = 2000, actionText = false) => { + const { position, bgLight, bgDark } = GLOBAL_CONFIG.Snackbar; + const bg = document.documentElement.getAttribute("data-theme") === "light" ? bgLight : bgDark; + const root = document.querySelector(":root"); + root.style.setProperty("--anzhiyu-snackbar-time", duration + "ms"); + + Snackbar.show({ + text: text, + backgroundColor: bg, + onActionClick: showActionFunction, + actionText: actionText, + showAction: actionText, + duration: duration, + pos: position, + customClass: "snackbar-css", + }); + }, + + loadComment: (dom, callback) => { + if ("IntersectionObserver" in window) { + const observerItem = new IntersectionObserver( + entries => { + if (entries[0].isIntersecting) { + callback(); + observerItem.disconnect(); + } + }, + { threshold: [0] } + ); + observerItem.observe(dom); + } else { + callback(); + } + }, + + scrollToDest: (pos, time = 500) => { + const currentPos = window.pageYOffset; + if ("scrollBehavior" in document.documentElement.style) { + window.scrollTo({ + top: pos, + behavior: "smooth", + }); + return; + } + + let start = null; + pos = +pos; + window.requestAnimationFrame(function step(currentTime) { + start = !start ? currentTime : start; + const progress = currentTime - start; + if (currentPos < pos) { + window.scrollTo(0, ((pos - currentPos) * progress) / time + currentPos); + } else { + window.scrollTo(0, currentPos - ((currentPos - pos) * progress) / time); + } + if (progress < time) { + window.requestAnimationFrame(step); + } else { + window.scrollTo(0, pos); + } + }); + }, + + initJustifiedGallery: function (selector) { + const runJustifiedGallery = i => { + if (!anzhiyu.isHidden(i)) { + fjGallery(i, { + itemSelector: ".fj-gallery-item", + rowHeight: i.getAttribute("data-rowHeight"), + gutter: 4, + onJustify: function () { + this.$container.style.opacity = "1"; + }, + }); + } + }; + + if (Array.from(selector).length === 0) runJustifiedGallery(selector); + else + selector.forEach(i => { + runJustifiedGallery(i); + }); + }, + + animateIn: (ele, text) => { + ele.style.display = "block"; + ele.style.animation = text; + }, + + animateOut: (ele, text) => { + ele.addEventListener("animationend", function f() { + ele.style.display = ""; + ele.style.animation = ""; + ele.removeEventListener("animationend", f); + }); + ele.style.animation = text; + }, + + /** + * @param {*} selector + * @param {*} eleType the type of create element + * @param {*} options object key: value + */ + wrap: (selector, eleType, options) => { + const creatEle = document.createElement(eleType); + for (const [key, value] of Object.entries(options)) { + creatEle.setAttribute(key, value); + } + selector.parentNode.insertBefore(creatEle, selector); + creatEle.appendChild(selector); + }, + + isHidden: ele => ele.offsetHeight === 0 && ele.offsetWidth === 0, + + getEleTop: ele => { + let actualTop = ele.offsetTop; + let current = ele.offsetParent; + + while (current !== null) { + actualTop += current.offsetTop; + current = current.offsetParent; + } + + return actualTop; + }, + + loadLightbox: ele => { + const service = GLOBAL_CONFIG.lightbox; + + if (service === "mediumZoom") { + const zoom = mediumZoom(ele); + zoom.on("open", e => { + const photoBg = document.documentElement.getAttribute("data-theme") === "dark" ? "#121212" : "#fff"; + zoom.update({ + background: photoBg, + }); + }); + } + + if (service === "fancybox") { + Array.from(ele).forEach(i => { + if (i.parentNode.tagName !== "A") { + const dataSrc = i.dataset.lazySrc || i.src; + const dataCaption = i.title || i.alt || ""; + anzhiyu.wrap(i, "a", { + href: dataSrc, + "data-fancybox": "gallery", + "data-caption": dataCaption, + "data-thumb": dataSrc, + }); + } + }); + + if (!window.fancyboxRun) { + Fancybox.bind("[data-fancybox]", { + Hash: false, + Thumbs: { + autoStart: false, + }, + }); + window.fancyboxRun = true; + } + } + }, + + setLoading: { + add: ele => { + const html = ` +
    +
    +
    +
    +
    + `; + ele.insertAdjacentHTML("afterend", html); + }, + remove: ele => { + ele.nextElementSibling.remove(); + }, + }, + + updateAnchor: anchor => { + if (anchor !== window.location.hash) { + if (!anchor) anchor = location.pathname; + const title = GLOBAL_CONFIG_SITE.title; + window.history.replaceState( + { + url: location.href, + title, + }, + title, + anchor + ); + } + }, + + getScrollPercent: (currentTop, ele) => { + const docHeight = ele.clientHeight; + const winHeight = document.documentElement.clientHeight; + const headerHeight = ele.offsetTop; + const contentMath = + docHeight > winHeight ? docHeight - winHeight : document.documentElement.scrollHeight - winHeight; + const scrollPercent = (currentTop - headerHeight) / contentMath; + const scrollPercentRounded = Math.round(scrollPercent * 100); + const percentage = scrollPercentRounded > 100 ? 100 : scrollPercentRounded <= 0 ? 0 : scrollPercentRounded; + return percentage; + }, + + addGlobalFn: (key, fn, name = false, parent = window) => { + const globalFn = parent.globalFn || {}; + const keyObj = globalFn[key] || {}; + + if (name && keyObj[name]) return; + + name = name || Object.keys(keyObj).length; + keyObj[name] = fn; + globalFn[key] = keyObj; + parent.globalFn = globalFn; + }, + + addEventListenerPjax: (ele, event, fn, option = false) => { + ele.addEventListener(event, fn, option); + anzhiyu.addGlobalFn("pjax", () => { + ele.removeEventListener(event, fn, option); + }); + }, + + removeGlobalFnEvent: (key, parent = window) => { + const { globalFn = {} } = parent; + const keyObj = globalFn[key] || {}; + const keyArr = Object.keys(keyObj); + if (!keyArr.length) return; + keyArr.forEach(i => { + keyObj[i](); + }); + delete parent.globalFn[key]; + }, + + //更改主题色 + changeThemeMetaColor: function (color) { + // console.info(`%c ${color}`, `font-size:36px;color:${color};`); + if (themeColorMeta !== null) { + themeColorMeta.setAttribute("content", color); + } + }, + + //顶栏自适应主题色 + initThemeColor: function () { + let themeColor = getComputedStyle(document.documentElement) + .getPropertyValue("--anzhiyu-bar-background") + .trim() + .replace('"', "") + .replace('"', ""); + const currentTop = window.scrollY || document.documentElement.scrollTop; + if (currentTop > 26) { + if (anzhiyu.is_Post()) { + themeColor = getComputedStyle(document.documentElement) + .getPropertyValue("--anzhiyu-meta-theme-post-color") + .trim() + .replace('"', "") + .replace('"', ""); + } + if (themeColorMeta.getAttribute("content") === themeColor) return; + this.changeThemeMetaColor(themeColor); + } else { + if (themeColorMeta.getAttribute("content") === themeColor) return; + this.changeThemeMetaColor(themeColor); + } + }, + //是否是文章页 + is_Post: function () { + var url = window.location.href; //获取url + if (url.indexOf("/posts/") >= 0) { + //判断url地址中是否包含code字符串 + return true; + } else { + return false; + } + }, + //监测是否在页面开头 + addNavBackgroundInit: function () { + var scrollTop = 0, + bodyScrollTop = 0, + documentScrollTop = 0; + if ($bodyWrap) { + bodyScrollTop = $bodyWrap.scrollTop; + } + if (document.documentElement) { + documentScrollTop = document.documentElement.scrollTop; + } + scrollTop = bodyScrollTop - documentScrollTop > 0 ? bodyScrollTop : documentScrollTop; + + if (scrollTop != 0) { + pageHeaderEl.classList.add("nav-fixed"); + pageHeaderEl.classList.add("nav-visible"); + } + }, + // 下载图片 + downloadImage: function (imgsrc, name) { + //下载图片地址和图片名 + rm.hideRightMenu(); + if (rm.downloadimging == false) { + rm.downloadimging = true; + anzhiyu.snackbarShow("正在下载中,请稍后", false, 10000); + setTimeout(function () { + let image = new Image(); + // 解决跨域 Canvas 污染问题 + image.setAttribute("crossOrigin", "anonymous"); + image.onload = function () { + let canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + let context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, image.width, image.height); + let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据 + let a = document.createElement("a"); // 生成一个a元素 + let event = new MouseEvent("click"); // 创建一个单击事件 + a.download = name || "photo"; // 设置图片名称 + a.href = url; // 将生成的URL设置为a.href属性 + a.dispatchEvent(event); // 触发a的单击事件 + }; + image.src = imgsrc; + anzhiyu.snackbarShow("图片已添加盲水印,请遵守版权协议"); + rm.downloadimging = false; + }, "10000"); + } else { + anzhiyu.snackbarShow("有正在进行中的下载,请稍后再试"); + } + }, + //禁止图片右键单击 + stopImgRightDrag: function () { + var img = document.getElementsByTagName("img"); + for (var i = 0; i < img.length; i++) { + img[i].addEventListener("dragstart", function () { + return false; + }); + } + }, + //滚动到指定id + scrollTo: function (id) { + var domTop = document.querySelector(id).offsetTop; + window.scrollTo(0, domTop - 80); + }, + //隐藏侧边栏 + hideAsideBtn: () => { + // Hide aside + const $htmlDom = document.documentElement.classList; + $htmlDom.contains("hide-aside") + ? saveToLocal.set("aside-status", "show", 2) + : saveToLocal.set("aside-status", "hide", 2); + $htmlDom.toggle("hide-aside"); + $htmlDom.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + }, + // 热评切换 + switchCommentBarrage: function () { + let commentBarrage = document.querySelector(".comment-barrage"); + if (commentBarrage) { + if (window.getComputedStyle(commentBarrage).display === "flex") { + commentBarrage.style.display = "none"; + anzhiyu.snackbarShow("✨ 已关闭评论弹幕"); + document.querySelector(".menu-commentBarrage-text").textContent = "显示热评"; + document.querySelector("#consoleCommentBarrage").classList.remove("on"); + localStorage.setItem("commentBarrageSwitch", "false"); + } else { + commentBarrage.style.display = "flex"; + document.querySelector(".menu-commentBarrage-text").textContent = "关闭热评"; + document.querySelector("#consoleCommentBarrage").classList.add("on"); + anzhiyu.snackbarShow("✨ 已开启评论弹幕"); + localStorage.removeItem("commentBarrageSwitch"); + } + } + rm && rm.hideRightMenu(); + }, + initPaginationObserver: () => { + const commentElement = document.getElementById("post-comment"); + const paginationElement = document.getElementById("pagination"); + + if (commentElement && paginationElement) { + new IntersectionObserver(entries => { + const commentBarrage = document.querySelector(".comment-barrage"); + + entries.forEach(entry => { + if (entry.isIntersecting) { + paginationElement.classList.add("show-window"); + if (commentBarrage) { + commentBarrage.style.bottom = "-200px"; + } + } else { + paginationElement.classList.remove("show-window"); + if (commentBarrage) { + commentBarrage.style.bottom = "0px"; + } + } + }); + }).observe(commentElement); + } + }, + // 初始化即刻 + initIndexEssay: function () { + if (!document.getElementById("bbTimeList")) return; + setTimeout(() => { + let essay_bar_swiper = new Swiper(".essay_bar_swiper_container", { + passiveListeners: true, + direction: "vertical", + loop: true, + autoplay: { + disableOnInteraction: true, + delay: 3000, + }, + mousewheel: true, + }); + + let essay_bar_comtainer = document.getElementById("bbtalk"); + if (essay_bar_comtainer !== null) { + essay_bar_comtainer.onmouseenter = function () { + essay_bar_swiper.autoplay.stop(); + }; + essay_bar_comtainer.onmouseleave = function () { + essay_bar_swiper.autoplay.start(); + }; + } + }, 100); + }, + scrollByMouseWheel: function ($list, $target) { + const scrollHandler = function (e) { + $list.scrollLeft -= e.wheelDelta / 2; + e.preventDefault(); + }; + $list.addEventListener("mousewheel", scrollHandler, { passive: false }); + if ($target) { + $target.classList.add("selected"); + $list.scrollLeft = $target.offsetLeft - $list.offsetLeft - ($list.offsetWidth - $target.offsetWidth) / 2; + } + }, + // catalog激活 + catalogActive: function () { + const $list = document.getElementById("catalog-list"); + if ($list) { + const pathname = decodeURIComponent(window.location.pathname); + const catalogListItems = $list.querySelectorAll(".catalog-list-item"); + + let $catalog = null; + catalogListItems.forEach(item => { + if (pathname.startsWith(item.id)) { + $catalog = item; + return; + } + }); + + anzhiyu.scrollByMouseWheel($list, $catalog); + } + }, + // Page Tag 激活 + tagsPageActive: function () { + const $list = document.getElementById("tag-page-tags"); + if ($list) { + const $tagPageTags = document.getElementById(decodeURIComponent(window.location.pathname)); + anzhiyu.scrollByMouseWheel($list, $tagPageTags); + } + }, + // 修改时间显示"最近" + diffDate: function (d, more = false, simple = false) { + const dateNow = new Date(); + const datePost = new Date(d); + const dateDiff = dateNow.getTime() - datePost.getTime(); + const minute = 1000 * 60; + const hour = minute * 60; + const day = hour * 24; + const month = day * 30; + + let result; + if (more) { + const monthCount = dateDiff / month; + const dayCount = dateDiff / day; + const hourCount = dateDiff / hour; + const minuteCount = dateDiff / minute; + + if (monthCount >= 1) { + result = datePost.toLocaleDateString().replace(/\//g, "-"); + } else if (dayCount >= 1) { + result = parseInt(dayCount) + " " + GLOBAL_CONFIG.date_suffix.day; + } else if (hourCount >= 1) { + result = parseInt(hourCount) + " " + GLOBAL_CONFIG.date_suffix.hour; + } else if (minuteCount >= 1) { + result = parseInt(minuteCount) + " " + GLOBAL_CONFIG.date_suffix.min; + } else { + result = GLOBAL_CONFIG.date_suffix.just; + } + } else if (simple) { + const monthCount = dateDiff / month; + const dayCount = dateDiff / day; + const hourCount = dateDiff / hour; + const minuteCount = dateDiff / minute; + if (monthCount >= 1) { + result = datePost.toLocaleDateString().replace(/\//g, "-"); + } else if (dayCount >= 1 && dayCount <= 3) { + result = parseInt(dayCount) + " " + GLOBAL_CONFIG.date_suffix.day; + } else if (dayCount > 3) { + result = datePost.getMonth() + 1 + "/" + datePost.getDate(); + } else if (hourCount >= 1) { + result = parseInt(hourCount) + " " + GLOBAL_CONFIG.date_suffix.hour; + } else if (minuteCount >= 1) { + result = parseInt(minuteCount) + " " + GLOBAL_CONFIG.date_suffix.min; + } else { + result = GLOBAL_CONFIG.date_suffix.just; + } + } else { + result = parseInt(dateDiff / day); + } + return result; + }, + + // 修改即刻中的时间显示 + changeTimeInEssay: function () { + document.querySelector("#bber") && + document.querySelectorAll("#bber time").forEach(function (e) { + var t = e, + datetime = t.getAttribute("datetime"); + (t.innerText = anzhiyu.diffDate(datetime, true)), (t.style.display = "inline"); + }); + }, + // 修改相册集中的时间 + changeTimeInAlbumDetail: function () { + document.querySelector("#album_detail") && + document.querySelectorAll("#album_detail time").forEach(function (e) { + var t = e, + datetime = t.getAttribute("datetime"); + (t.innerText = anzhiyu.diffDate(datetime, true)), (t.style.display = "inline"); + }); + }, + // 刷新瀑布流 + reflashEssayWaterFall: function () { + const waterfallEl = document.getElementById("waterfall"); + if (waterfallEl) { + setTimeout(function () { + waterfall(waterfallEl); + waterfallEl.classList.add("show"); + }, 800); + } + }, + sayhi: function () { + const $sayhiEl = document.getElementById("author-info__sayhi"); + + const getTimeState = () => { + const hour = new Date().getHours(); + let message = ""; + + if (hour >= 0 && hour <= 5) { + message = "睡个好觉,保证精力充沛"; + } else if (hour > 5 && hour <= 10) { + message = "一日之计在于晨"; + } else if (hour > 10 && hour <= 14) { + message = "吃饱了才有力气干活"; + } else if (hour > 14 && hour <= 18) { + message = "集中精力,攻克难关"; + } else if (hour > 18 && hour <= 24) { + message = "不要太劳累了,早睡更健康"; + } + + return message; + }; + + if ($sayhiEl) { + $sayhiEl.innerHTML = getTimeState(); + } + }, + + // 友链注入预设评论 + addFriendLink() { + var input = document.getElementsByClassName("el-textarea__inner")[0]; + if (!input) return; + const evt = new Event("input", { cancelable: true, bubbles: true }); + const defaultPlaceholder = + "昵称(请勿包含博客等字样):\n网站地址(要求博客地址,请勿提交个人主页):\n头像图片url(请提供尽可能清晰的图片,我会上传到我自己的图床):\n描述:\n站点截图(可选):\n"; + input.value = this.getConfigIfPresent(GLOBAL_CONFIG.linkPageTop, "addFriendPlaceholder", defaultPlaceholder); + input.dispatchEvent(evt); + input.focus(); + input.setSelectionRange(-1, -1); + }, + // 获取配置,如果为空则返回默认值 + getConfigIfPresent: function (config, configKey, defaultValue) { + if (!config) return defaultValue; + if (!config.hasOwnProperty(configKey)) return defaultValue; + if (!config[configKey]) return defaultValue; + return config[configKey]; + }, + //切换音乐播放状态 + musicToggle: function (changePaly = true) { + if (!anzhiyu_musicFirst) { + anzhiyu.musicBindEvent(); + anzhiyu_musicFirst = true; + } + let msgPlay = '播放音乐'; + let msgPause = '暂停音乐'; + if (anzhiyu_musicPlaying) { + navMusicEl.classList.remove("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPlay; + document.getElementById("nav-music-hoverTips").innerHTML = "音乐已暂停"; + document.querySelector("#consoleMusic").classList.remove("on"); + anzhiyu_musicPlaying = false; + navMusicEl.classList.remove("stretch"); + } else { + navMusicEl.classList.add("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPause; + document.querySelector("#consoleMusic").classList.add("on"); + anzhiyu_musicPlaying = true; + navMusicEl.classList.add("stretch"); + } + if (changePaly) document.querySelector("#nav-music meting-js").aplayer.toggle(); + rm && rm.hideRightMenu(); + }, + // 音乐伸缩 + musicTelescopic: function () { + if (navMusicEl.classList.contains("stretch")) { + navMusicEl.classList.remove("stretch"); + } else { + navMusicEl.classList.add("stretch"); + } + }, + + //音乐上一曲 + musicSkipBack: function () { + navMusicEl.querySelector("meting-js").aplayer.skipBack(); + rm && rm.hideRightMenu(); + }, + + //音乐下一曲 + musicSkipForward: function () { + navMusicEl.querySelector("meting-js").aplayer.skipForward(); + rm && rm.hideRightMenu(); + }, + + //获取音乐中的名称 + musicGetName: function () { + var x = document.querySelector(".aplayer-title"); + var arr = []; + for (var i = x.length - 1; i >= 0; i--) { + arr[i] = x[i].innerText; + } + return arr[0]; + }, + + //初始化console图标 + initConsoleState: function () { + //初始化隐藏边栏 + const $htmlDomClassList = document.documentElement.classList; + $htmlDomClassList.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + }, + + // 显示打赏中控台 + rewardShowConsole: function () { + // 判断是否为赞赏打开控制台 + consoleEl.classList.add("reward-show"); + anzhiyu.initConsoleState(); + }, + // 显示中控台 + showConsole: function () { + consoleEl.classList.add("show"); + anzhiyu.initConsoleState(); + }, + + //隐藏中控台 + hideConsole: function () { + if (consoleEl.classList.contains("show")) { + // 如果是一般控制台,就关闭一般控制台 + consoleEl.classList.remove("show"); + } else if (consoleEl.classList.contains("reward-show")) { + // 如果是打赏控制台,就关闭打赏控制台 + consoleEl.classList.remove("reward-show"); + } + // 获取center-console元素 + const centerConsole = document.getElementById("center-console"); + + // 检查center-console是否被选中 + if (centerConsole.checked) { + // 取消选中状态 + centerConsole.checked = false; + } + }, + // 取消加载动画 + hideLoading: function () { + document.getElementById("loading-box").classList.add("loaded"); + }, + // 将音乐缓存播放 + cacheAndPlayMusic() { + let data = localStorage.getItem("musicData"); + if (data) { + data = JSON.parse(data); + const currentTime = new Date().getTime(); + if (currentTime - data.timestamp < 24 * 60 * 60 * 1000) { + // 如果缓存的数据没有过期,直接使用 + anzhiyu.playMusic(data.songs); + return; + } + } + + // 否则重新从服务器获取数据 + fetch("/json/music.json") + .then(response => response.json()) + .then(songs => { + const cacheData = { + timestamp: new Date().getTime(), + songs: songs, + }; + localStorage.setItem("musicData", JSON.stringify(cacheData)); + anzhiyu.playMusic(songs); + }); + }, + // 播放音乐 + playMusic(songs) { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const randomIndex = Math.floor(Math.random() * songs.length); + const randomSong = songs[randomIndex]; + const allAudios = metingAplayer.list.audios; + if (!selectRandomSong.includes(randomSong.name)) { + // 如果随机到的歌曲已经未被随机到过,就添加进metingAplayer.list + metingAplayer.list.add([randomSong]); + // 播放最后一首(因为是添加到了最后) + metingAplayer.list.switch(allAudios.length); + // 添加到已被随机的歌曲列表 + selectRandomSong.push(randomSong.name); + } else { + // 随机到的歌曲已经在播放列表中了 + // 直接继续随机直到随机到没有随机过的歌曲,如果全部随机过了就切换到对应的歌曲播放即可 + let songFound = false; + while (!songFound) { + const newRandomIndex = Math.floor(Math.random() * songs.length); + const newRandomSong = songs[newRandomIndex]; + if (!selectRandomSong.includes(newRandomSong.name)) { + metingAplayer.list.add([newRandomSong]); + metingAplayer.list.switch(allAudios.length); + selectRandomSong.push(newRandomSong.name); + songFound = true; + } + // 如果全部歌曲都已被随机过,跳出循环 + if (selectRandomSong.length === songs.length) { + break; + } + } + if (!songFound) { + // 如果全部歌曲都已被随机过,切换到对应的歌曲播放 + const palyMusicIndex = allAudios.findIndex(song => song.name === randomSong.name); + if (palyMusicIndex != -1) metingAplayer.list.switch(palyMusicIndex); + } + } + + console.info("已随机歌曲:", selectRandomSong, "本次随机歌曲:", randomSong.name); + }, + // 音乐节目切换背景 + changeMusicBg: function (isChangeBg = true) { + const anMusicBg = document.getElementById("an_music_bg"); + + if (isChangeBg) { + // player listswitch 会进入此处 + const musiccover = document.querySelector("#anMusic-page .aplayer-pic"); + anMusicBg.style.backgroundImage = musiccover.style.backgroundImage; + } else { + // 第一次进入,绑定事件,改背景 + let timer = setInterval(() => { + const musiccover = document.querySelector("#anMusic-page .aplayer-pic"); + // 确保player加载完成 + if (musiccover) { + clearInterval(timer); + // 绑定事件 + anzhiyu.addEventListenerMusic(); + // 确保第一次能够正确替换背景 + anzhiyu.changeMusicBg(); + + // 暂停nav的音乐 + if ( + document.querySelector("#nav-music meting-js").aplayer && + !document.querySelector("#nav-music meting-js").aplayer.audio.paused + ) { + anzhiyu.musicToggle(); + } + } + }, 100); + } + }, + // 获取自定义播放列表 + getCustomPlayList: function () { + if (!window.location.pathname.startsWith("/music/")) { + return; + } + const urlParams = new URLSearchParams(window.location.search); + const userId = "8152976493"; + const userServer = "netease"; + const anMusicPageMeting = document.getElementById("anMusic-page-meting"); + if (urlParams.get("id") && urlParams.get("server")) { + const id = urlParams.get("id"); + const server = urlParams.get("server"); + anMusicPageMeting.innerHTML = ``; + } else { + anMusicPageMeting.innerHTML = ``; + } + anzhiyu.changeMusicBg(false); + }, + //隐藏今日推荐 + hideTodayCard: function () { + if (document.getElementById("todayCard")) { + document.getElementById("todayCard").classList.add("hide"); + const topGroup = document.querySelector(".topGroup"); + const recentPostItems = topGroup.querySelectorAll(".recent-post-item"); + recentPostItems.forEach(item => { + item.style.display = "flex"; + }); + } + }, + + // 监听音乐背景改变 + addEventListenerMusic: function () { + const anMusicPage = document.getElementById("anMusic-page"); + const aplayerIconMenu = anMusicPage.querySelector(".aplayer-info .aplayer-time .aplayer-icon-menu"); + const anMusicBtnGetSong = anMusicPage.querySelector("#anMusicBtnGetSong"); + const anMusicRefreshBtn = anMusicPage.querySelector("#anMusicRefreshBtn"); + const anMusicSwitchingBtn = anMusicPage.querySelector("#anMusicSwitching"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + //初始化音量 + metingAplayer.volume(0.8, true); + metingAplayer.on("loadeddata", function () { + anzhiyu.changeMusicBg(); + }); + + aplayerIconMenu.addEventListener("click", function () { + document.getElementById("menu-mask").style.display = "block"; + document.getElementById("menu-mask").style.animation = "0.5s ease 0s 1 normal none running to_show"; + anMusicPage.querySelector(".aplayer.aplayer-withlist .aplayer-list").style.opacity = "1"; + }); + + function anMusicPageMenuAask() { + if (window.location.pathname != "/music/") { + document.getElementById("menu-mask").removeEventListener("click", anMusicPageMenuAask); + return; + } + + anMusicPage.querySelector(".aplayer-list").classList.remove("aplayer-list-hide"); + } + + document.getElementById("menu-mask").addEventListener("click", anMusicPageMenuAask); + + // 监听增加单曲按钮 + anMusicBtnGetSong.addEventListener("click", () => { + if (changeMusicListFlag) { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const allAudios = metingAplayer.list.audios; + const randomIndex = Math.floor(Math.random() * allAudios.length); + // 随机播放一首 + metingAplayer.list.switch(randomIndex); + } else { + anzhiyu.cacheAndPlayMusic(); + } + }); + anMusicRefreshBtn.addEventListener("click", () => { + localStorage.removeItem("musicData"); + anzhiyu.snackbarShow("已移除相关缓存歌曲"); + }); + anMusicSwitchingBtn.addEventListener("click", () => { + anzhiyu.changeMusicList(); + }); + + // 监听键盘事件 + //空格控制音乐 + document.addEventListener("keydown", function (event) { + //暂停开启音乐 + if (event.code === "Space") { + event.preventDefault(); + metingAplayer.toggle(); + } + //切换下一曲 + if (event.keyCode === 39) { + event.preventDefault(); + metingAplayer.skipForward(); + } + //切换上一曲 + if (event.keyCode === 37) { + event.preventDefault(); + metingAplayer.skipBack(); + } + //增加音量 + if (event.keyCode === 38) { + if (musicVolume <= 1) { + musicVolume += 0.1; + metingAplayer.volume(musicVolume, true); + } + } + //减小音量 + if (event.keyCode === 40) { + if (musicVolume >= 0) { + musicVolume += -0.1; + metingAplayer.volume(musicVolume, true); + } + } + }); + }, + // 切换歌单 + changeMusicList: async function () { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const currentTime = new Date().getTime(); + const cacheData = JSON.parse(localStorage.getItem("musicData")) || { timestamp: 0 }; + let songs = []; + + if (changeMusicListFlag) { + songs = defaultPlayMusicList; + } else { + // 保存当前默认播放列表,以使下次可以切换回来 + defaultPlayMusicList = metingAplayer.list.audios; + // 如果缓存的数据没有过期,直接使用 + if (currentTime - cacheData.timestamp < 24 * 60 * 60 * 1000) { + songs = cacheData.songs; + } else { + // 否则重新从服务器获取数据 + const response = await fetch("/json/music.json"); + songs = await response.json(); + cacheData.timestamp = currentTime; + cacheData.songs = songs; + localStorage.setItem("musicData", JSON.stringify(cacheData)); + } + } + + // 清除当前播放列表并添加新的歌曲 + metingAplayer.list.clear(); + metingAplayer.list.add(songs); + + // 切换标志位 + changeMusicListFlag = !changeMusicListFlag; + }, + // 控制台音乐列表监听 + addEventListenerConsoleMusicList: function () { + const navMusic = document.getElementById("nav-music"); + if (!navMusic) return; + navMusic.addEventListener("click", e => { + const aplayerList = navMusic.querySelector(".aplayer-list"); + const listBtn = navMusic.querySelector( + "div.aplayer-info > div.aplayer-controller > div.aplayer-time.aplayer-time-narrow > button.aplayer-icon.aplayer-icon-menu svg" + ); + if (e.target != listBtn && aplayerList.classList.contains("aplayer-list-hide")) { + aplayerList.classList.remove("aplayer-list-hide"); + } + }); + }, + // 监听按键 + toPage: function () { + var toPageText = document.getElementById("toPageText"), + toPageButton = document.getElementById("toPageButton"), + pageNumbers = document.querySelectorAll(".page-number"), + lastPageNumber = Number(pageNumbers[pageNumbers.length - 1].innerHTML), + pageNumber = Number(toPageText.value); + + if (!isNaN(pageNumber) && pageNumber >= 1 && Number.isInteger(pageNumber)) { + var url = "/page/" + (pageNumber > lastPageNumber ? lastPageNumber : pageNumber) + "/"; + toPageButton.href = pageNumber === 1 ? "/" : url; + } else { + toPageButton.href = "javascript:void(0);"; + } + }, + + //删除多余的class + removeBodyPaceClass: function () { + document.body.className = "pace-done"; + }, + // 修改body的type类型以适配css + setValueToBodyType: function () { + const input = document.getElementById("page-type"); // 获取input元素 + const value = input.value; // 获取input的value值 + document.body.dataset.type = value; // 将value值赋值到body的type属性上 + }, + //匿名评论 + addRandomCommentInfo: function () { + // 从形容词数组中随机取一个值 + const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)]; + + // 从蔬菜水果动物名字数组中随机取一个值 + const randomName = vegetablesAndFruits[Math.floor(Math.random() * vegetablesAndFruits.length)]; + + // 将两个值组合成一个字符串 + const name = `${randomAdjective}${randomName}`; + + function dr_js_autofill_commentinfos() { + var lauthor = [ + "#author", + "input[name='comname']", + "#inpName", + "input[name='author']", + "#ds-dialog-name", + "#name", + "input[name='nick']", + "#comment_author", + ], + lmail = [ + "#mail", + "#email", + "input[name='commail']", + "#inpEmail", + "input[name='email']", + "#ds-dialog-email", + "input[name='mail']", + "#comment_email", + ], + lurl = [ + "#url", + "input[name='comurl']", + "#inpHomePage", + "#ds-dialog-url", + "input[name='url']", + "input[name='website']", + "#website", + "input[name='link']", + "#comment_url", + ]; + for (var i = 0; i < lauthor.length; i++) { + var author = document.querySelector(lauthor[i]); + if (author != null) { + author.value = name; + author.dispatchEvent(new Event("input")); + author.dispatchEvent(new Event("change")); + break; + } + } + for (var j = 0; j < lmail.length; j++) { + var mail = document.querySelector(lmail[j]); + if (mail != null) { + mail.value = visitorMail; + mail.dispatchEvent(new Event("input")); + mail.dispatchEvent(new Event("change")); + break; + } + } + return !1; + } + + dr_js_autofill_commentinfos(); + var input = document.getElementsByClassName("el-textarea__inner")[0]; + input.focus(); + input.setSelectionRange(-1, -1); + }, + + // 跳转开往 + totraveling: function () { + anzhiyu.snackbarShow( + "即将跳转到「开往」项目的成员博客,不保证跳转网站的安全性和可用性", + element => { + element.style.opacity = 0; + travellingsTimer && clearTimeout(travellingsTimer); + }, + 5000, + "取消" + ); + travellingsTimer = setTimeout(function () { + window.open("https://www.travellings.cn/go.html", "_blank"); + }, "5000"); + }, + + // 工具函数替换字符串 + replaceAll: function (e, n, t) { + return e.split(n).join(t); + }, + + // 音乐绑定事件 + musicBindEvent: function () { + document.querySelector("#nav-music .aplayer-music").addEventListener("click", function () { + anzhiyu.musicTelescopic(); + }); + document.querySelector("#nav-music .aplayer-button").addEventListener("click", function () { + anzhiyu.musicToggle(false); + }); + }, + + // 判断是否是移动端 + hasMobile: function () { + let isMobile = false; + if ( + navigator.userAgent.match( + /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i + ) || + document.body.clientWidth < 800 + ) { + // 移动端 + isMobile = true; + } + return isMobile; + }, + + // 创建二维码 + qrcodeCreate: function () { + if (document.getElementById("qrcode")) { + document.getElementById("qrcode").innerHTML = ""; + var qrcode = new QRCode(document.getElementById("qrcode"), { + text: window.location.href, + width: 250, + height: 250, + colorDark: "#000", + colorLight: "#ffffff", + correctLevel: QRCode.CorrectLevel.H, + }); + } + }, + + // 判断是否在el内 + isInViewPortOfOne: function (el) { + if (!el) return; + const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + const offsetTop = el.offsetTop; + const scrollTop = document.documentElement.scrollTop; + const top = offsetTop - scrollTop; + return top <= viewPortHeight; + }, + //添加赞赏蒙版 + addRewardMask: function () { + if (!document.querySelector(".reward-main")) return; + document.querySelector(".reward-main").style.display = "flex"; + document.querySelector(".reward-main").style.zIndex = "102"; + document.getElementById("quit-box").style.display = "flex"; + }, + // 移除赞赏蒙版 + removeRewardMask: function () { + if (!document.querySelector(".reward-main")) return; + document.querySelector(".reward-main").style.display = "none"; + document.getElementById("quit-box").style.display = "none"; + }, + + keyboardToggle: function () { + const isKeyboardOn = anzhiyu_keyboard; + + if (isKeyboardOn) { + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + consoleKeyboard.classList.remove("on"); + anzhiyu_keyboard = false; + } else { + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + consoleKeyboard.classList.add("on"); + anzhiyu_keyboard = true; + } + + localStorage.setItem("keyboardToggle", isKeyboardOn ? "false" : "true"); + }, + rightMenuToggle: function () { + if (window.oncontextmenu) { + window.oncontextmenu = null; + } else if (!window.oncontextmenu && oncontextmenuFunction) { + window.oncontextmenu = oncontextmenuFunction; + } + }, + switchConsole: () => { + // switch console + const consoleEl = document.getElementById("console"); + //初始化隐藏边栏 + const $htmlDom = document.documentElement.classList; + $htmlDom.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + if (consoleEl.classList.contains("show")) { + consoleEl.classList.remove("show"); + } else { + consoleEl.classList.add("show"); + } + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + + if (consoleKeyboard) { + if (localStorage.getItem("keyboardToggle") === "true") { + consoleKeyboard.classList.add("on"); + anzhiyu_keyboard = true; + } else { + consoleKeyboard.classList.remove("on"); + anzhiyu_keyboard = false; + } + } + }, + // 定义 intersectionObserver 函数,并接收两个可选参数 + intersectionObserver: function (enterCallback, leaveCallback) { + let observer; + return () => { + if (!observer) { + observer = new IntersectionObserver(entries => { + entries.forEach(entry => { + if (entry.intersectionRatio > 0) { + enterCallback?.(); + } else { + leaveCallback?.(); + } + }); + }); + } else { + // 如果 observer 对象已经存在,则先取消对之前元素的观察 + observer.disconnect(); + } + return observer; + }; + }, + // CategoryBar滚动 + scrollCategoryBarToRight: function () { + // 获取需要操作的元素 + const items = document.getElementById("catalog-list"); + const nextButton = document.getElementById("category-bar-next"); + + // 检查元素是否存在 + if (items && nextButton) { + const itemsWidth = items.clientWidth; + + // 判断是否已经滚动到最右侧 + if (items.scrollLeft + items.clientWidth + 1 >= items.scrollWidth) { + // 滚动到初始位置并更新按钮内容 + items.scroll({ + left: 0, + behavior: "smooth", + }); + nextButton.innerHTML = ''; + } else { + // 滚动到下一个视图 + items.scrollBy({ + left: itemsWidth, + behavior: "smooth", + }); + } + } else { + console.error("Element(s) not found: 'catalog-list' and/or 'category-bar-next'."); + } + }, + // 分类条 + categoriesBarActive: function () { + const urlinfo = decodeURIComponent(window.location.pathname); + const $categoryBar = document.getElementById("category-bar"); + if (!$categoryBar) return; + + if (urlinfo === "/") { + $categoryBar.querySelector("#首页").classList.add("select"); + } else { + const pattern = /\/categories\/.*?\//; + const patbool = pattern.test(urlinfo); + if (!patbool) return; + + const nowCategorie = urlinfo.split("/")[2]; + $categoryBar.querySelector(`#${nowCategorie}`).classList.add("select"); + } + }, + topCategoriesBarScroll: function () { + const $categoryBarItems = document.getElementById("category-bar-items"); + if (!$categoryBarItems) return; + + $categoryBarItems.addEventListener("mousewheel", function (e) { + const v = -e.wheelDelta / 2; + this.scrollLeft += v; + e.preventDefault(); + }); + }, + // 切换菜单显示热评 + switchRightClickMenuHotReview: function () { + const postComment = document.getElementById("post-comment"); + const menuCommentBarrageDom = document.getElementById("menu-commentBarrage"); + if (postComment) { + menuCommentBarrageDom.style.display = "flex"; + } else { + menuCommentBarrageDom.style.display = "none"; + } + }, + // 切换作者卡片状态文字 + changeSayHelloText: function () { + const greetings = GLOBAL_CONFIG.authorStatus.skills; + + const authorInfoSayHiElement = document.getElementById("author-info__sayhi"); + + // 如果只有一个问候语,设置为默认值 + if (greetings.length === 1) { + authorInfoSayHiElement.textContent = greetings[0]; + return; + } + + let lastSayHello = authorInfoSayHiElement.textContent; + + let randomGreeting = lastSayHello; + while (randomGreeting === lastSayHello) { + randomGreeting = greetings[Math.floor(Math.random() * greetings.length)]; + } + authorInfoSayHiElement.textContent = randomGreeting; + }, +}; + +const anzhiyuPopupManager = { + queue: [], + processing: false, + Jump: false, + + enqueuePopup(title, tip, url, duration = 3000) { + this.queue.push({ title, tip, url, duration }); + if (!this.processing) { + this.processQueue(); + } + }, + + processQueue() { + if (this.queue.length > 0 && !this.processing) { + this.processing = true; + const { title, tip, url, duration } = this.queue.shift(); + this.popupShow(title, tip, url, duration); + } + }, + + popupShow(title, tip, url, duration) { + const popupWindow = document.getElementById("popup-window"); + if (!popupWindow) return; + const windowTitle = popupWindow.querySelector(".popup-window-title"); + const windowContent = popupWindow.querySelector(".popup-window-content"); + const cookiesTip = windowContent.querySelector(".popup-tip"); + if (popupWindow.classList.contains("show-popup-window")) { + popupWindow.classList.add("popup-hide"); + } + + // 等待上一个弹窗完全消失 + setTimeout(() => { + // 移除之前的点击事件处理程序 + popupWindow.removeEventListener("click", this.clickEventHandler); + if (url) { + if (window.pjax) { + this.clickEventHandler = event => { + event.preventDefault(); + pjax.loadUrl(url); + popupWindow.classList.remove("show-popup-window"); + popupWindow.classList.remove("popup-hide"); + this.Jump = true; + + // 处理队列中的下一个弹出窗口 + this.processing = false; + this.processQueue(); + }; + + popupWindow.addEventListener("click", this.clickEventHandler); + } else { + this.clickEventHandler = () => { + window.location.href = url; + }; + popupWindow.addEventListener("click", this.clickEventHandler); + } + if (popupWindow.classList.contains("no-url")) { + popupWindow.classList.remove("no-url"); + } + } else { + if (!popupWindow.classList.contains("no-url")) { + popupWindow.classList.add("no-url"); + } + + this.clickEventHandler = () => { + popupWindow.classList.add("popup-hide"); + setTimeout(() => { + popupWindow.classList.remove("popup-hide"); + popupWindow.classList.remove("show-popup-window"); + }, 1000); + }; + popupWindow.addEventListener("click", this.clickEventHandler); + } + + if (popupWindow.classList.contains("popup-hide")) { + popupWindow.classList.remove("popup-hide"); + } + popupWindow.classList.add("show-popup-window"); + windowTitle.textContent = title; + cookiesTip.textContent = tip; + }, 800); + + setTimeout(() => { + if (url && !this.Jump) { + this.Jump = false; + } + if (!popupWindow.classList.contains("popup-hide") && popupWindow.className != "") { + popupWindow.classList.add("popup-hide"); + } + + // 处理队列中的下一个弹出窗口 + this.processing = false; + this.processQueue(); + }, duration); + }, +}; diff --git a/json/music.json b/json/music.json new file mode 100644 index 0000000000..1e24066f58 --- /dev/null +++ b/json/music.json @@ -0,0 +1 @@ +[{"name":"青花瓷","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/青花瓷/青花瓷.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002eFUFm2XYZ7z_2.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/青花瓷/青花瓷.lrc"},{"name":"稻香","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/稻香/稻香.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002Neh8l0uciQZ_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/稻香/稻香.lrc"},{"name":"晴天","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/晴天/晴天.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000000MkMni19ClKG_3.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/晴天/晴天.lrc"},{"name":"七里香","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/七里香/七里香.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000003DFRzD192KKD_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/七里香/七里香.lrc"},{"name":"花海","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/花海/花海.flac","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002Neh8l0uciQZ_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/花海/花海.lrc"},{"name":"反方向的钟","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/反方向的钟/反方向的钟.flac","cover":"https://y.qq.com/music/photo_new/T002R300x300M000000f01724fd7TH_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/反方向的钟/反方向的钟.lrc"},{"name":"兰亭序","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/兰亭序/兰亭序.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002Neh8l0uciQZ_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/兰亭序/兰亭序.lrc"},{"name":"说好的辛福呢","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/说好的辛福呢/说好的辛福呢.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002Neh8l0uciQZ_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/说好的辛福呢/说好的幸福呢.lrc"},{"name":"等你下课 (with 杨瑞代)","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/等你下课/等你下课.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000003bSL0v4bpKAx_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.1/周杰伦/等你下课/等你下课.lrc"},{"name":"我落泪情绪零碎","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/我落泪情绪零碎/我落泪情绪零碎.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000000bviBl4FjTpO_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/我落泪情绪零碎/我落泪情绪零碎.lrc"},{"name":"听妈妈的话","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/听妈妈的话/听妈妈的话.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002jLGWe16Tf1H_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.2/听妈妈的话/听妈妈的话.lrc"},{"name":"明明就","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/明明就/明明就.flac","cover":"https://y.qq.com/music/photo_new/T002R300x300M000003Ow85E3pnoqi_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/明明就/明明就.lrc"},{"name":"我是如此相信","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/我是如此相信/我是如此相信.flac","cover":"https://y.qq.com/music/photo_new/T002R300x300M000001hGx1Z0so1YX_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music-jay@1.0.1/我是如此相信/我是如此相信.lrc"},{"name":"发如雪","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/发如雪/发如雪.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M0000024bjiL2aocxT_3.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/发如雪/发如雪.lrc"},{"name":"以父之名","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/以父之名/以父之名.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000000MkMni19ClKG_3.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/以父之名/以父之名.lrc"},{"name":"园游会","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/园游会/园游会.flac","cover":"https://y.qq.com/music/photo_new/T002R300x300M000003DFRzD192KKD_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.3/园游会/园游会.lrc"},{"name":"本草纲目","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/本草纲目/本草纲目.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000002jLGWe16Tf1H_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/本草纲目/本草纲目.lrc"},{"name":"龙卷风","artist":"周杰伦","url":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/龙卷风/龙卷风.mp3","cover":"https://y.qq.com/music/photo_new/T002R300x300M000000f01724fd7TH_1.jpg?max_age=2592000","lrc":"https://npm.elemecdn.com/anzhiyu-music@1.0.4/龙卷风/龙卷风.lrc"}] \ No newline at end of file diff --git a/link/index.html b/link/index.html new file mode 100644 index 0000000000..553143e949 --- /dev/null +++ b/link/index.html @@ -0,0 +1,342 @@ +link | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/music/index.html b/music/index.html new file mode 100644 index 0000000000..ca01580bf5 --- /dev/null +++ b/music/index.html @@ -0,0 +1,341 @@ +音乐馆 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000000..7cfee7b94c --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,483 @@ +WaterBoat的博客 - 正因你我生于繁华,弥足之花方显珍贵
    加载头像
    React-常用库
    工具下载
    开发工具 powershell
    hash 和 history 路由的区别
    Effective JavaScript 编写高质量JavaScript代码的68个有效方法
    React 笔记
    Redux 笔记
    React 总结笔记
    实现防抖和节流
    SQL 基础
    引用到评论
    \ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000000..ca795b1d51 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,491 @@ +WaterBoat的博客 - 正因你我生于繁华,弥足之花方显珍贵
    加载头像
    MySQL踩坑记录
    TypeScript 笔记
    Vue 2.0 笔记
    原神抽卡记录抓取
    Vue 3.0 笔记
    Vue 3.0 组合式 API
    引用到评论
    \ No newline at end of file diff --git a/tags/Cypress/index.html b/tags/Cypress/index.html new file mode 100644 index 0000000000..93eea48319 --- /dev/null +++ b/tags/Cypress/index.html @@ -0,0 +1,417 @@ +标签: Cypress | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/JavaScript/index.html b/tags/JavaScript/index.html new file mode 100644 index 0000000000..90407a39b0 --- /dev/null +++ b/tags/JavaScript/index.html @@ -0,0 +1,417 @@ +标签: JavaScript | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/Nuxt/index.html b/tags/Nuxt/index.html new file mode 100644 index 0000000000..10b43441a4 --- /dev/null +++ b/tags/Nuxt/index.html @@ -0,0 +1,417 @@ +标签: Nuxt | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/React/index.html b/tags/React/index.html new file mode 100644 index 0000000000..b3f710c7fb --- /dev/null +++ b/tags/React/index.html @@ -0,0 +1,417 @@ +标签: React | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/Solidity/index.html b/tags/Solidity/index.html new file mode 100644 index 0000000000..f46e179a30 --- /dev/null +++ b/tags/Solidity/index.html @@ -0,0 +1,417 @@ +标签: Solidity | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/TypeScript/index.html b/tags/TypeScript/index.html new file mode 100644 index 0000000000..700feb27e9 --- /dev/null +++ b/tags/TypeScript/index.html @@ -0,0 +1,417 @@ +标签: TypeScript | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/Vue/index.html b/tags/Vue/index.html new file mode 100644 index 0000000000..b616e75259 --- /dev/null +++ b/tags/Vue/index.html @@ -0,0 +1,417 @@ +标签: Vue | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000000..606226ac41 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,417 @@ +tags | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/npm/index.html b/tags/npm/index.html new file mode 100644 index 0000000000..e7f342e64c --- /dev/null +++ b/tags/npm/index.html @@ -0,0 +1,417 @@ +标签: npm | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/shell/index.html b/tags/shell/index.html new file mode 100644 index 0000000000..6c5506d07b --- /dev/null +++ b/tags/shell/index.html @@ -0,0 +1,417 @@ +标签: shell | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/tags/sql/index.html b/tags/sql/index.html new file mode 100644 index 0000000000..5a271fb93b --- /dev/null +++ b/tags/sql/index.html @@ -0,0 +1,417 @@ +标签: sql | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/tags/\345\214\272\345\235\227\351\223\276/index.html" "b/tags/\345\214\272\345\235\227\351\223\276/index.html" new file mode 100644 index 0000000000..09c1be9bd1 --- /dev/null +++ "b/tags/\345\214\272\345\235\227\351\223\276/index.html" @@ -0,0 +1,417 @@ +标签: 区块链 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/tags/\345\216\237\347\245\236/index.html" "b/tags/\345\216\237\347\245\236/index.html" new file mode 100644 index 0000000000..7c8c4edc59 --- /dev/null +++ "b/tags/\345\216\237\347\245\236/index.html" @@ -0,0 +1,417 @@ +标签: 原神 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/tags/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" "b/tags/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" new file mode 100644 index 0000000000..46cb9e34d3 --- /dev/null +++ "b/tags/\345\274\200\345\217\221\345\267\245\345\205\267/index.html" @@ -0,0 +1,417 @@ +标签: 开发工具 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/tags/\346\225\231\347\250\213/index.html" "b/tags/\346\225\231\347\250\213/index.html" new file mode 100644 index 0000000000..fa74a43da8 --- /dev/null +++ "b/tags/\346\225\231\347\250\213/index.html" @@ -0,0 +1,417 @@ +标签: 教程 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git "a/tags/\346\265\213\350\257\225/index.html" "b/tags/\346\265\213\350\257\225/index.html" new file mode 100644 index 0000000000..9aa8f84cb6 --- /dev/null +++ "b/tags/\346\265\213\350\257\225/index.html" @@ -0,0 +1,417 @@ +标签: 测试 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file diff --git a/wordScenery/index.html b/wordScenery/index.html new file mode 100644 index 0000000000..7111db1597 --- /dev/null +++ b/wordScenery/index.html @@ -0,0 +1,342 @@ +世界各地风景 | WaterBoat的博客
    加载头像
    引用到评论
    \ No newline at end of file
    Solidity 龟速入门教程
    Cypress 使用指南
    npm 别名---让小明变成小红
    发布-订阅模式
    Vue Cli 配置
    Vue3-Setup语法糖
    JavaScript 小技巧
    JavaScript 高级
    Nuxt 笔记
    React-hooks
  • PK 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