首页
统计
留言
Search
1
PHP中使用反射
995 阅读
2
phpstorm配置SFTP
937 阅读
3
Go语言——结构体
792 阅读
4
PhpStorm 使用 AI 代码生成工具 Codeium
778 阅读
5
关于PHP的垃圾回收机制
762 阅读
后端
PHP
Go
数据库
其他
前端
其他技术
生活杂谈
登录
Search
标签搜索
Laravel
Mysql
RPC
Redis
Liunx
PHP
CSS
ES
算法
开发工具
断点续传
反射
phpstorm
工具
防盗链
CURL
设计模式
面试
Nginx
搜索引擎
quhe.net
首页
栏目
后端
PHP
Go
数据库
其他
前端
其他技术
生活杂谈
页面
统计
留言
搜索到
5
篇与
前端
的结果
2023-06-22
Vue前端项目线上nginx部署后刷新页面404问题
最近公司开发的Vue前端项目,让我在服务器上部署,然后发现刷新页面出现404并且无法通过新窗口单独打开除首页外的其他页面的链接。原因:因为网页上显示的是文件绝对路径,而实际上服务器上是没有该路径的,所以导致刷新会报404解决方法一:vue router mode 默认为hash,这样的url中会带有#,如果改成mode:'history’就能去掉#号,也可以正常访问,但是再次刷新你页面就会出现404const router = new Router({ mode: 'history' }); 解决方法二:修改nginx伪静态配置:location / { try_files $uri $uri/ /index.html; } Apache:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
2023年06月22日
175 阅读
0 评论
1 点赞
2023-04-28
css 伪类和伪元素
什么是伪元素?伪元素 是一个附加至选择器末的关键词,允许你对被选择元素的特定部分修改样式。eg:下例中的 ::first-line伪元素可改变段落首行文字的样式。HTML:<p class="content"> 我们在这里放一下段落abc <br> 这是第二行<br> 这是第三行 </p>复制CSS:.content::first-line { font-weight: bold; color: rebeccapurple; text-transform: uppercase; }复制运行结果:什么是伪类?伪类 是添加到选择器的关键字,指定要选择的元素的特殊状态。 eg:例如,**:hover** 可被用于在用户将鼠标悬停在按钮上时改变按钮的颜色。HTML:<button class="btn">按钮</button>复制CSS:.btn:hover { color: blue; }复制运行结果:注意:与伪类相比,伪类能够根据元素状态改变元素样式。一个选择器中只能使用一个伪元素。伪元素必须紧跟在语句中的简单选择器/基础选择器之后。按照规范,应该使用双冒号(::)而不是单个冒号(:),以便区分伪类和伪元素。但是,由于旧版本的 W3C 规范并未对此进行特别区分,因此目前绝大多数的浏览器都同时支持使用这两种方式来表示伪元素。
2023年04月28日
91 阅读
0 评论
0 点赞
2023-01-05
理解Commonjs、AMD、CMD、ES6的区别
第一阶段:无模块化JavaScript最初的作用仅仅是验证表单,后来会添加一些动画,但是这些js代码很多在一个文件中就可以完成了,所以,我们只需要在html文件中添加一个script标签。后来,随着前端复杂度提高,为了能够提高项目代码的可读性、可扩展性等,我们的js文件逐渐多了起来,不再是一个js文件就可以解决的了,而是把每一个js文件当做一个模块。大概是下面这样:<script src="jquery.js"></script> <script src="jquery_scroller.js"></script> <script src="main.js"></script> 优点比于使用一个js文件,这种多个js文件实现最简单的模块化的思想是进步的缺点污染全局作用域。 因为每一个模块都是暴露在全局的,简单的使用,会导致全局变量命名冲突,当然,我们也可以使用命名空间的方式来解决。对于大型项目,各种js很多,开发人员必须手动解决模块和代码库的依赖关系,后期维护成本较高。依赖关系不明显,不利于维护。 比如main.js需要使用jquery,但是,从上面的文件中,我们是看不出来的,如果jquery忘记了,那么就会报错。第二阶段: CommonJS规范CommonJS就是一个JavaScript模块化的规范,该规范最初是用在服务器端的node的,前端的webpack也是对CommonJS原生支持的。根据这个规范,每一个文件就是一个模块,其内部定义的变量是属于这个模块的,不会对外暴露,也就是说不会污染全局变量。CommonJS的核心思想就是通过 require 方法来同步加载所要依赖的其他模块,然后通过 exports 或者 module.exports 来导出需要暴露的接口。CommonJS模块化规范:1)通过module.exports或exports来暴露模块2)通过require来加载模块CommonJS的特点1)同步加载,一般用于node端2)一次加载,多次使用。对同一个模块而言,只会运行一次,多次使用时会从缓存中获取3)模块加载的顺序,按照它出现的顺序4)代码都运行在模块作用域,不会造成全局污染简单应用// a.js文件 var math = { add:function(a,b){ return a+b; } } module.exports = math //module是代表当前模块,通常通过module.exports来暴露模块//b.js var math = require('./a.js') //模块依赖,通过require导入模块 console.log(math.add(1,2)) //3 一个模块有多个变量// a.js var x = 5; var addX = function (value) { return value + x; }; module.exports.x = x; module.exports.addX = addX;//b.js var example = require('./a.js'); console.log(example.x); // 5 console.log(example.addX(1)); // 6 注意:当被暴露的对象是单一的值时,不能通过exports来暴露,只能通过module.exports来暴露var x = 5 module.exports.x = x //不能使用exports.x = x 优点CommonJS规范在服务器端率先完成了JavaScript的模块化,解决了依赖、全局变量污染的问题,这也是js运行在服务器端的必要条件。缺点这篇文章我们讲的主要是浏览器端js的模块化, 由于 CommonJS 是同步加载模块的,在服务器端,文件都是保存在硬盘上,所以同步加载没有问题,但是对于浏览器端,需要将文件从服务器端请求过来,那么同步加载就不适用了,所以,CommonJS是不适用于浏览器端的。第三阶段: AMD规范之前提到: CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。AMD是一种异步加载模块的方式,主要用在浏览器环境中。主要依赖于require.js库,是requireJs在推广过程中生产的对模块定义的规范。AMD模块化规范1)通过define()方法定义模块require([module], callback) 2.)通过require方法加载模块define(id, [depends], callback) 即通过define来定义一个模块,然后使用require来加载一个模块。 并且,require还支持CommonJS的模块导出方式。使用方法1)先加载require.js(从官网下载最新版本)//通过这种方式先加载requirejs <script src="js/require.js"></script> //为防止加载require.js阻塞页面,可以将其写在页面的底部,或写成以下这种形式 <script src="js/require.js" defer async="true" ></script> //async属性表明要异步加载,避免网页失去响应,IE不支持这个属性,为兼容IE,所以需要添加defer属性 2)创建一个主文件(入口文件)//创建一个main.js,我们要写的代码从这里开始 //在html里导入以下js <script src="js/require.js" data-main="js/main"></script> //data-main的作用时指出我们的入口文件在哪,require.js会第一个加载主文件 3)主文件的写法//若主模块不依赖于其他模块,则不必要使用requirejs//一般而言,主模块要依赖于其他模块,需要使用AMD的require方法来加载依赖的模块//main.js require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){// some code here}); //require第一个参数时一个数组,表示依赖的模块,第二个参数是一个回调,回调的参数表示对应的模块,这样在回调中就可以使用这些模块了 //它的回掉函数只有在所有模块都加载完成才开始执行 4.在主模块中配置模块加载的一些行为(通过require.config()方法)// main.js require.config({paths: {"jquery": "lib/jquery.min","underscore": "lib/underscore.min","backbone": "lib/backbone.min"} }); //require配置一般写在main.js入口文件的顶部 //paths属性表示要加载的文件的路径,可以写本地路径,或服务器路径 //baseUrl属性可以用来改变基目录,上面代码可用以下方式表示require.config({baseUrl: "js/lib",paths: {"jquery": "jquery.min","underscore": "underscore.min","backbone": "backbone.min"} }); 5.定义模块(通过define()方法)//a.js //通过define来定义模块, //如果该模块还依赖其他模块,则第一个参数是一个数组,表示其依赖的模块define(['package/lib'], function(lib){function foo(){lib.log('hello world!');}return {foo: foo}; }); //b.js //在其他模块使用a.jsrequire(['a'], function (a){a.foo() }); 优点适合在浏览器环境中异步加载模块。可以并行加载多个模块。缺点提高了开发成本,并且不能按需加载,而是必须提前加载所有的依赖。第四阶段:CMD规范CMD规范是阿里的玉伯提出来的,实现js库为sea.js。 它和requirejs非常类似,即一个js文件就是一个模块,但是CMD的加载方式更加优秀,是通过按需加载的方式,而不是必须在模块开始就加载所有的依赖。定义方法define(function(){require,exports, module}) require: 导入其他依赖的办法exports、导出的方法 导出的方法CMD导出的三种方式第一种使用exports导出//common.js //使用define定义模块,require、exports、module是define自带的 define(function(require, exports, module){//定义导出的方法function minus(a, b) {return a - b}// 使用exports导出exports.minus = minus }) 第二种使用module导出//common.js //使用define定义模块,require、exports、module是define自带的 define(function(require, exports, module){//定义导出的方法function minus(a, b) {return a - b}// 使用module.exports导出module.exports = {minus} }) 第三种使用return 返回//common.js //使用define定义模块,require、exports、module是define自带的 define(function(require, exports, module){//定义导出的方法function minus(a, b) {return a - b}// 使用return导出return {minus} }) 都可以用同一种方法导入let common= require('./common') // 文件相对路径 //调用减法的方法 console.log(common.minus(5,4)) //结果:1 优点同样实现了浏览器端的模块化加载。可以按需加载,依赖就近。缺点依赖SPM打包,模块的加载逻辑偏重。AMD和CMD的区别前者是对于依赖的模块提前执行,而后者是延迟执行。 前者推崇依赖前置,而后者推崇依赖就近,即只在需要用到某个模块的时候再require。 如下:// AMD define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ... }); // CMD define(function(require, exports, module) {var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b.doSomething()// ... }); 第五阶段: ES6模块化之前的几种模块化方案都是前端社区自己实现的,只是得到了大家的认可和广泛使用,而ES6的模块化方案是真正的规范。 在ES6中,我们可以使用 import 关键字引入模块,通过 exprot 关键字导出模块,功能较之于前几个方案更为强大,也是我们所推崇的,但是由于ES6目前无法在浏览器中执行,所以,我们只能通过babel将不被支持的import编译为当前受到广泛支持的 require。模块化规范一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。export 命令用于规定模块的对外接口。import 命令用于输入其他模块提供的功能。两种导入导出方式第一种导入导出方式 export导出如下// common.js function minus(a,b) {return a-b } // 使用export,一定要使用{}导出,否则会报错 export {minus } 导入如下// import 后采用大括号导入,大括号中是变量名,变量名要跟导出的名称一致 // from 后跟文件文件路径 这里是相对路径 import {minus} from './common.js' //调用方法 minus(5,4) //结果:1 //另一种导入方式 意思就是全部导入 as为重命名为导入的变量重新取一个名字 import * as common from './common.js' // 调用方式common.minus(5,4) //结果:1 第二种导出方式 export default导出如下// common.js function minus(a,b) {return a-b } // 使用export default 后不用使用{} export default minus 导入如下// import 后不采用{}导入,后跟的变量名可以随意更改,想取什么取什么 // from 后跟文件文件路径 这里是相对路径 import minus from './common.js' //调用方法 minus(5,4) //结果:1 //我改为另一个名称 import common from './common.js' // 调用方式 common(5,4) //结果:1 CommonJS、AMD、CMD、ES6比较CommmonJS用于node端,是同步加载的AMD依赖于requirejs,是异步加载的,是提前加载,立即加载CMD依赖于seajs,是异步加载,延后加载,就近加载,用时加载ES6是ES2015的简称,一般通过export来暴露模块,import来导入模块
2023年01月05日
39 阅读
0 评论
0 点赞
2022-05-02
JS实现复制php变量,以及包含换行符的处理方法
在前端开发过程中,有时会需要将后台PHP代码中的变量复制到剪贴板中,以便更方便地使用。同时,如果PHP变量中包含换行符等特殊字符,需要进行特殊的处理。复制PHP变量下面是实现将PHP变量复制到剪贴板的JS代码。javascript复制代码var content ="{$php}"; var temp = $('<textarea>'); $("body").append(temp); temp.val(content).select(); document.execCommand("copy"); temp.remove();解释如下:首先,将要复制的PHP变量存放为content变量。创建一个临时的<textarea>元素,并将其添加到网页的<body>中。将content变量的值赋给临时元素的value属性,并选中该元素中的所有文本。使用execCommand('copy')命令将选中的文本复制到剪贴板中。最后,将临时元素从网页中删除。包含换行符的处理方法如果PHP变量中包含换行符等特殊字符,需对其进行特殊处理,使其能够在JS中正确地显示。下面是处理包含换行符的PHP变量的JS代码。javascript复制代码var content ="{$php}".replace(/,/g, "\\n"); var temp = $('<textarea>'); $("body").append(temp); temp.val(content).select(); document.execCommand("copy"); temp.remove();解释如下:首先,使用正则表达式将PHP变量中的所有逗号(现在php里把换行符转成逗号)替换为\n(换行符)。接着,创建一个临时的<textarea>元素,并将其添加到网页的<body>中。将经过处理的content变量的值赋给临时元素的value属性,并选中该元素中的所有文本。使用execCommand('copy')命令将选中的文本复制到剪贴板中。最后,将临时元素从网页中删除。
2022年05月02日
54 阅读
0 评论
2 点赞
2020-04-04
2020 年 4 月 4 日全国哀悼,如何让你的网站变成灰色的呢?
本站首页换上灰色调,与国同哀。为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院今天发布公告,决定 2020 年 4 月 4 日举行全国性哀悼活动。在此期间,全国和驻外使领馆下半旗志哀,全国停止公共娱乐活动。4 月 4 日 10 时起,全国人民默哀 3 分钟,汽车、火车、舰船鸣笛,防空警报鸣响。如何实现呢:html { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); }
2020年04月04日
524 阅读
0 评论
29 点赞