├── static ├── .gitkeep └── favicon.png ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── src ├── assets │ ├── img │ │ ├── boy.png │ │ ├── code.jpg │ │ ├── life.jpg │ │ ├── mores.png │ │ ├── search.png │ │ ├── tags.jpeg │ │ ├── loading.gif │ │ ├── message.png │ │ ├── searchs.png │ │ ├── boycontent.png │ │ ├── error_img.jpg │ │ ├── pexels-photo-747964.jpeg │ │ └── pexels-pixabay-268533.jpg │ └── css │ │ ├── media.css │ │ ├── common.less │ │ ├── nav-pc.less │ │ └── aos.css ├── views │ ├── homeIndex │ │ └── index.vue │ ├── code │ │ └── index.vue │ ├── life │ │ └── index.vue │ ├── author │ │ └── index.vue │ ├── labels │ │ └── index.vue │ ├── home │ │ └── index.vue │ ├── message │ │ └── index.vue │ └── essaydetail │ │ └── index.vue ├── utils │ ├── base64.js │ ├── highlight.js │ ├── common.js │ └── http.js ├── App.vue ├── components │ ├── footer │ │ └── index.vue │ ├── card │ │ └── index.vue │ └── nav │ │ └── index.vue ├── main.js └── router │ └── index.js ├── .editorconfig ├── .gitignore ├── .babelrc ├── .postcssrc.js ├── README.md ├── package.json └── index.html /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/static/favicon.png -------------------------------------------------------------------------------- /src/assets/img/boy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/boy.png -------------------------------------------------------------------------------- /src/assets/img/code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/code.jpg -------------------------------------------------------------------------------- /src/assets/img/life.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/life.jpg -------------------------------------------------------------------------------- /src/assets/img/mores.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/mores.png -------------------------------------------------------------------------------- /src/assets/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/search.png -------------------------------------------------------------------------------- /src/assets/img/tags.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/tags.jpeg -------------------------------------------------------------------------------- /src/assets/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/loading.gif -------------------------------------------------------------------------------- /src/assets/img/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/message.png -------------------------------------------------------------------------------- /src/assets/img/searchs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/searchs.png -------------------------------------------------------------------------------- /src/assets/img/boycontent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/boycontent.png -------------------------------------------------------------------------------- /src/assets/img/error_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/error_img.jpg -------------------------------------------------------------------------------- /src/assets/img/pexels-photo-747964.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/pexels-photo-747964.jpeg -------------------------------------------------------------------------------- /src/assets/img/pexels-pixabay-268533.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangjiangmin/vue_blog/HEAD/src/assets/img/pexels-pixabay-268533.jpg -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/views/homeIndex/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/css/media.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | 屏幕大于1200px 4 | */ 5 | @media screen and (max-width: 2000px) { 6 | @import '../../assets/css/commons.css'; 7 | } 8 | /* 9 | 屏幕在1200到1199之间的 10 | */ 11 | @media screen and (min-width: 1200px) and (max-width:1199px) { 12 | /* @import '../../assets/css/common.less'; */ 13 | @import '../../assets/css/commons.css'; 14 | } 15 | /* 16 | 屏幕小于768px的 17 | */ 18 | @media screen and (max-width:768px) { 19 | /* @import '../../assets/css/nav-h5.css'; */ 20 | } 21 | -------------------------------------------------------------------------------- /src/utils/base64.js: -------------------------------------------------------------------------------- 1 | const Base64 = { 2 | //加密 3 | encode(str) { 4 | return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, 5 | function toSolidBytes(match, p1) { 6 | return String.fromCharCode('0x' + p1); 7 | })); 8 | }, 9 | //解密 10 | decode(str) { 11 | // Going backwards: from bytestream, to percent-encoding, to original string. 12 | return decodeURIComponent(atob(str).split('').map(function (c) { 13 | return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); 14 | }).join('')); 15 | } 16 | } 17 | export default Base64 -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 38 | -------------------------------------------------------------------------------- /src/utils/highlight.js: -------------------------------------------------------------------------------- 1 | // highlight.js 代码高亮指令 2 | import Hljs from 'highlight.js'; 3 | import 'highlight.js/styles/tomorrow-night.css'; // 代码高亮风格,选择更多风格需导入 node_modules/hightlight.js/styles/ 目录下其它css文件 4 | 5 | let Highlight = {}; 6 | // 自定义插件 7 | Highlight.install = function (Vue) { 8 | // 自定义指令 v-highlight 9 | Vue.directive('highlight', { 10 | // 被绑定元素插入父节点时调用 11 | inserted: function(el) { 12 | let blocks = el.querySelectorAll('pre code'); 13 | for (let i = 0; i < blocks.length; i++) { 14 | Hljs.highlightBlock(blocks[i]); 15 | } 16 | }, 17 | // 指令所在组件的 VNode 及其子 VNode 全部更新后调用 18 | componentUpdated: function(el) { 19 | let blocks = el.querySelectorAll('pre code'); 20 | for (let i = 0; i < blocks.length; i++) { 21 | Hljs.highlightBlock(blocks[i]); 22 | } 23 | } 24 | }) 25 | }; 26 | 27 | export default Highlight; -------------------------------------------------------------------------------- /src/components/footer/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 31 | 32 | -------------------------------------------------------------------------------- /src/assets/css/common.less: -------------------------------------------------------------------------------- 1 | .l-banan{ 2 | width: 100%; 3 | height: 15%; 4 | position: relative; 5 | } 6 | @media screen and (max-width: 2000px) and (min-width: 767px) { 7 | .img-content{ 8 | position: absolute; 9 | left:45%; 10 | top:38%; 11 | transform: translate(-45%, -38%); 12 | color: #faf9f9; 13 | } 14 | } 15 | @media screen and (max-width:768px) and (min-width: 100px){ 16 | 17 | .img-content{ 18 | position: absolute; 19 | left:30%; 20 | top:30%; 21 | transform: translate(-45%, -45%); 22 | color: #faf9f9; 23 | } 24 | } 25 | .m-hero-content{ 26 | color: rgb(218, 216, 216); 27 | } 28 | .l-image { 29 | height: 500px; 30 | width: 100%; 31 | } 32 | .image{ 33 | width: 100%; 34 | height: 100%; 35 | object-fit: cover; 36 | } 37 | .l-content{ 38 | width: 100%; 39 | height: 0%; 40 | background: #ffffff; 41 | margin-top: 15px; 42 | } 43 | 44 | .l-content-foot{ 45 | font-size: 40px; 46 | margin-top: 50px; 47 | height: 120px; 48 | } -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import ElementUI from 'element-ui' 7 | import 'element-ui/lib/theme-chalk/index.css' 8 | import axios from 'axios' 9 | import {post,fetch,patch,put} from './utils/http' 10 | import Highlight from './utils/highlight' 11 | import Base64 from './utils/base64.js' 12 | import less from 'less' 13 | import VueLazyload from 'vue-lazyload' 14 | 15 | 16 | //定义全局变量 17 | 18 | Vue.prototype.$post=post; 19 | 20 | Vue.prototype.$fetch=fetch; 21 | Vue.prototype.$Base64 = Base64; 22 | Vue.prototype.$patch=patch; 23 | Vue.prototype.$put=put; 24 | Vue.prototype.$axios = axios 25 | Vue.config.productionTip = false 26 | Vue.use(Highlight) 27 | Vue.use(less) 28 | Vue.use(ElementUI) 29 | /* eslint-disable no-new */ 30 | Vue.use(VueLazyload, { 31 | loading: require('./assets/img/loading.gif'),//加载中图片,一定要有,不然会一直重复加载占位图 32 | error: require('./assets/img//error_img.jpg') //加载失败图片 33 | }); 34 | new Vue({ 35 | el: '#app', 36 | router, 37 | components: { App }, 38 | mounted () { 39 | // You'll need this for renderAfterDocumentEvent. 40 | 41 | document.dispatchEvent(new Event('render-event')) 42 | }, 43 | template: '', 44 | }) 45 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HomeIndex from '@/views/homeIndex' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | redirect: '/home', 12 | }, 13 | { 14 | path: '/home', 15 | component: HomeIndex, 16 | children: [ 17 | { 18 | path: '/home', 19 | name: 'home', 20 | component:(resolve) =>require(['@/views/home'],resolve) 21 | }, 22 | { 23 | path: '/essaydetail/:id', 24 | name: 'essaydetail', 25 | component:(resolve) =>require(['@/views/essaydetail'],resolve) 26 | }, { 27 | path: '/code', 28 | name: 'code', 29 | component:(resolve) =>require(['@/views/code'],resolve) 30 | }, { 31 | path: '/life', 32 | name: 'life', 33 | component:(resolve) =>require(['@/views/life'],resolve) 34 | }, { 35 | path: '/author', 36 | name: 'author', 37 | component:(resolve) =>require(['@/views/author'],resolve) 38 | },{ 39 | path: '/labels/:labelId/:labelName', 40 | name: 'labels', 41 | component:(resolve) =>require(['@/views/labels'],resolve) 42 | }, { 43 | path: '/message', 44 | name: 'message', 45 | component:(resolve) =>require(['@/views/message'],resolve) 46 | } 47 | ] 48 | } 49 | ] 50 | }) 51 | const originalPush = Router.prototype.push 52 | Router.prototype.push = function push(location) { 53 | return originalPush.call(this, location).catch(err => err) 54 | } -------------------------------------------------------------------------------- /src/views/code/index.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 68 | 69 | -------------------------------------------------------------------------------- /src/views/life/index.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 开发一个简单的个人博客 2 | 3 | **整体风格上,我对设计没有太多的见解,做的时候参考了好多网上现有的博客,总体喜欢简约。** 4 | ![Image text](https://img-blog.csdnimg.cn/20201223184703472.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namlhbmdtaW4=,size_16,color_FFFFFF,t_70#pic_center) 5 | 6 | ![Image text](https://img-blog.csdnimg.cn/202012231843361.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namlhbmdtaW4=,size_16,color_FFFFFF,t_70) 7 | ![Image text](https://img-blog.csdnimg.cn/20201223184333744.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1YW5namlhbmdtaW4=,size_16,color_FFFFFF,t_70) 8 | 9 | # 项目结构 10 | -src 11 | -assets //公共 css js img 12 | -components //公共组件 封装 13 | -card //博客基本信息卡片组件 14 | -footer //页脚 15 | -nav //页头 16 | -router //路由 17 | -utils //工具类 18 | -views 19 | -author 20 | -code 21 | -essaydetail //博客信息页 22 | -home 23 | -labels 24 | -life 25 | -message //留言 26 | 27 | # 用到的技术 28 | 29 | ## 前端 30 | 31 | **vue + vue-router + axios + element ui框架的样式 + aos.css 动画 + less + media 媒体查询 自适应 Web+H5** 32 | 33 | **包含技术点:** 34 | 35 | 36 | 1. axios请求封装 37 | 2. aos动画的使用 38 | 3. 博客代码高亮highlight 39 | 4. 基本组件封装 40 | 5. 父子组件传值 41 | 6. 路由传参 42 | 7. 传参加密 43 | 8. 同界面路由变更回到顶部 watch() 44 | 9. 媒体查询@media 45 | 46 | 47 | # 后端 48 | 49 | 50 | 51 | ## Java 52 | **springboot + mysql + mybatis + redis** 53 | 54 | **包含技术点:(这对后端开发其实没啥技术点)** 55 | 56 | 1. springboot+mybatis 实现基本增删改查 57 | 2. redis工具类 58 | 3. aop规范控制台日志 59 | 4. 统一返回 (code,msg,data) 60 | 5. Dockerfile 编写 61 | 62 | 63 | ## 服务(部署Java) 64 | 阿里云服务器 **centos8 + docker + dockerfile + nginx+ mysql** 65 | 66 | **包含技术点:** 67 | 68 | 1. centos8 安装 docker。 69 | 2. docker + mysql 文件挂载、远程连接。 70 | 3. docker + nginx 文件挂载、负载、反向。 71 | 4. docker化 nginx后,SSL证书的配置。 72 | 6. dockerfile 文件,实现项目打包镜像。 73 | 74 | ## " 基本实现了一个简单的个人网页 : [https://www.dahuangzi.work/](https://www.dahuangzi.work/) " 75 | 76 | ## 1、获取项目到本地 77 | ## 2、vscode 终端 输入 npm i 下载package.json中的依赖包 78 | ## 3、npm run dev 启动 79 | ## 4、修改 utils 下 https 中封装的 baseURL 为自己的后端接口地址 -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | 24 | /** 25 | * Source Maps 26 | */ 27 | 28 | // https://webpack.js.org/configuration/devtool/#development 29 | devtool: 'cheap-module-eval-source-map', 30 | 31 | // If you have problems debugging vue-files in devtools, 32 | // set this to false - it *may* help 33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 34 | cacheBusting: true, 35 | 36 | cssSourceMap: true 37 | }, 38 | 39 | build: { 40 | // Template for index.html 41 | index: path.resolve(__dirname, '../dist/index.html'), 42 | 43 | // Paths 44 | assetsRoot: path.resolve(__dirname, '../dist'), 45 | assetsSubDirectory: 'static', 46 | assetsPublicPath: './', 47 | 48 | /** 49 | * Source Maps 50 | */ 51 | 52 | productionSourceMap: true, 53 | // https://webpack.js.org/configuration/devtool/#production 54 | devtool: '#source-map', 55 | 56 | // Gzip off by default as many popular static hosts such as 57 | // Surge or Netlify already gzip all static assets for you. 58 | // Before setting to `true`, make sure to: 59 | // npm install --save-dev compression-webpack-plugin 60 | productionGzip: false, 61 | productionGzipExtensions: ['js', 'css'], 62 | 63 | // Run the build command with an extra argument to 64 | // View the bundle analyzer report after build finishes: 65 | // `npm run build --report` 66 | // Set to `true` or `false` to always turn it on or off 67 | bundleAnalyzerReport: process.env.npm_config_report 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuedemo", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "huangjiangmin <13520350513@163.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "build": "node build/build.js" 11 | }, 12 | "dependencies": { 13 | "aos": "^2.3.4", 14 | "axios": "^0.20.0", 15 | "element-ui": "^2.13.2", 16 | "highlight.js": "^10.4.1", 17 | "less": "^3.13.0", 18 | "less-loader": "^4.1.0", 19 | "prerender-spa-plugin": "^3.4.0", 20 | "vue": "^2.5.2", 21 | "vue-axios": "^2.1.5", 22 | "vue-router": "^3.0.1" 23 | }, 24 | "devDependencies": { 25 | "autoprefixer": "^7.1.2", 26 | "babel-core": "^6.22.1", 27 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 28 | "babel-loader": "^7.1.1", 29 | "babel-plugin-syntax-jsx": "^6.18.0", 30 | "babel-plugin-transform-runtime": "^6.22.0", 31 | "babel-plugin-transform-vue-jsx": "^3.5.0", 32 | "babel-preset-env": "^1.3.2", 33 | "babel-preset-stage-2": "^6.22.0", 34 | "chalk": "^2.0.1", 35 | "copy-webpack-plugin": "^4.0.1", 36 | "css-loader": "^0.28.0", 37 | "extract-text-webpack-plugin": "^3.0.0", 38 | "file-loader": "^1.1.4", 39 | "friendly-errors-webpack-plugin": "^1.6.1", 40 | "html-webpack-plugin": "^2.30.1", 41 | "less": "^3.13.0", 42 | "node-notifier": "^5.1.2", 43 | "optimize-css-assets-webpack-plugin": "^3.2.0", 44 | "ora": "^1.2.0", 45 | "portfinder": "^1.0.13", 46 | "postcss-import": "^11.0.0", 47 | "postcss-loader": "^2.0.8", 48 | "postcss-url": "^7.2.1", 49 | "rimraf": "^2.6.0", 50 | "semver": "^5.3.0", 51 | "shelljs": "^0.7.6", 52 | "uglifyjs-webpack-plugin": "^1.1.1", 53 | "url-loader": "^0.5.8", 54 | "vue-lazyload": "^1.3.3", 55 | "vue-loader": "^13.3.0", 56 | "vue-style-loader": "^3.0.1", 57 | "vue-template-compiler": "^2.5.2", 58 | "webpack": "^3.6.0", 59 | "webpack-bundle-analyzer": "^2.9.0", 60 | "webpack-dev-server": "^2.9.1", 61 | "webpack-merge": "^4.1.0" 62 | }, 63 | "engines": { 64 | "node": ">= 6.0.0", 65 | "npm": ">= 3.0.0" 66 | }, 67 | "browserslist": [ 68 | "> 1%", 69 | "last 2 versions", 70 | "not ie <= 8" 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /src/utils/common.js: -------------------------------------------------------------------------------- 1 | export function before_time(dateTimeStamp) { 2 | var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示 3 | var hour = minute * 60; 4 | var day = hour * 24; 5 | var week = day * 7; 6 | var halfamonth = day * 15; 7 | var month = day * 30; 8 | var year = day * 365; 9 | var now = new Date().getTime(); //获取当前时间毫秒 10 | // console.log(now); 11 | var diffValue = now - dateTimeStamp; //时间差 12 | 13 | if (diffValue < 0) { 14 | return; 15 | } 16 | var minC = diffValue / minute; //计算时间差的分,时,天,周,月 17 | var hourC = diffValue / hour; 18 | var dayC = diffValue / day; 19 | var weekC = diffValue / week; 20 | var monthC = diffValue / month; 21 | var yearC = diffValue / year; 22 | var result; 23 | if (yearC >= 1) { 24 | result = " " + parseInt(yearC) + " years ago"; 25 | } else if (monthC >= 1 && monthC <= 12) { 26 | result = " " + parseInt(monthC) + " months ago"; 27 | } else if (weekC >= 1 && weekC <= 4) { 28 | result = " " + parseInt(weekC) + " weeks ago"; 29 | } else if (dayC >= 1 && dayC <= 7) { 30 | result = " " + parseInt(dayC) + " days ago"; 31 | } else if (hourC >= 1 && hourC <= 24) { 32 | result = " " + parseInt(hourC) + " hours ago"; 33 | } else if (minC >= 1 && minC <= 60) { 34 | result = " " + parseInt(minC) + " minutes ago"; 35 | } else if (diffValue >= 0 && diffValue <= minute) { 36 | result = "Just Now"; 37 | } else { 38 | var datetime = new Date(); 39 | datetime.setTime(dateTimeStamp); 40 | var Nyear = datetime.getFullYear(); 41 | var Nmonth = 42 | datetime.getMonth() + 1 < 10 43 | ? "0" + (datetime.getMonth() + 1) 44 | : datetime.getMonth() + 1; 45 | var Ndate = 46 | datetime.getDate() < 10 47 | ? "0" + datetime.getDate() 48 | : datetime.getDate(); 49 | var Nhour = 50 | datetime.getHours() < 10 51 | ? "0" + datetime.getHours() 52 | : datetime.getHours(); 53 | var Nminute = 54 | datetime.getMinutes() < 10 55 | ? "0" + datetime.getMinutes() 56 | : datetime.getMinutes(); 57 | var Nsecond = 58 | datetime.getSeconds() < 10 59 | ? "0" + datetime.getSeconds() 60 | : datetime.getSeconds(); 61 | result = Nyear + "-" + Nmonth + "-" + Ndate; 62 | } 63 | return result; 64 | } -------------------------------------------------------------------------------- /src/assets/css/nav-pc.less: -------------------------------------------------------------------------------- 1 | .navs{ 2 | 3 | /* 4 | 屏幕小于768px的 5 | */ 6 | @media screen and (max-width:768px){ 7 | width: 100%; 8 | height: 100px; 9 | /* line-height: 80px; */ 10 | background: rgb(254, 254, 254); 11 | .nav{ 12 | display: none; 13 | } 14 | .changeStyle{ 15 | font-weight: bold; 16 | } 17 | .nav-image{ 18 | float: left; 19 | display: inline; 20 | margin-top: 20px; 21 | margin-left: 15px; 22 | } 23 | .nav-search{ 24 | float: left; 25 | margin-left: 5px; 26 | margin-top: 23px; 27 | } 28 | } 29 | @media screen and (max-width: 2000px) { 30 | width: 100%; 31 | height: 100px; 32 | /* line-height: 80px; */ 33 | background: rgb(254, 254, 254); 34 | .nav{ 35 | float:left; 36 | margin-left: 40px; 37 | font-size: 18px; 38 | cursor: pointer; 39 | margin-top: 30px; 40 | } 41 | .changeStyle{ 42 | font-weight: bold; 43 | } 44 | .nav-image{ 45 | margin-top: 20px; 46 | margin-left: 200px; 47 | } 48 | .nav-search{ 49 | float: left; 50 | margin-left: 15px; 51 | margin-top: 23px; 52 | } 53 | } 54 | 55 | } 56 | .show-card{ 57 | width: 100%; 58 | height: 400px; 59 | background: rgb(255, 255, 255); 60 | z-index: 100; 61 | position:absolute; 62 | margin-top: 100px; 63 | border-top: 0.5px solid rgb(214, 212, 212); 64 | .card-recent{ 65 | margin-top: 20px; 66 | margin-right: 65%; 67 | } 68 | .small-card{ 69 | width:75%; 70 | margin: 0 auto; 71 | .el-col{ 72 | width:200px; 73 | height:200px; 74 | .nav-show-image{ 75 | width: 100%; 76 | height:140px; 77 | object-fit: cover; 78 | transition: all 0.6s; 79 | } 80 | .nav-show-image:hover{ 81 | transform: scale(1.2); 82 | } 83 | .card-massges{ 84 | object-fit: cover; 85 | height: 20px; 86 | font-size: 15px; 87 | } 88 | } 89 | } 90 | .nav-tags{ 91 | margin-top: 30px; 92 | margin-right: 72%; 93 | } 94 | .tags-div{ 95 | margin-left: 200px; 96 | } 97 | .tags{ 98 | float:left; 99 | margin-left:3%; 100 | font-size: 18px; 101 | cursor: pointer; 102 | margin-top: 10px; 103 | font-weight: bold; 104 | } 105 | } -------------------------------------------------------------------------------- /src/utils/http.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | axios.defaults.timeout = 5000;   //设置请求时间 4 | axios.defaults.baseURL ='http://localhost:8088';   //设置接口公共部分 5 | 6 | //http request 拦截器 7 | 8 | axios.interceptors.request.use( 9 | 10 |   config => { 11 | 12 |     config.data = JSON.stringify(config.data); 13 | 14 |     config.headers = { 15 | 16 |       'Content-Type':'application/json' 17 | 18 |     } 19 | 20 |     return config; 21 | 22 |   }, 23 | 24 |   error => { 25 | 26 |     return Promise.reject(err); 27 | 28 |   } 29 | 30 | ); 31 | 32 | //http response 拦截器 33 | 34 | axios.interceptors.response.use( 35 | 36 |   response => { 37 | 38 |     if(response.data.errCode ==2){ 39 | 40 |       router.push({ 41 | 42 |         path:"/login", 43 | 44 |         querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转 45 | 46 |       }) 47 | 48 |     } 49 | 50 |     return response; 51 | 52 |   }, 53 | 54 |   error => { 55 | 56 |     return Promise.reject(error) 57 | 58 |   } 59 | 60 | ) 61 | 62 | /** 63 | 64 | * 封装get方法 65 | 66 | * @param url 67 | 68 | * @param data 69 | 70 | * @returns {Promise} 71 | 72 | */ 73 | 74 | export function fetch(url,params={}){ 75 | 76 |   return new Promise((resolve,reject) => { 77 | 78 |     axios.get(url,{ 79 | 80 |       params:params 81 | 82 |     }) 83 | 84 |     .then(response => { 85 | 86 |       resolve(response.data); 87 | 88 |     }) 89 | 90 |     .catch(err => { 91 | 92 |       reject(err) 93 | 94 |     }) 95 | 96 |   }) 97 | 98 | } 99 | 100 | /** 101 | 102 | * 封装post请求 103 | 104 | * @param url 105 | 106 | * @param data 107 | 108 | * @returns {Promise} 109 | 110 | */ 111 | 112 | export function post(url,data = {}){ 113 | 114 |   return new Promise((resolve,reject) => { 115 | 116 |     axios.post(url,data) 117 | 118 |           .then(response => { 119 | 120 |             resolve(response.data); 121 | 122 |           },err => { 123 | 124 |             reject(err) 125 | 126 |           }) 127 | 128 |   }) 129 | 130 | } 131 | 132 | /** 133 | 134 | * 封装patch请求 135 | 136 | * @param url 137 | 138 | * @param data 139 | 140 | * @returns {Promise} 141 | 142 | */ 143 | 144 | export function patch(url,data = {}){ 145 | 146 |   return new Promise((resolve,reject) => { 147 | 148 |     axios.patch(url,data) 149 | 150 |         .then(response => { 151 | 152 |           resolve(response.data); 153 | 154 |         },err => { 155 | 156 |           reject(err) 157 | 158 |         }) 159 | 160 |   }) 161 | 162 | } 163 | 164 | /** 165 | 166 | * 封装put请求 167 | 168 | * @param url 169 | 170 | * @param data 171 | 172 | * @returns {Promise} 173 | 174 | */ 175 | 176 | export function put(url,data = {}){ 177 | 178 |   return new Promise((resolve,reject) => { 179 | 180 |     axios.put(url,data) 181 | 182 |         .then(response => { 183 | 184 |           resolve(response.data); 185 | 186 |         },err => { 187 | 188 |           reject(err) 189 | 190 |         }) 191 | 192 |   }) 193 | 194 | } -------------------------------------------------------------------------------- /src/views/author/index.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /src/views/labels/index.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 81 | 82 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 大黄子的博客 15 | 16 | 17 | 18 | 19 | 20 | 78 | 79 | 80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | 90 | 91 | 92 | 93 | 94 | 95 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /src/views/home/index.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /src/components/card/index.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 68 | 69 | -------------------------------------------------------------------------------- /src/views/message/index.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 96 | 97 | -------------------------------------------------------------------------------- /src/views/essaydetail/index.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 187 | 188 | -------------------------------------------------------------------------------- /src/components/nav/index.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 125 | 126 | -------------------------------------------------------------------------------- /src/assets/css/aos.css: -------------------------------------------------------------------------------- 1 | [data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}} --------------------------------------------------------------------------------