vue读取全局配置

创建全局配置文件public/static/config.js window.config = { androidUrl:"https://Android-arm64.apk", googleplayUrl:"#", appsoreUrl:"#", windowsUrl:"#", macUrl:"#", } 在index.html中引入js <head> <script type="module" src="/static/config.js"></script> </head> 在需要的vue中可以直接使用 <script setup> import { ref } from 'vue'; let downUrls = ref(window.config) console.log(downUrls.androidUrl); </script> <div class="download-icon"> <a :href="`${downUrls.appsoreUrl}`" > <img src="../../assets/images/down_appstore.svg" alt=""> </a> <a :href="`${downUrls.googleplayUrl}`" > <img src="../../assets/images/down_googleplay.svg" alt=""> </a> <a :href="`${downUrls.androidUrl}`" > <img src="../../assets/images/down_android.svg" alt=""> </a> <a :href="`${downUrls.windowsUrl}`" > <img src="../../assets/images/down_windows.svg" alt=""> </a> <a :href="`${downUrls.macUrl}`" > <img src="../../assets/images/down_mac.svg" alt=""> </a> </div> 或 <div class="footer-right"> <ul> <li v-for="(v, i) in footerlist" :key="i"> <p>{{ v.title }}</p> <div v-for="(item, j) in v.list" :key="j" @click="clickFoot(i,j)">{{ item.label }}</div> </li> </ul> </div> export default { setup() { const footerlist = ref( }, }, methods: { scrollToElement(refID) { // this.$nextTick(() => { // const element = document.getElementById("service"); // console.log(element); // this.$refs.service.$el.scrollIntoView({ behavior: 'smooth' }); // }); let time=setTimeout(()=>{ this.$nextTick(()=>{ let top=0; let targetElement=document.getElementById(refID); if(targetElement){ // 获取元素距离顶部的距离 top=targetElement.offsetTop; } if(top>0){ // 滚动到指定位置 window.scrollTo({ top: top, behavior: 'smooth' }); } clearTimeout(time); time=null; }) },300); }, clickFoot(i,j) { let clickData = this.footerlist.list; //type,1:打开新的连接,2:跳转到页内指定位置,3:跳转网站内路由页面 switch(clickData.type){ case 1: if( clickData.data && clickData.data != "" ){ window.open(clickData.data, '_blank'); } break; case 2: this.scrollToElement(clickData.data); break; case 3: this.$router.push(clickData.data); window.scrollTo(0, 0);

怎么在div中设置鼠标滑过变超链接

要在div中设置鼠标滑过时变成超链接,可以通过 CSS为div添加:hover伪类选择器,并使用cursor: pointer; 使得鼠标指针在滑过时变成手指形状。然后,可以使用text-decoration: underline;为文本添加下划线,表示它是可点击的。当然,实际上这只是一个div,要变成真正的超链接,你需要添加点击事件处理器,使用JavaScript来处理点击后的行为(通常是导航到另一个页面)。 以下是实现这一功能的示例代码: HTML: <div class="link" id="myLink">这是一个可点击的div</div> .link { cursor: pointer; text-decoration: underline; color: blue; } .link:hover { color: red; } document.getElementById('myLink').onclick = function() { window.location.href = 'https://www.example.com'; }; 当用户将鼠标悬停在div上时,文本颜色会变成红色,并且在点击时会导航到'https://www.example.com'。

动态修改div 自定义标签值

在HTML中,自定义标签的值通常存储在标签的属性中。如果你想动态地修改这些自定义属性的值,你可以使用JavaScript来实现。 以下是一个简单的例子,展示了如何使用JavaScript动态修改div元素的自定义属性值: HTML: <div id="myDiv" data-custom="initialValue">这是一个div</div> <button onclick="changeCustomValue()">修改自定义标签值</button> function changeCustomValue() { var div = document.getElementById('myDiv'); div.dataset.custom = 'newValue'; // 修改自定义属性值 } 在这个例子中,我们有一个带有自定义data-custom属性的div元素。当用户点击按钮时,changeCustomValue函数会被调用,这个函数会获取div元素,并将其data-custom属性的值修改为newValue。 注意,dataset属性允许你以属性访问形式操作自定义数据属性。例如,div.dataset.custom访问data-custom属性的值,而div.dataset.custom = 'newValue'则设置新的值。

Vue.js中全局替换字体及font-family 自定义字体

全局字体替换 添加自定义字体 首先,你需要将自定义字体文件(如.ttf, .woff, .woff2等格式)添加到项目的静态资源目录,通常是src/assets下。 链接字体文件 接下来,在项目的主入口文件(通常是src/main.js)或者在public/index.html头部添加CSS链接,以加载字体文件。如果是在Vue CLI项目中,你可能需要在public目录下的index.html中添加: <link rel="stylesheet" href="<path-to-your-fonts-css>"> 或 import '@/assets/css/index.css' 这里的应该指向你创建的CSS文件,该文件包含了字体的@font-face规则。 编写@font-face规则 在你的CSS文件中,编写@font-face规则来定义自定义字体: @font-face { font-family: 'YourFontName'; src: url('<path-to-your-font-file>.woff2') format('woff2'), url('<path-to-your-font-file>.woff') format('woff'); font-weight: normal; font-style: normal; } 确保路径正确指向字体文件。 如: @font-face { font-family: 'NotoSans-SC'; /* 定义一个新的字体名称 */ src: url('/src/assets/font/NotoSans-SC.ttf'); /* 指定字体文件的URL和格式 */ font-weight: normal; /* 设置字体的粗细 */ font-style: normal; /* 设置字体的样式(如斜体) */ } 设置全局font-family 在Vue项目中,你可以通过在src/App.vue或全局样式文件(如src/styles/global.css)中设置font-family属性来全局应用自定义字体: body { font-family: 'YourFontName', sans-serif; } 这样,整个应用将使用YourFontName字体,如果该字体不可用,则回退到默认的无衬线字体。 使用自定义字体图标 引入字体图标库 对于字体图标,如Font Awesome或Iconfont,你同样需要将图标库的字体文件添加到项目中,并在CSS中定义使用规则。 在组件中使用字体图标 在Vue组件中使用字体图标时,可以像使用普通HTML元素一样使用标签,并添加相应的类名: <i class="fa fa-windows"></i> 确保你的CSS中包含了对字体图标的定义,如: .fa-windows:before { content: "\f1eb"; } 其中\f1eb是该图标在字体库中的Unicode字符编码。 字体格式比较 OTF (OpenType Font): 特点:支持高级排版特性,如连字、替代字符。 优点:兼容性好,适用于复杂排版需求。 选择原因:适合需要高质量排版的项目。 TTF (TrueType Font): 特点:广泛使用,支持大多数操作系统。 优点:良好的可读性,适合屏幕显示。 缺点:文件相对较大,不支持部分高级排版特性。 WOFF/WOFF2 (Web Open Font Format): 特点:专为网页设计,基于压缩的 TTF/OTF。 优点:文件小,加载快,支持现代浏览器。 缺点:不兼容较旧的浏览器。 EOT (Embedded OpenType): 特点:微软开发,主要用于旧版 IE 浏览器。 优点:支持 IE 浏览器。 缺点:逐渐被淘汰,不支持其他浏览器。

html 跳转到页面指定位置

创建目标组件并添加目标元素 假设我们想在 About.vue 组件中滚动到某个特定的位置。我们可以在 About.vue 中添加一个具有唯一 id属性的元素 <div id="service" class="service"> <div class="service-text" > <div class="service-text1">24H在线</div> <div class="service-text2">真人客服,永不失联</div> <div class="service-text3">我们的真人客服7x24小时在线,随时响应您的需求。无论问题大小,迅速解决,确保您的使用体验无忧,永不失联。</div> </div> </div> 添加滚动到指定位置的代码 <script> export default { methods: { scrollToElement(refID) { let time=setTimeout(()=>{ this.$nextTick(()=>{ let top=0; let targetElement=document.getElementById(refID); if(targetElement){ // 获取元素距离顶部的距离 top=targetElement.offsetTop; } if(top>0){ // 滚动到指定位置 window.scrollTo({ top: top, behavior: 'smooth' }); } clearTimeout(time); time=null; }) },300); }, } } </script> 最后,在你的 Home.vue 或其他组件中触发路由导航: <li><a href="javascript:void(0)" @click="scrollToElement('service')">联系我们</a></li>

Vue 图片打包之后访问路径错误问题的解决 vite中动态加载图片路径

如果图片资源不是来自于服务器,而是本地资源,那么就会遇到动态加载图片的问题。 在vue项目中,v-for显示的图片,导出时发现图片路径不对 在vue项目中,构建工具使用webpack,想要动态加载图片路径,只要用require()即可,但是如果工具是基于vite的话,vite是直接根据ES Modules的,它是没有require的,那怎么办呢? <template v-for="(item, index) in tabbarData" :key="index"> <div class="tab-bar-item"> <img :src="require(item.image)"> <div class="text">{{ item.text }}</div> </div> </template> 这个时候需要用到new URL(),它会返回一个url对象,这个对象中有href属性,包含完整的URL。 <div class="price-feature-item" v-for="(v,i) in priceFeatureList" :key="i" > <div class="price-feature-item-content"> <div class="price-feature-item-img"> <img :src="getAssetsImg(`${v.img}`)" /> </div> <div>{{v.desc}}</div> </div> </div> 具体的URL详情可以查阅mdn文档,这里只解释一下怎么解决动态图片问题。 URL - Web API 接口参考 | MDN New URL():这里是传两个参数,参数一是相对路径(相对于当前文件),也就是我们要动态加载的图片的路径;参数二传的是当前文件的地址,使用import.meta.url获取。 简单来说就是根据第二个参数的当前文件路径来找到第一个参数的相对文件路径。 为了方便使用,封装到工具函数中,记得注意一下相对路径的改变: export const getAssetsImg = (image) => { return new URL(`../assets/img/${image}`,import.meta.url).href } 在外部引入即可 import { getAssetsImg } from '../../utils/load_assets';

URL特殊字符的转义

特殊符号 十六进制值 转义符为 %2B 空格 转义符为 + 或 %20 / 转义符为 %2F ? 转义符为 %3F % 转义符为 %25 # 转义符为 %23 & 转义符为 %26 = 转义符为 %3D 前些时间做了个文件下载的应用,由于中文名文件的原因,所以在拼URL的时候,会提前把文件名转义 fileName = URLEncoder.encode(fileName,"UTF-8"); 问题来了,如果文件名中带空格的话,出问题了,空格被转成了+,而不是%20,再向下载服务器进行下载请求时,Servlet不认,直接出错。 于是再考虑了一下,把代码中的空格转成%20。 代码如下: fileName = URLEncoder.encode(fileName,"UTF-8");   fileName = fileName.replaceAll("\\+","%20");   如上,问题解决了,再decode也可以正常得到正确的文件名。 为什么会这样呢,网上搜了一把,原理如下: 一个URL的基本组成部分包括协议(scheme),域名,端口号,路径和查询字符串(路径参数和锚点标记就暂不考虑了)。路径和查询字符串之间用问号?分离。例如www.example.com/index?param=1,路径为index,查询字符串(Query String)为param=1。URL中关于空格的编码正是与空格所在位置相关:空格被编码成加号+的情况只会在查询字符串部分出现,而被编码成%20则可以出现在路径和查询字符串中。 造成这种混乱局面的原因在于:W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。而在另一份规范(RFC 2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本身也作为保留字而被编成%2B,对于某些遵循RFC 2396标准的应用来说,它可能不接受查询字符串中出现加号+,认为它是非法字符。所以一个安全的举措是URL中统一使用%20来编码空格字符。 具体的做法上面也给出了。

div实现内部元素居中的三种方式

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>实现内部元素居中的三种方式</title> <style> *{margin: 0; padding: 0;} h2{text-align: center; color: red;} h3{text-align: center; color: blue;} .clearfix:after{content: '';clear: both; display: block; overflow: hidden; height: 0;} /*方法一:传统方法通过固定宽度width: 1000px;和margin: 0 auto;来实现居中, *弊端:1.需要精确计算出box的宽度, * 2.当内部子元素需要增加或者减少的时候,这个宽度需要重新计算,比较麻烦。 * 3.需要使用clear来清除浮动,解决因浮动产生的外部元素无法获取高度的尴尬问题。 */ .box-wrap0{position: relative; width: 100%; height: 100px; text-align: center; padding: 20px; line-height: 30px;} .box-wrap0 .box{position: relative; width: 1000px; margin: 0 auto; border: red 1px solid;} .box-wrap0 .box-item{width: 200px; float: left; background: #dedede;} /* *方法二:1.最里面的元素使用内联元素布局,2.外部元素使用margin: 0 auto; 可以轻松实现居中对齐 */ .box-wrap1{position: relative; width: 100%; height: 100px; padding: 20px; text-align: center; line-height: 30px;} .box-wrap1 .box{position: relative; margin: 0 auto; border: red 1px solid;} .box-wrap1 .box-item{width: 200px; display: inline-block; background: #dedede;} /*内部元素为内联元素*/ /* *方法三:1.最外部元素使用text-align: center; 2.给需要居中的元素display: inline-block;变成内联元素 3.给需要居中的元素float: left;,可以轻松实现居中对齐 *优势:当内部元素需要增加或者减少时,仍然会自动居中 */ .box-wrap2{position: relative; width: 100%; text-align: center; margin-top: 50px; padding: 20px; line-height: 30px;} /* 内容居中显示:text-align: center;*/ .box-wrap2 .box{position: relative; display: inline-block; border: blue 1px solid;} /*需要居中的元素为内联元素*/ .box-wrap2 .box-item{width: 200px; float: left; margin: 0 10px; background: #dedede;} </style> </head> <body> <h2>实现内部元素居中的三种方式</h2> <div class="box-wrap0"> <h3>方法一:固定宽度</h3> <div class="box clearfix"> <div class="box-item">按钮1</div> <div class="box-item">按钮2</div> <div class="box-item">按钮3</div> <div class="box-item">按钮4</div> <div class="box-item">按钮4</div> </div> </div> <div class="box-wrap1"> <div class="box"> <h3>方法二:子元素为内联元素</h3> <div class="box-item">按钮1</div> <div class="box-item">按钮2</div> <div class="box-item">按钮3</div> <div class="box-item">按钮4</div> <div class="box-item">按钮4</div> </div> </div>