frontend
文章平均质量分 55
_Carpediem
是你自己选择养老的
展开
-
js+css改造jsmind实现思维导图 | 树状图
一. 调研树状图 | 思维导图调研1.https://juejin.cn/post/68449041032989900932.echartshttps://echarts.apache.org/examples/zh/editor.html?c=tree-polyline3.https://juejin.cn/post/68449036154259374164.https://bl.ocks.org/mbostock/43390835.https://fperucic.github.io/tr原创 2022-04-19 16:26:14 · 8668 阅读 · 7 评论 -
router-link导航后,子页面不显示导航样式问题
一、问题当使用,点击进入导航1下面的子页面,不会显示导航1的当前active样式(即图中绿色框里的蓝色下划线)二、解决源码修改router.ts文件中的路由配置信息主要是在导航1加入redirectconst router = createRouter({ history: routerHistory, routes: [ { path: "/导航1", component: '', redirect: "导航1", childre原创 2021-12-02 11:27:11 · 769 阅读 · 0 评论 -
vue3+vue-router+vuex+ts实现权限管理
一、说明权限管理一般从路由权限、接口权限、页面权限、按钮权限四个角度去考虑。我基于业务需求,实现了路由权限、页面权限、按钮权限。以下主要展示路由权限。tips:(页面权限和按钮权限 需要在具体的页面or按钮中去实现;接口权限需要和后端去协商约定实现)二、实现思路+源码:1.router.tsimport store from "@/store/index";import { createRouter, createWebHashHistory } from "vue-router";impo原创 2021-12-02 11:09:16 · 1779 阅读 · 0 评论 -
为什么js已经有Object类型了,es6还要引入Map
object1、所有对象的属性名必须是字符串类型,必须确保每个键名都是字符串类型且在对象中是唯一当属性的键名为Number类型时:var map=Object.create(null)map[5]='hello'conslole.log(map['5']) //'hello'conslole.log(map[5]) //'hello'本例中将对象(map)的属性(5)赋值为字符串’hello’,而这个属性的键名是数值型的5,它会被自动(强制)转化为字符串类型,所以map[5]===ma原创 2021-09-07 11:13:24 · 289 阅读 · 0 评论 -
jspdf+html2canvas实现html转pdf报告导出
1.原理 将html转化为canvas,再将canvas图片转化为pdf2.源码html2canvas(document.getElementById('PDF')).then((canvas) => {//获取需要html转化为pdf的元素id var contentWidth = canvas.width; var contentHeight = canvas.height; console.log('contentWidth', cont原创 2021-09-06 17:58:17 · 529 阅读 · 2 评论 -
css隐藏最后一个div的子元素
问题:想隐藏循环显示的div的最后一个子元素的上面画线解决:原理:last-of-type属性:父元素下的最后一个指定类型的元素(代表在一群兄弟元素中的最后一个指定类型的元素。)即:上面的父元素block-step下面的task-steps是一群兄弟元素,它们中的最后一个task-steps。last-child属性:表示其父元素的最后一个子元素,且这个元素是css指定的元素,才可以生效。如参考链接:[添加链接描述]添加链接描述(https://www.cnblogs.com/whbniit原创 2021-01-29 13:15:43 · 1971 阅读 · 0 评论 -
JavaScript substring()函数
官方定义的一般用法:⚠注意!!!substring()从提取的字符indexStart可达但不包括 indexEnd如果indexStart等于indexEnd,substring()返回一个空字符串。如果indexEnd省略,则将substring()字符提取到字符串的末尾。 如果任一参数小于0或是NaN,它被视为为0。如果任何一个参数都大于stringName.length,则被视为是stringName.length。-如果indexStart大于indexEnd,原创 2021-01-22 00:04:49 · 628 阅读 · 0 评论 -
vue-router 三级路由
1.home.vue<template> <div class="nav"> 一级路由首页 <router-link class="nav-item" to="/TestEvaluation">测试评估</router-link> <router-link class="nav-item" to="/ParameterManage">参数管理</router-link> <router-lin原创 2020-12-10 16:35:19 · 10795 阅读 · 0 评论 -
FFmpeg+rtmp+Nginx-http-flv-module+flvjs实现直播
运行环境:windowsNginx-rtmp-module不支持flvjsNginx-http-flv-module支持flvjs步骤:将nginx-http-flv-module编译到nginx,然后设置配置文件,开启服,进行推流拉流。1.我已经将其编译好,并设置好nginx.conf配置文件,打包如下:windows下编译好的nginx+nginx-http-flv(提取码:1234)2.FFmpeg推流推摄像头,可以用命令ffmpeg -list_devices true -f dsh原创 2020-10-28 16:50:19 · 1631 阅读 · 10 评论 -
livego+ffmpeg+rtmp+flvjs实现直播视频
1.下载livego打包好的livego二进制可执行文件开启服务(双击livego.exe)在浏览器中输入 http://localhost:8090/control/get?room=movie 获取一个房间的 channelkey(channelkey用于推流,movie可自定义,用于播放). 复制channelkey开始推流2.下载ffmpeg配置环境变量输入命令:ffmpeg -re -i {要推送的视频} -c copy -f flv rtmp://localhost:193原创 2020-10-02 10:46:58 · 2366 阅读 · 16 评论 -
vuex-state|mutation|action|getter总结
vuex:实现组件之间的数据共享父组件→子组件 通过v-bind绑定数据子组件→父组件 通过v-on 共享数据vuex四大核心:1. state:提供唯一的公共数据源,所有的共享数据都需要统一放到store对象的state属性中进行存储。import Vuex from 'Vuex'Vue.use(Vuex)const store = new Vuex.store(){ state:{ //存放全局数据,eg:count //conut:0 }}//组件中访问state中的数据 方原创 2020-09-27 15:07:28 · 132 阅读 · 0 评论 -
markdown <a>标签新建页面打开链接
markdown-it 版本是11.0.0 没有’target,_blank’属性,默认打开a标签的链接是本页面,会丢失之前的页面数据,需要在浏览器中新建页面打开,添加以下代码即可解决。// Remember old renderer, if overridden, or proxy to default renderervar md=require('markdown-it')var defaultRender = md.renderer.rules.link_open || function(to原创 2020-09-27 14:15:57 · 1466 阅读 · 0 评论 -
浏览器原理
浏览器的工作原理:核心:将一个URL(统一资源定位符)变成与之对应的一个屏幕上显示的网页。任意一款浏览器首先使用HTTP协议或HTTPS协议向服务端发送请求页面接受请求返回的HTML代码经过解析,构建成DOM树(DOM树就是将HTML表示为标签的树形结构,如下图所示:)计算DOM树上的CSS属性根据CSS属性对元素逐个进行渲染,得到内存中的位图(可以选择对位图进行合成,该操作会增加后续绘制速度)⚠⚠有的浏览器一边解析一边渲染,即2.3.4步骤合并为一个合成位图后,最后原创 2020-07-27 14:56:33 · 103 阅读 · 0 评论 -
let不允许重复声明
最近在看阮一峰的ECMAScript,看到下面这里想了好久也没想明白为什么???(由于之前学了太多语言的语法规则,就有了惯性思维…)对比下面这个函数就可发现,上面的会报错arg变量已经定义了,即let不允许在函数内部重新声明参数。原来,不能在函数内部重新声明参数,是要考虑作用域范围的,第二个函数里面有两层作用域,let声明变量那行新增了一个块级作用域,用内层一对花括号{}表示,因此它所在的作用域与func(arg)函数(外层{})没有在同一个作用域内,可以重新声明参数,所以第二个函数调用没有报错。原创 2020-07-17 09:35:25 · 2403 阅读 · 1 评论 -
vue实战_音乐播放器的制作
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Ed原创 2020-07-08 17:56:49 · 714 阅读 · 0 评论