<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[renyudouhui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/renyudouhui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; renyudouhui]]></copyright><item><title><![CDATA[本地开发前端nginx跨域]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/140447205</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/140447205</guid><author>renyudouhui</author><pubDate>Mon, 15 Jul 2024 19:36:03 +0800</pubDate><description><![CDATA[前端项目跑在3031端口请求80端口，80端口转发到3031端口上。]]></description><category></category></item><item><title><![CDATA[前端加密总结]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/136565696</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/136565696</guid><author>renyudouhui</author><pubDate>Fri, 08 Mar 2024 16:29:42 +0800</pubDate><description><![CDATA[【代码】前端加密总结。]]></description><category></category></item><item><title><![CDATA[ts类型记录]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/127865487</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/127865487</guid><author>renyudouhui</author><pubDate>Tue, 15 Nov 2022 14:33:36 +0800</pubDate><description><![CDATA[typeScript类型记录]]></description><category></category></item><item><title><![CDATA[vue3手动控制KeepAlive缓存map。]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/127799904</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/127799904</guid><author>renyudouhui</author><pubDate>Fri, 11 Nov 2022 09:13:40 +0800</pubDate><description><![CDATA[vue3手动清除某些keppalive虚拟dom]]></description><category></category></item><item><title><![CDATA[typeScript数组转树。]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/126647056</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/126647056</guid><author>renyudouhui</author><pubDate>Thu, 01 Sep 2022 16:57:19 +0800</pubDate><description><![CDATA[ts数组转树]]></description><category></category></item><item><title><![CDATA[vue3异步组件。]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/125661672</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/125661672</guid><author>renyudouhui</author><pubDate>Thu, 07 Jul 2022 16:18:37 +0800</pubDate><description><![CDATA[vue异步组件]]></description><category></category></item><item><title><![CDATA[前端检测dom是否被遮盖]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/123560056</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/123560056</guid><author>renyudouhui</author><pubDate>Thu, 17 Mar 2022 20:36:38 +0800</pubDate><description><![CDATA[new IntersectionObserver(([change]) =&gt; {
  console.log(change);
    // 被覆盖就是false，反之true
  console.log(change.isVisible) 
}, {
  threshold: [1.0],
  delay: 1000, 
  trackVisibility: true,
}).observe(document.querySelector(".first"));


]]></description><category></category></item><item><title><![CDATA[虚拟列表渲染（不进行后台加载）]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/123107120</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/123107120</guid><author>renyudouhui</author><pubDate>Thu, 24 Feb 2022 10:58:55 +0800</pubDate><description><![CDATA[import { defineComponent, PropType, computed } from "vue";
import "./style.less";
import Service from "./virtual_list.service";

export default defineComponent({

  name: "VirtualList",

  props: {

    // 容器总高度
    screenHeight: {
      type: Number,
    ]]></description><category></category></item><item><title><![CDATA[css实现地图点位效果]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/121284113</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/121284113</guid><author>renyudouhui</author><pubDate>Fri, 12 Nov 2021 11:10:20 +0800</pubDate><description><![CDATA[&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;title&gt;Document&l]]></description><category></category></item><item><title><![CDATA[前端浏览本地文件（图片视频等）]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/121080330</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/121080330</guid><author>renyudouhui</author><pubDate>Mon, 01 Nov 2021 14:57:58 +0800</pubDate><description><![CDATA[引入文件的相对地址
使用window.URL.createObjectURL方法。
代码如下

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
  &lt;meta name="viewport" content="width=device-width,.]]></description><category></category></item><item><title><![CDATA[js对象数组去重]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/120707281</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/120707281</guid><author>renyudouhui</author><pubDate>Mon, 11 Oct 2021 17:08:49 +0800</pubDate><description><![CDATA[const obj = {};
 this.model.topics = this.model.topics.reduce((prev, item) =&gt; {
        obj[item.topic]
          ? ""
          : obj[item.topic] = true &amp;&amp; prev.push(item);
        return prev;
      }, [] as Array&lt;Topic&gt;);


]]></description><category></category></item><item><title><![CDATA[去除ie edge浏览器的 type = ”password“ 的输入框的默认图标]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/119915892</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/119915892</guid><author>renyudouhui</author><pubDate>Wed, 25 Aug 2021 17:26:37 +0800</pubDate><description><![CDATA[input::-ms-reveal {
      display: none;
    }
input::-ms-clear {
      display: none;
    }
input::-o-clear {
      display: none;
    }


]]></description><category></category></item><item><title><![CDATA[前端rsa md5加密]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/119905857</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/119905857</guid><author>renyudouhui</author><pubDate>Wed, 25 Aug 2021 10:39:40 +0800</pubDate><description><![CDATA[下包
npm install --save js-md5
npm i jsencrypt

md5使用
md5(password)

rsa使用
   const rsaObj = new JsEncrypt();
   // data 为后台提供的公钥
   rsaObj.setPublicKey(data);
   const mPass = rsaObj.encrypt(password);

配合使用
 const rsaObj = new JsEncrypt();
 rsaObj.setPubli]]></description><category></category></item><item><title><![CDATA[mockjs在vue中简单使用]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/119869018</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/119869018</guid><author>renyudouhui</author><pubDate>Mon, 23 Aug 2021 14:44:01 +0800</pubDate><description><![CDATA[安装
npm install mockjs --save-dev
建立mock.ts文件夹并导入mockjs
import Mock from "mockjs";

import { login } from "./detailMock"; 

Mock.mock(/\/api\/xxx\/xxx\/xxx/ ,'post', login);

其中login的代码部分
export const login = (option: any) =&gt; {
  const { username } = JSO]]></description><category></category></item><item><title><![CDATA[前端短时间内拦截重复请求，并返回同一结果。]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/119680183</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/119680183</guid><author>renyudouhui</author><pubDate>Fri, 13 Aug 2021 17:22:47 +0800</pubDate><description><![CDATA[有个需求，页面加载有一个组件被加载上百次，这个组件内部会从接口拿数据，有相同的也有不同的。需要拦截这些请求，让相同参数的请求只发送一次，但所有组件都需要拿到数据。axios的处理重复请求，我只看到可以取消，并未统一返回。
type User = {
  username: string;
  name: string;
}

class RequestStore {
  /**
   * 根据用户名获取用户信息
   * @param username 用户名
   */
  getUserByUserNa]]></description><category></category></item><item><title><![CDATA[vue中使用Mqtt实现在线聊天]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/118889729</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/118889729</guid><author>renyudouhui</author><pubDate>Mon, 19 Jul 2021 10:14:10 +0800</pubDate><description><![CDATA[安装插件
npm install mqtt --save

、
设置(后台帮助订阅topic)
import { GlobalStore } from "@/store";
import mqtt, { IConnectPacket, MqttClient, Packet } from "mqtt";
import { computed } from "vue";

export interface MqttMsgHander {
  (message: string): void;
}

export d]]></description><category></category></item><item><title><![CDATA[position: sticky]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/118727650</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/118727650</guid><author>renyudouhui</author><pubDate>Wed, 14 Jul 2021 14:53:46 +0800</pubDate><description><![CDATA[css position的值除了relative，absolute，fixed，static外多了一个粘性布局sticky。它的作用是在dom元素滚动到父元素外的时候可以念在某个位置，利用js也可以实现这个效果。
 &lt;style&gt;
    .father {
      /* width: 100px; */
      height: 50vh;
      border: 1px solid #ccc;
      overflow: auto;
    }

    .son {
    ]]></description><category></category></item><item><title><![CDATA[前端大量重复请求]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/118603055</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/118603055</guid><author>renyudouhui</author><pubDate>Fri, 09 Jul 2021 11:31:46 +0800</pubDate><description><![CDATA[例如人员信息这样的组件，根据id获取信息， 可能一下会请求很多次数据， 前端需要处理
 userRequest: Array&lt;{ key: string, list: Array&lt;any&gt; }&gt; = [];

  timer: null | number = null;

  result: Array&lt;{ k: string, v: User }&gt; = [];

  getUserByUsername(username: User["username"]) {

   ]]></description><category></category></item><item><title><![CDATA[vue中下载图片跨域]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/118391098</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/118391098</guid><author>renyudouhui</author><pubDate>Thu, 01 Jul 2021 17:15:33 +0800</pubDate><description><![CDATA[首先在vue.config.js中配置跨域
      '/upload': {
        //代理图片下载的接口
        target: "http://resource.zhuyiyun.com",
        changeOrigin: true,
        secure: false, // 设置支持https协议的代理
        pathRewrite: {
          '^/upload': ''
        }
      }

由于项目中的请求是走的]]></description><category></category></item><item><title><![CDATA[col 加起来为24的处理一次]]></title><link>https://blog.youkuaiyun.com/renyudouhui/article/details/118090413</link><guid>https://blog.youkuaiyun.com/renyudouhui/article/details/118090413</guid><author>renyudouhui</author><pubDate>Mon, 21 Jun 2021 17:00:36 +0800</pubDate><description><![CDATA[eleList: Ref&lt;Array&lt;EleHandel&gt;&gt; = ref([]);
 // 统一处理col的高度
  handelHeight() {
    // @ts-ignore
    const allCol = Array.from(document.querySelectorAll(".data-item-col")).map(ele =&gt; {
      const col = Array.from(ele.classList).filter(classN..]]></description><category></category></item></channel></rss>