-
【问题来源】黑龙江农信社【问题简要】开发 vxml 版本自助语音流程时,使用grammer 标签 的 src 属性上送语法文件是,流程跟踪日志中,提示异常【问题类别】vxml 版本自主语音流程开发【AICC解决方案版本】AICC 版本:AICC 22.200.0【问题现象描述】页面中通过 grammar 标签 读取项目中一个 grammar.xml 文件流程文件中提示异常 There was a DEFINE_GRAMMAR failure 语法文件内容如下
-
当涉及到网页元素的实时尺寸变化监测时,element-resize-detector 是一个值得推荐的开源库,本文主要介绍了element-resize-detector监听普通元素的实现示例,感兴趣的可以了解一下目录说明:在进行后台系统开发时,经常会用到一些图表展示,当改变浏览大小后,这些图表本身是没有响应式的,可以借助第三方插件element-resize-detector来监听窗口的变化一、element-resize-detector 安装当涉及到网页元素的实时尺寸变化监测时,element-resize-detector 是一个值得推荐的开源库。它能以惊人的速度实现跨浏览器的元素大小调整监听,比传统方法快了约37倍。让我们深入了解这个神器。1npm install element-resize-detectorelement-resize-detector 使用了两种不同的监听策略:对象方式:修改元素CSS属性使其触发布局更新,从而捕获尺寸变化。滚动方式(默认):通过在元素内部创建滚动区域并监听滚动事件,达到无闪烁、高性能的监控效果。该库在处理性能和兼容性方面做了大量工作,包括:对于静态定位(position: static)的元素,会自动转换为相对定位。添加隐藏元素作为内部监听器,以确保在所有浏览器中的稳定运行。二、插件使用1.插件引入1import elementResizeDetectorMaker from "element-resize-detector";2.创建实例对象1234567let erd = elementResizeDetectorMaker();//如果有快速滚动,如果没有不需要进行如下配置let erdUltraFast = elementResizeDetectorMaker({ strategy: "scroll"});3.监听元素12345678910erd.listenTo( document.getElementById("endlistenEartagEchart"), //第一个参数是要监听的dom function (element) { setTimeout(() => { // that.chartBoxW = // document.getElementById("endlistenEartagEchart").offsetWidth - 30; // that.setEchart(); }, 0); } //第二个参数回调 执行dom变化执行的方法 );到此这篇关于element-resize-detector监听普通元素的实现示例的文章就介绍到这了转载自https://www.jb51.net/javascript/3235458vu.htm
-
介绍 使用 Swagger 你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面官网: swagger.io/ Knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案 使用方式 1. 导入坐标 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> </dependency> 2. 在配置类中加入 knife4j 相关配置 /** * 通过knife4j生成接口文档 * @return */ @Bean public Docket docket() { ApiInfo apiInfo = new ApiInfoBuilder() .title("苍穹外卖项目接口文档") .version("2.0") .description("苍穹外卖项目接口文档") .build(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo) .select() .apis(RequestHandlerSelectors.basePackage("com.sky.controller")) .paths(PathSelectors.any()) .build(); return docket; } 3. 设置静态资源映射,否则接口文档页面无法访问 /** * 设置静态资源映射 * @param registry */ protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } 常用注解 查看效果 附完整配置类代码: package com.sky.config;import com.sky.interceptor.JwtTokenAdminInterceptor;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;/** * 配置类,注册web层相关组件 */@Configuration@Slf4jpublic class WebMvcConfiguration extends WebMvcConfigurationSupport { @Autowired private JwtTokenAdminInterceptor jwtTokenAdminInterceptor; /** * 注册自定义拦截器 * * @param registry */ protected void addInterceptors(InterceptorRegistry registry) { log.info("开始注册自定义拦截器..."); registry.addInterceptor(jwtTokenAdminInterceptor) .addPathPatterns("/admin/**") .excludePathPatterns("/admin/employee/login"); } /** * 通过knife4j生成接口文档 * @return */ @Bean public Docket docket() { log.info("准备生成接口文档..."); ApiInfo apiInfo = new ApiInfoBuilder() .title("苍穹外卖项目接口文档") .version("2.0") .description("苍穹外卖项目接口文档") .build(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo) .select() .apis(RequestHandlerSelectors.basePackage("com.sky.controller")) .paths(PathSelectors.any()) .build(); return docket; } /** * 设置静态资源映射 * @param registry */ protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("开始设置静态资源映射..."); registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }} ———————————————— 原文作者:全网第一菜鸡 转自链接:https://learnku.com/articles/85427 版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。
-
网站>网站用于集中提供各种相关的网页。网页>主页,指网站中的首页,通常命名为index.*。当URL中不包含文件名时,即访问网站的主页。HTML文档> 超文本标记语言或超文本链接标示语言(标准通用标记语言下的一个应用)HTML(HyperText Mark-up Language)是一种制作万维网页面的标准语言,是万维网浏览器使用的一种语言,它消除了不同计算机之间信息交流的障碍。 它是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文件是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML文件的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。<!DOCTYPE html><html><head><meta charset="UTF-8"><title>页面标题</title></head><body>我是快乐的小男孩<img src="images/boy.gif" /></body></html>经浏览器解析后呈现为超媒体页面,如图:
-
【问题来源】黑龙江农信社【问题简要】开发 vxml 版本自助语音流程时,本地修改代码后,服务器疑似存在缓存问题【问题类别】vxml 版本自主语音流程开发【AICC解决方案版本】AICC 版本:AICC 8.0.71【问题现象描述】在本地开发 vxml 版本自助语音流程时,通过华为配置管理系统,将流程文件连接到本地项目。华为服务器疑似存在缓存问题。如:在原有main请求响应代码中,播放音频文件 1050.wav,本地修改代码为 busy.wav后,通过电话拨号。提示音依旧播放的是 1050.wav 内容重启华为服务器 或过了不确定时长的时间后,才能生效变成 busy.wav还有个问题,如下图:经常不定时的出现 这个错误,造成电话直接挂机麻烦帮忙定位下造成这两个问题的原因,谢谢
-
在开发h5项目的时候 经常需要使用window.open 来打开新页面,但有时会出现失效的情况。 问题复现: 在接口请求完成后,根据返回的结果调用window.open 失效 原因:浏览器出于安全的考虑,会拦截掉非用户操作打开的新页面;实际上,在异步的方法中以及非用户操作打开的新页面都会被拦截(不同浏览器不同版本表现不同,不是所有情况都会被拦截,但是任然需要做兼容处理) 例如: fetch(url,option).then(res=>{ window.open('http://www.test.com')})setTimeout(() => { window.open(this.url, '_blank')}, 100)。。。if (success) window.open(data);解决方案:1、尽量让将调用window.open的方法 写在用户事件中,例如: if (success) { Dialog.alert({ content: '即将跳转单证链接', onConfirm: () => { window.open(data); }, }); }交互上的小修改,这样写需要用户手动确定才会跳转2、 使用a标签进行跳转ajax().then(res => { asyncOpen(res.url)})function asyncOpen(url) { var a = document.createElement('a') a.setAttribute('href', url) a.setAttribute("target", "_blank"); a.setAttribute("download", 'name'); document.body.appendChild(a); a.click(); a.remove();}3、使用中转页面一定要把window.open定义在接口请求的外部,保证新开空白窗口不会被拦截。var newWin = window.open('loading page') ajax().then(res => { newWin.location.href = 'target url'}).catch(() => { newWin.close()})———————————————— 版权声明:本文为CSDN博主「MissXu666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/MissXu666/article/details/129210313
-
1 前言 网页端一般会遇到各种文件,比如:txt、doc、docx、pdf、xml、xls、xlsx、ppt、pptx、zip、png、jpg等等。 有时候我们不想要把文件下载下来,而是想在线打开文件预览 ,这个时候如果每一种格式都需要我们去写代码造轮子去实现预览功能就太复杂了,并且自己实现的话会有很多兼容性问题。 这个时候 kkFileView 的出现就解决了我们的问题。 2 kkFileView介绍 kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 kkFileView 官网 kkFileView 码云地址官网 kkFileView github地址官网 3 kkFileView安装 自 v4.1.0 版本开始 kkFileView 不再免费提供 Windows 和 Linux 的发行安装包了,以前旧版本的安装包也取消了下载入口,要下载安装包还要花99块钱进那个KK开源社区群获取。不过我之前下载过 v4.0.0 版,也够用了,为了方便大家我已经上传百度云了,你可以通过下面文章中的链接进行下载,本文的安装使用教程也是基于 v4.0.0 版本进行操作 。 部署指南参考kkFileView - 在线文件预览 下面介绍Windows、Linux、docker三种安装方式。 3.1 下载Windows或Linux的 v4.0.0 安装包 3.1.1 Windows安装包下载 链接:https://pan.baidu.com/s/1YsuYcYB7oGK4w-byM5VUuQ 提取码:jer1 3.1.2 Linux安装包下载 链接:https://pan.baidu.com/s/1saGMphibd7434GNy5L5Lfw 提取码:axnu 3.2 在Windows或Linux上安装 3.2.1 Windows上安装 第一步:下载的 zip 压缩包解压后进入 bin 目录,双击 startup.bat 启动 kkFileView,如图: 第二步:30秒后进入 log 目录查看 kkFileView.log 日志,打印【kkFileView 服务启动完成,耗时:26.8350973s,演示页请访问: http://127.0.0.1:8012 】则说明启动成功。 3.2.2 Linux上安装(centos为例) 第一步:root用户下将 kkFileView-4.0.0.tar.gz 上传到服务器 ,使用命令 tar -zxvf kkFileView-4.0.0.tar.gz 解压,开放 8012 端口。 第二步:root用户下解压后进入 kkFileView-4.0.0/bin 目录,执行 ./startup.sh 开始安装和启动,安装过程中会下载需要的组件需要输入y 第三步:安装字体。若不安装字体转化出的pdf文件可能会因为缺少字体乱码。字体下载(链接:http://kkfileview.keking.cn/fonts.zip)或者 百度云下载(链接:https://pan.baidu.com/s/1TESdE8Xi02NqtnnKlp0BvQ 提取码:lfw5 ) 将下载的字体fonts.zip上传到 /usr/share/fonts 目录解压后执行命令 mkfontscale 若 mkfontscale 提示没有命令则先 yum install mkfontscale 安装命令 再分别依次执行 mkfontscale、mkfontdir、fc-cache 命令。 第四步: 安装完成后 kkFileView-4.0.0/bin/ 目录下使用命令 ./showlog.sh 查看日志 如果出现: 【kkFileView 服务启动完成,耗时:5.99157928s,演示页请访问: http://127.0.0.1:8012 】,则表示安装启动成功。 第五步: 如果日志提示报错信息【找不到office组件,请确认’office.home’配置是否有误 】,则需要下载LibreOffice组件安装。 LibreOffice下载 (链接:https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.4.2/rpm/x86_64/) 或者 百度云下载(链接:https://pan.baidu.com/s/1aRY66KlzZD9UJSo8Gjf2Fg 提取码:6exh ) 将 LibreOffice_7.1.4.2_Linux_x86-64_rpm.tar.gz 上传服务器,然后解压后进入RPMS目录执行 yum localinstall *.rpm 进行安装。 第六步:如果日志提示报错信息【Caused by: java.lang.IllegalStateException: a process with acceptString ‘socket,host=127.0.0.1,port=2001’ is already running】 (1)用 ps -ef|grep java 命令查询出Java相关运行的进程,然后关闭kkFileView相关的进程, 并查看2001和2002端口的进程并关闭该进程。然后再执行 ./startup.sh 启动并查看日志。 (2)如果是安装在Linux上并且关闭了kkFileView相关的进程以及2001和2002端口,启动日志任 然存在该问题,那么可能是你远程连接服务器的软件导致的这个问题,改用window的cmd, 用ssh连接服务器启动程序尝试。 第七步: 如果日志提示报错信息【Caused by: org.artofsolving.jodconverter.office.OfficeException: could not establish connection】,可参考 centos下启动失败:启动office组件失败,请检查office组件是否可用 3.2.3 通过docker安装 第一步:拉取镜像: docker pull keking/kkfileview 第二步:运行: docker run -dit -p 8012:8012 keking/kkfileview 第三步:进入运行起来的容器中,然后可以进入 /opt/kkFileView-4.1.0-SNAPSHOT/bin 安装目录, 运行命令 ./showlog.sh 查看日志 4 kkFileView的配置修改 4.1 修改启动脚本 测试发现如果 kkfileview 安装在 Windows 上预览 txt 文件会乱码,所以需要修改 kkfileview 的 bin 目录下的 startup.bat 脚本。 在最后一行的 java 后添加 -Dfile.encoding=UTF-8 修改后如下: @echo offset "KKFILEVIEW_BIN_FOLDER=%cd%"cd "%KKFILEVIEW_BIN_FOLDER%"echo Using KKFILEVIEW_BIN_FOLDER %KKFILEVIEW_BIN_FOLDER%echo Starting kkFileView...echo Please check log file in ../log/kkFileView.log for more informationecho You can get help in our official homesite: https://kkFileView.keking.cnecho If this project is helpful to you, please star it on cid:link_0/stargazersjava -Dfile.encoding=UTF-8 -Dspring.config.location=..\config\application.properties -jar kkFileView-4.0.0.jar -> ..\log\kkFileView.log4.2 关闭演示页面 kkFileView安装启动成功后可以打开 http://安装的ip:8012 (或者本机 http://127.0.0.1:8012) 查看演示页面上传文件以及查看预览效果。 如果项目上线后为了安全要关闭演示页面,可以在修改kkFileView安装目录的config文件夹中的 application.properties配置文件,将file.upload.disable设置为false禁用演示首页文件上传。 其他配置可根据 官网配置说明 进行配置。 5 kkFileView的使用 只需要创建一个html文件,再加上如下代码: <html> <head> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script> </head> <script> var url = 'https://public.fuyingy.com/79e5c202204201011493290.jpg'; //图片随便写了一个 window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url))); </script></html>转载自https://blog.csdn.net/qq_37284798/article/details/129377354?spm=1001.2014.3001.5502
-
一、箭头函数的介绍 1.1 什么是箭头函数 ES6中允许使用=>来定义函数。箭头函数相当于匿名函数,并简化了函数定义。 1.2 基本语法 // 箭头函数 let fn = (name) => { // 函数体 return `Hello ${name} !`; }; // 等同于 let fn = function (name) { // 函数体 return `Hello ${name} !`; }; 箭头函数在语法上比普通函数简洁多。箭头函数就是采用箭头=>来定义函数,省去关键字function。 函数的参数放在=>前面的括号中,函数体跟在=>后的花括号中 1.3 箭头函数的参数 ①如果箭头函数没有参数,写空括号 //没有参数,写空括号 let fn = () => { console.log('hello'); }; ②如果箭头函数有一个参数,也可以省去包裹参数的括号 //只有一个参数,可以省去参数括号 let fn = name => { console.log(`hello ${name}!`) }; ③如果箭头函数有多个参数,将参数依次用逗号(,)分隔,包裹在括号中。 let fn = (val1, val2, val3, val4) => { return [val1, val2, val3, val4]; } 1.4 箭头函数的函数体 ①如果箭头函数的函数体只有一句执行代码,简单返回某个变量或者返回一个简单的js表达式,可以省去函数体花括号{ } //返回某个简单变量val let f = val => val; // 等同于 let f = function (val) { return val }; //返回一个简单的js表达式num1+num2 let sum = (num1, num2) => num1 + num2; // 等同于 let sum = function(num1, num2) { return num1 + num2; }; ②如果箭头函数的函数体只有一句代码,返回的不是变量和简单的js表达式,而是一个对象。 //错误写法—花括号会被解释为函数体 let getItem = id => { id: id, name: 'gaby' }; //正确写法 let getItem = id => ({ id: id, name: 'gaby' }); ③如果箭头函数的函数体只有一条语句且不需要返回值(最常用于回调函数),加上void关键字 let fn = () => void doesNotReturn(); 1 箭头函数用于回调函数,常见简洁 //栗子1 //普通函数 [1, 2, 3].map(function (x) { return x + x; }); //ES6箭头函数 [1, 2, 3].map(x => x + x); //栗子2 //普通函数 var result = [2, 4, 5, 1, 6].sort(function (a, b) { return a - b; }); //ES6箭头函数 var result = [2, 4, 5, 1, 6].sort((a, b) => a - b); 二、箭头函数的this指向规则 2.1 箭头函数没有原型prototype,因此箭头函数没有this指向 let fn = () => { console.log('Hello World !') }; console.log(fn.prototype); // undefined 2.2 箭头函数不会创建自己的this,如果存在外层第一个普通函数,在定义的时候会继承它的this 箭头函数没有自己的this指向,它会捕获自己定义所处的外层执行环境,并且继承这个this值。箭头函数的this指向在被定义的时候就确定了,之后永远都不会改变。(!永远) (1)栗子1 var id = 'Global'; //普通函数 function fn1() { setTimeout(function () { console.log(this.id) }, 1000); } //箭头函数 function fn2() { setTimeout(() => { console.log(this.id) }, 1000); } fn1.call({ id: 'obj' });//Global fn2.call({ id: 'obj' });//obj 解析:普通函数的setTimeout 一秒后执行是在全局作用域,所有this指向window对象,this.id指向了全局变量id,输出Golbal。箭头函数的this在定义的时候就确定了,继承fn2的执行环境中的this,fn2的this指向被call方法改变绑定到obj这个对象 (2)栗子2 var id = 'Global'; var obj = { id: 'OBJ', a: function () { console.log(this.id) },//方法a普通函数定义 b: () => { console.log(this.id) }//方法b用箭头函数定义 }; obj.a();//OBJ obj.b();//Global 解析:普通函数作为对象的方法调用,this指向所属的对象(谁调用它就指向谁),this.id 就是obj.id;箭头函数继承定义它的执行环境的this,指向window对象,指向全局变量,输出Global。花括号{}无法形成一个单独的执行环境,所有它依然在全局中。 2.3 箭头函数的this是继承而来的永远不会变,call/apply/bind也无法改变 .call()/.apply()/.bind()方法可以用来动态修改函数执行时this的指向,但由于箭头函数的this定义时就已经确定且永远不会改变 var name = 'gaby' var person = { name: 'gabrielle', say: function () { console.log('say hello', this.name) }, //普通函数 say2: () => { console.log('say2 hello', this.name) } //箭头函数 } person.say.call({ name: 'Mike' }) person.say2.call({ name: 'Amy' }) 解析:say的普通函数通过call调用已经改变this指向。say2箭头函数调用call绑定尝试改变this指向,但是仍然打印出外一层普通函数的this指向,window对象的全局变量name。 2.4 箭头函数this指向只能间接修改 间接修改:修改被继承的普通函数的this指向,箭头函数的this指向也会跟着改变。 箭头函数的this指向定义时所在的外层第一个普通函数,跟使用的位置没有关系。 let al let aObj = { msg: 'a的this指向' }; bObj = { msg: 'b的this指向' }; a.call(aObj); //将a的this指向aObj b.call(bObj); //将b普通函数的this指向bObj 箭头函数内部的this指向也会指向bObj function b() { al(); } function a() { al = () => { console.log(this, 'this指向定义时外层第一个普通函数 ') }; } 2.5 箭头函数外层没有函数,严格模式和非严格模式下它的this都会指向window全局对象 箭头函数的this指向继承自外层第一个普通函数的this,那么如果没有外层函数,它的this指向哪里? this的绑定规则:非严格模式下,默认绑定的this指向全局对象,严格模式下this指向undefined。 如果箭头函数外层没有普通函数继承,箭头函数在全局作用域下,严格模式和非严格模式下它的this都会指向window(全局对象) 2.6 多层嵌套函数this指向 箭头函数中的this引用的是最近作用域中的this,是向外层作用域中,一层层查找this,直到有this的定义。 2.7 箭头函数不能作为构造函数使用new 构造函数做了什么? ①JS内部首先会先生成一个对象 ②再把函数中的this指向该对象 ③然后执行构造函数中的语句 ④最终返回该对象实例 箭头函数没有自己的this,this继承外层执行环境中的this,且this永远不会改变。new会报错 let fn = (name, age) => { this.name = name; this.age = age; }; let person = new fn('gaby', 20) 2.8 箭头函数不支持new.target ES6新引入的属性,普通函数可以通过new调用,new.target返回该函数的引用。用于确定构造函数是否为new调用。箭头函数并不能作为构造函数使用new,自然也不支持new.targer。 (1)箭头函数的this指向全局对象,在箭头函数中使用箭头函数会报错 let fn = () => { console.log(new.target) }; fn() (2)箭头函数的this指向普通函数,它的new.target就是指向该普通函数的引用 new fn2(); function fn2() { let fn = () => { console.log(new.target) }; fn(); } 三、箭头函数的arguments规则 3.1 箭头函数没有自己的arguments (1)箭头函数处于全局作用域中 箭头函数的this指向全局对象,会报arguments未声明的错。 let fn = name => { console.log(arguments) } let fn2 = function (name) { console.log(arguments) } //fn() fn2() let fn = name => { console.log(arguments) } let fn2 = function (name) { console.log(arguments) } fn() fn2() 解析:普通函数可以打印arguments,箭头函数报错。因为箭头函数处于全局作用域中,在全局作用域没有arguments的定义,箭头函数本身没有arguments,所以报错。 (2)箭头函数的this如果指向普通函数,它的argumens继承于该普通函数 let fn2 = function (name) { console.log('fn2:', arguments) let fn = name => { console.log('fn:', arguments) } fn() } fn2('gaby') 解析:两个函数打印的argument相同,都是fn2函数的arguments。 总结 箭头函数没有自己的arguments对象。在箭头函数中访问arguments实际上获得的是外层局部(函数)执行环境中的值。 3.2 可以用rest替代,rest参数获取函数的多余参数 rest是ES6的API,用于获取函数不定数量的参数数组。这个API可以用来替代arguments。 (1)基本用法 //形式是...变量名 let fn = (first, ...arr) => { console.log(first, arr); } fn(1, 2, 3, 4); 解析:rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。获取函数的第一个确定的参数,以及用一个变量接收其他剩余函数的实例。 (2)使用注意事项 ①rest必须是函数的最后一位参数 let a = (first, ...rest, three) => { console.log(first, rest, three); }; a(1, 2, 3, 4); ②函数的length属性不包括rest (3)rest和arguments函数比较 ①箭头函数和普通函数都可以使用rest参数,而arguments只能普通函数用。 ②接收参数rest比arguments更加灵活,完全可以自定义。 ③rest是一个真正的数组可以使用数组API,arguments只是一个类数组。 3.3 箭头函数不支持重复函数参数的名称 function fn(name, name) { console.log('fn2:', name) } let fn2 = (name, name) => { console.log('fn:', name) } fn('wang', 'gaby') fn2('wang', 'gaby') 3.4 箭头函数不能用作Generator,不能使用yeild关键字 四、箭头函数的注意事项 ①函数箭头一条语句返回对象字面量,需要加括号。 ②箭头函数在参数和箭头之间不能换行 ③箭头函数的解析顺序相对||靠前 五、箭头函数不适用场景 (1)对象方法,且方法使用了this 对象无法构造单独的作用域 var name = 'gaby' var person = { name: 'gabrielle', say: function () { console.log('say hello', this.name) }, //普通函数 say2: () => { console.log('say2 hello', this.name) } //箭头函数 } person.say() person.say2() 解析:person.say2()方法是一个箭头函数,调用person.say2()的时候this指向全局对象,达不到预期。对象无法构成单独的作用域,定义say2()箭头函数的时候作用域在全局作用域。 (2)回调函数的动态this var button = document.querySelector('.btn'); button.addEventListener('click', () => { this.classList.toggle('on'); }); 解析:报错。按钮点击是一个回调函数,而箭头函数内部的this指向外一层普通函数的this,在这里就是window,所以报错。改成普通函数就不会报错 六、箭头函数与普通函数简单区别总结 (1)箭头函数语法更简洁清晰,快捷。 (2)箭头函数没有原型prototype,并不会自己创建this,并且this不能被修改,call等都不能修改到。只能间接修改被继承的this (3)箭头函数的this在定义时就定了,继承外一层的普通函数 (4)如果箭头函数外一层再外一层都不能找到普通函数,在严格和非严格情况下都会指向window对象 (5)箭头函数的this指向全局,使用arguments会报未声明的错误 (6)箭头函数的this指向外一层的普通函数,使用argument继承该普通函数 (7)箭头函数不能构造函数,不能new.target,不能new,没有constructor (8)箭头函数不支持重复命名参数,普通函数可以重复命名参数 ———————————————— 版权声明:本文为CSDN博主「傲娇味的草莓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_45709829/article/details/123931582
-
部分代码不法暂时 某尾有原文链接前言 学了HTML、CSS和JS有了一个月了,JS还未学完,偷懒写一个小项目,用了一个下午,顺便巩固一下所学知识。(内容比较简陋,适合新手) 源代码:https://github.com/yeziyuhai/QQ-login-interface 简介 左边是我的,右边是官方的。没有设计稿和素材,只能自己找,所以是无法做到一模一样的,不够这样子也差不多了。 布局思路 很明显,简陋的做法是上下两个盒子,中间头像可以定位上面的父级也可以定位下面的父级,这里我选择的是上面,中间内容用一个表单包裹。注册账号和二维码使用定位,父级是大盒子。 .html <!-- 登录界面 --> <div> <div class="login"> <!-- 顶部 --> <div class="top"> <div class="left"> <span class="iconfont icon-QQ"></span>QQ </div> <div class="right"> <span class="iconfont icon-shezhi"></span> <span class="iconfont icon-jianhao"></span> <span class="iconfont icon-chenghao"></span> </div> <div class="head"> <div class="green"></div> </div> </div> <!-- 底部 --> <div class="bottom"> <!-- 表单 --> <form action="javascript:;"> <div class="input"> <div class="text"> <label for=""><span class="iconfont icon-QQ"></span></label> <label for=""><span class="iconfont icon-xiala"></span></label> <input type="text" placeholder="QQ号码/手机/邮箱" name="uname"> </div> <div class="password"> <label for=""><span class="iconfont icon-suoding_huaban"></span></label> <label for=""><span class="iconfont icon-jianpan_o"></span></label> <input type="password" placeholder="密码"> </div> </div> <div class="check"> <!-- 点击文字也可以选中 --> <label><input type="checkbox" >自动登录</label> <label><input type="checkbox">记住密码</label> <a href="https://accounts.qq.com/find?aquin" target="_blank">找回密码</a> </div> <input type="submit" value="登录" class="loginBtn"> </form> <!-- 其他 --> <a href="https://ssl.zc.qq.com/v3/index-chs.html?from=client®key=1720F6EE975B2AFF081EC88BCAE91F145C04012178E039924F1CC17DB69AC184&ADUIN=0&ADSESSION=0&ADTAG=CLIENT.QQ.5929_NewAccount_Btn.0&ADPUBNO=27255" class="signup" target="_blank">注册账号</a> <span class="iconfont icon-ico"></span> <!-- 手机登录二维码 --> </div> <div class="mobile"> <img src="./images/erweima.png" alt=""> <p>用QQ手机版扫描二维码安全登录</p> <button class="back">返回</button> </div> <!-- 设置 --> <div class="setup"> <p>懒得弄了</p> <button class="back">返回</button> </div> </div> </div>相关代码 颜色渐变动画 思路是渐变45度角倾斜,之后动画改变定位,当然和官方的不一样,做出差不多效果就行。 .css .login .top { position: relative; width: 100%; height: 40%; background: linear-gradient(-45deg, #23A6D5, rgba(106, 103, 255), rgba(158, 81, 255), #23A6D5, #23D5AB); background-size: 400% 400%; animation: bg 4s infinite linear forwards; color: #fff; } @keyframes bg { 0% { background-position: 0 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0 50%; } 头像 头像绝对定位,顶部相对定位,小绿点绝对定位。 .login .top .head { position: absolute; left: 50%; top: 100%; width: 50px; height: 50px; border-radius: 50%; border: 2px solid #fff; transform: translate(-50%, -50%); box-shadow: 0px 5px 10px 0px rgba(118, 118, 118, 0.4); background-image: url(/images/head.png); background-size: contain; background-repeat: no-repeat; background-color: rgba(234, 28, 39); } .login .top .head .green { position: absolute; right: -10px; bottom: -8px; width: 14px; height: 14px; border-radius: 50%; border: 2px solid #fff; transform: translate(-50%, -50%); box-shadow: 0px 5px 10px 0px rgba(118, 118, 118, 0.4); background-color: rgba(9, 241, 117); } 表单区域 直接搬.less过来,清除一些。这里面挺多细节的,先说好字体大小浏览器最小只能是12px,除非你把自己浏览器最小字号调到10px,视觉上好看一些,不然下面复选框的字会换行。 添加了textChange类,因为需要点击输入框之后样式的改变。 这里耗费我比较多的时间,挺多细节,毕竟我这个人追求完美。 .less form { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); text-align: center; margin-top: 8px; .input { .text { position: relative; width: 100%; border-bottom: 1px solid #ccc; margin-bottom: 5px; .icon-QQ { position: absolute; left: 0; top: 0; color: rgba(184, 186, 188); } .icon-xiala { position: absolute; right: 0; top: 0; } } .password { position: relative; width: 100%; border-bottom: 1px solid #ccc; .icon-suoding_huaban { position: absolute; left: 2px; top: 4px; font-size: 12px; color: rgba(184, 186, 188); } .icon-jianpan_o { position: absolute; right: 0; top: 0; } } // 要放在后面,不然层叠 .textChange { border-bottom: 1px solid rgba(28, 196, 252); .icon-QQ { color: rgba(28, 196, 252); } } .passWordChange { border-bottom: 1px solid rgba(28, 196, 252); .icon-suoding_huaban { color: rgba(28, 196, 252); } } input { width: 80%; height: 20px; /* 去掉默认边框样式 */ border: 0; outline: none; } } .check { display: flex; justify-content: space-between; width: 100%; margin: 5px 0; font-size: 10px; color: rgba(166, 166, 166); // 多选框大小 input { // ohhhhhhhhhhh float: left; transform: scale(.8); } label { position: relative; margin-right: 12px; } a { color: rgba(166, 166, 166); } a:hover { color: rgba(166, 190, 177); } } // 点击登录 .loginBtn { width: 100%; height: 28px; border-radius: 3px; background-color: rgba(28, 196, 252); color: #fff; font-size: 12px; } .loginBtn:active { background-color: rgba(34, 174, 250); } } .signup { position: absolute; left: 0; bottom: 0; margin: 5px; font-size: 10px; color: rgba(166, 166, 166); } .signup:hover { color: rgba(166, 190, 177) } JS相关 拖拽界面、界面关闭、输入框显示、点击二维码使用手机登录 部分代码不法暂时 某尾有原文链接 .js // window.onload是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像,脚本文件,CSS文件等),就调用的处理函数。 window.addEventListener('load', function() { // 1.登录界面 // 关闭 var jianhao = this.document.querySelector('.icon-jianhao'); var chenghao = this.document.querySelector('.icon-chenghao'); var login = this.document.querySelector('.login'); jianhao.addEventListener('click', function() { login.style.display = 'none'; }) chenghao.addEventListener('click', function() { login.style.display = 'none'; }) // 输入框 var text = this.document.querySelector('.text'); var password = this.document.querySelector('.password'); var textInput = text.querySelector('input'); var passwordInput = password.querySelector('input'); textInput.addEventListener('focus', function() { this.placeholder = ''; text.className = 'text textChange'; }) textInput.addEventListener('blur', function() { this.placeholder = 'QQ号码/手机/邮箱'; text.className = 'text'; }) passwordInput.addEventListener('focus', function() { this.placeholder = ''; password.className = 'password passWordChange'; }) passwordInput.addEventListener('blur', function() { this.placeholder = '密码'; password.className = 'password'; }) // 拖拽界面 // 新的坐标 = 鼠标离盒子内距离 - 鼠标距离在网页距离 var top = this.document.querySelector('.top'); top.addEventListener('mousedown', function(e) { var x = e.pageX - login.offsetLeft; var y = e.pageY - login.offsetTop; document.addEventListener('mousemove', move); function move(e) { login.style.left = e.pageX - x + 'px'; login.style.top = e.pageY - y + 'px'; } document.addEventListener('mouseup', function() { document.removeEventListener('mousemove', move); }) }) // 手机登录 var ico = this.document.querySelector('.icon-ico'); var mobile = this.document.querySelector('.mobile'); var bottom = this.document.querySelector('.bottom'); var head = this.document.querySelector('.head'); var back = this.document.querySelector('.back'); ico.addEventListener('click', function() { mobile.style.display = 'block'; bottom.style.display = 'none'; head.style.display = 'none'; }) back.addEventListener('click', function() { bottom.style.display = 'block'; head.style.display = 'block'; mobile.style.display = 'none'; }) }) 总结 多动手技术才会提升,写代码才会熟练,之后也会更新这一系列文章。 ———————————————— 版权声明:本文为CSDN博主「叶子与海」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/btufdycxyffd/article/details/127507693
-
部分代码无法暂时 某尾有原文链接可查HTML+CSS+JavaScript实现 先点赞后观看,养成好习惯 “不想动手的小伙伴可以直接拿网盘成品” 阿里云盘------提取码: 0d5j 效果图 注:任意浏览器都可以,建议使用谷歌浏览器 代码部分 代码如下仅供参考 可以直接拿去复制粘贴 <!DOCTYPE html> <html> <head> <title></title> <script src="js/jquery.min.js"></script> </head> <style> * { padding: 0; margin: 0; } html, body { height: 100%; padding: 0; margin: 0; background: #000; } .aa { position: fixed; left: 50%; bottom: 10px; color: #ccc; } .container { width: 100%; height: 100%; } canvas { z-index: 99; position: absolute; width: 100%; height: 100%; } </style> <body> <!-- 樱花 --> <div id="jsi-cherry-container" class="container"> <audio autoplay="autopaly"> <source src="renxi.mp3" type="audio/mp3" /> </audio> <img class="img" src="./123.png" alt="" /> <!-- 爱心 --> <canvas id="pinkboard" class="container"> </canvas> </div> </body> </html>
-
如何让单选框选中后下次进入后还能保持选中啊?或者如何让网页自动判断单选框被选择过?
-
给大家安利一个免费且实用的前端刷题(面经大全)网站,👉点击跳转到网站。 本节教程我会带大家使用 HTML 、CSS和 JS 来制作一个 简易版英雄联盟小游戏 本节示例将会实现如下所示的效果: 在线演示地址:https://code.haiyong.site/moyu/damaoxian/ 源码也可在文末进行获取 ✨ 项目基本结构 大致目录结构如下(共27个子文件): ├── css │ └── style.css ├── js │ ├── Base64Images.js │ ├── cocos2dtgme.js │ └── app2.js ├── res │ ├── bg │ │ ├── map1_01.jpg │ │ ├── map1_02.jpg │ │ ... │ │ └── map1_09.jpg │ ├── npc.png │ ... │ └── start.png └── index.html 场景展示 HTML源码 <img src='share.png' width=1 height=1 /> <div class="orient" id="orient"><p>请在竖屏情况下使用</p></div> <div id="loadicon"><img id="img1"/><br/><img id="img2"/><br/><img id="img3"/></div> <canvas id="gameCanvas" width="445" height="700"></canvas> CSS 源码 html,body html, body { background-color: #191919; margin: 0; padding: 0; width: 100%; height: 100%; text-align: center } id 为 loadicon 的 div #loadicon { margin-top: 250px; } id 为 orient 的 div #orient { margin-top: 50px; } 1 2 3 p 标签 p { color: #FFFFFF; font-size: 24 } JS 源码 js 代码较多,这里提供部分,完整源码可以在文末下载 横屏提示 function orientationChange() { if (window.orientation == 90 || window.orientation == -90) { document.getElementById("gameCanvas").style.display = "none" document.getElementById("orient").style.display = "block" } else { document.getElementById("gameCanvas").style.display = "block" document.getElementById("orient").style.display = "none" } } document.getElementById("orient").style.display = "none"; orientationChange() window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", orientationChange, false); function trace(v) { // console.log(v) } var ccConfig = { "debugMode": 0, "showFPS": false, "frameRate": 30, "id": "gameCanvas", "renderMode": 1, "engineDir": "./../", "modules": ["cocos2d"], "jsList": [] } document["ccConfig"] = ccConfig; document.getElementById("img2").src = cc._loadingImage; document.getElementById("img3").src = cc.tgideasLogo; var GD = {} GD.GETNUM = 0; GD.SCORE = 0; GD.isApp = true, GD.isWin = false; GD.MAXHITUM = 0; GD.SHARE = "我没能完成勘探新召唤师峡谷的,你行你来啊!" GD.MAXTIME = 60; GD.SOUND = false; GD.USETIME = 0; function complete() { orientationChange(); document.getElementById("loadicon").style.display = "none"; cc.game.run(); } Base64Images.js var cc = cc || {}; cc.barWidth=265; cc.barHeight=25; cc.barColor=[255,255,0,255]; cc.barBgColor=[41,41,41,255]; cc.bglayerColor=[25,25,25,255] cc.tglogotexture2d=null; cc._loadingImage = "data:image/gif;base64,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" cc.tgideasLogo="data:image/png;base64,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"; cc._fpsImage = "data:image/png;base64,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"; cc._loadingbar="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQwAAAAZCAYAAADE4BAPAAABcUlEQVR4nO3bsUpcURSF4X8rA8EHMMGnEGxEEVLmNVIFC0sxYKtFgoUkVZr4JoEYAmkF30AQsVMQBpLMtnAax+2MxdzJifxfd9n7wqoWl8s5IEmSJEmS1L6YtJCZc0/Zk/TfSiAjIictPloEw6JYBnaBVWBpavEktWIAnAHHwMeIOB23XBZGZi4A29yVRW/aCSU1J4FrYA84jIg/1dKDwsjMeeAzsNlpPEkt6gOfImKnGt4rjMwM4DXwrftckhp1BbyJiF+jg7ni+d1MIklq1QvgbTWoCmOj8ziSWtYD1qvBaGEAvOo2i6TGBbBYDarCkKRSVRgXM08hqSUJXFaD0cIYAD86jyOpZb+Bn9WgKowvnceR1LI+cFQN7hXG8Cz5MfB1BqEktacPHFVnMKD4hxERf4Et4AN3XxySnr8EboB94P1jS+Mun80DK8OX14CXUw4o6d8bAOfAd+AAOBl3a9Xr7ZKefL1dkiRJkiRJkp6VW+6FRsNvbjMxAAAAAElFTkSuQmCC"; cc._loaderImage = "data:image/png;base64,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" /* |xGv00|0cb03e49192ffd9f81ac0947222ee14e */ 图片资源 一共两百多张图片,全都打包放在文末的下载链接里了。 源码下载 1.CSDN资源下载(需要VIP):https://download.csdn.net/download/qq_44273429/86861932 2.从学长的资源网下载(更优惠):https://code.haiyong.site/579/ ———————————————— 版权声明:本文为CSDN博主「鲸落✗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_53544522/article/details/127609148
-
HTC实现鼠标放上去超链接的文字逐个加色效果link.htc css文件中的调用方法 A { FILTER: progid:dximagetransform.microsoft.gradientwipe(duration=1); BEHAVIOR: url(jcss/link.htc); HEIGHT: 1px; TEXT-DECORATION: none }
-
保存为 五子棋.hta,运行即可看到效果 五子棋界面 - zh159 ID="MyhyliApp" APPLICATIONNAME="五子棋界面 - zh159" BORDER="thin" BORDERSTYLE="" VERSION="1.0" SCROLL="no" ICON="C:\WINDOWS\System32\wuauclt.exe" INNERBORDER="no" CONTEXTMENU="no" CAPTION="yes" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes" SYSMENU="yes" WINDOWSTATE="normal" NAVIGABLE="yes" /> 电脑先下直接点击为玩家先下
-
目录Python读取HTML表格pd.read_html读取数据不完整问题解决办法Python读取HTML表格数据部门提供的数据是xls格式的文件,但是执行读取xls文件的脚本报错。xlrd报错:xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<html xm'读取xlrd的脚本123456789101112131415161718data_lines = read_excel_file(self.file_path) def read_excel_file(file_path): """ 读取excel文件 """ import xlrd print('[Info] excel file: {}'.format(file_path)) book = xlrd.open_workbook(file_path) sheet = book.sheet_by_index(0) data_lines = [] for row in range(0, sheet.nrows): line_data = [] for column in range(0, sheet.ncols): val = sheet.cell(row, column).value line_data.append(val) data_lines.append(line_data) return data_lines # 二维数组原因是文件格式是HTML表格,参考python xlrd unsupported format, or corrupt file.使用pandas的read_html读取文件,同时替换nan为空字符,数据格式保持一致。1234567891011121314151617def read_html_table(file_path): """ 读取html表格 """ import pandas as pd pd_table = pd.read_html(file_path) df = pd_table[0] # num_col = df.shape[1] # num_row = df.shape[0] df_data = df.values.tolist() df_data = df_data[1:] for r_idx, row in enumerate(df_data): for c_idx, value in enumerate(row): # 判断nan,参考https://stackoverflow.com/questions/944700/how-can-i-check-for-nan-values if value != value: df_data[r_idx][c_idx] = "" return df_data读取问题解决。pd.read_html读取数据不完整问题问题:有一个较大的表格数据存在了html中,打算用read_html直接取出来这部分数据,但后来发现read_html读取的数据不完整,后来检查html的table都没有任何问题解决办法pd.read_html的默认解析器为 'lxml' ,添加参数flavor='bs4'便可解决
推荐直播
-
0代码智能构建AI Agent——华为云AI原生应用引擎的架构与实践
2024/11/13 周三 16:30-18:00
苏秦 华为云aPaaS DTSE技术布道师
大模型及生成式AI对应用和软件产业带来了哪些影响?从企业场景及应用开发视角,面向AI原生应用需要什么样的工具及平台能力?企业要如何选好、用好、管好大模型,使能AI原生应用快速创新?本期直播,华为云aPaaS DTSE技术布道师苏秦将基于华为云自身实践出发,深入浅出地介绍华为云AI原生应用引擎,通过分钟级智能生成Agent应用的方式帮助企业完成从传统应用到智能应用的竞争力转型,使能千行万业智能应用创新。
去报名 -
TinyEngine低代码引擎系列第2讲——向下扎根,向上生长,TinyEngine灵活构建个性化低代码平台
2024/11/14 周四 16:00-18:00
王老师 华为云前端开发工程师,TinyEngine开源负责人
王老师将从TinyEngine 的灵活定制能力出发,带大家了解隐藏在低代码背后的潜在挑战及突破思路,通过实践及运用,帮助大家贴近面向未来低代码产品。
即将直播 -
华为云AI入门课:AI发展趋势与华为愿景
2024/11/18 周一 18:20-20:20
Alex 华为云学堂技术讲师
本期直播旨在帮助开发者熟悉理解AI技术概念,AI发展趋势,AI实用化前景,了解熟悉未来主要技术栈,当前发展瓶颈等行业化知识。帮助开发者在AI领域快速构建知识体系,构建职业竞争力。
即将直播
热门标签