前端特效、js代码优化

news/2024/5/17 6:50:54/文章来源:https://blog.csdn.net/beekim/article/details/127669959

1.旋转按钮边框

效果:
在这里插入图片描述
代码:

 <div class="container"><button class="btn">旋转边框</button></div>
 *{margin: 0;padding: 0;}.container{background: #000;height: 100vh;overflow: hidden;}.btn{/* border: 4px solid #fff; */padding: 10px 30px;color: aqua;border-radius: 10px;margin: 150px auto;position: relative;overflow: hidden;outline:none;border: none;background: none;z-index: 1;box-shadow: 2px 5px 15px rgba(223, 28, 28, 0.5);}.btn::before{content: '';width: 200%;height: 200%;left: 50%;top: 50%;background-color: crimson;position: absolute;animation: rotate 3s linear infinite ;transform-origin: 0px 0px;z-index: -2;}.btn::after{position: absolute;content: '';width: calc(100% - 4px);height: calc(100% - 4px);background-color: rgb(0, 0, 0);z-index: -1;left: 2px;top: 2px;border-radius: 10px;}@keyframes rotate {to{transform: rotate(360deg);}}

2.文字立起来

效果:
在这里插入图片描述
代码:

<div class="css3"><h1>CSS练习</h1>
</div>
  .css3{width: 300px;text-align: center;background: rgb(153, 153, 153);}h1{position: relative;font-size: 60px;color: #fff;z-index: 1;}h1::before{content: "CSS练习";position: absolute;transform:skew(50deg)  scaleY(0.5) translate(-32px,20px);color: rgba(0, 0, 0, 0.527);filter: blur(6px);z-index: -1;}

3.统计字符串中字符出现的次数

//统计字符串中字符出现的次数let str="asdfasfasdfgdftwertdzczgvbadasda"let res={}//方法一:for(let i=0;i<str.length;i++){if(res[str[i]]){res[str[i]]++}else{res[str[i]]=1}}console.log(res);//方法二:reduce函数优化let res2=str.split('').reduce((a,b)=>(a[b]++||(a[b]=1),a),{})console.log(res2);

结果:
在这里插入图片描述
方法二 reduce解释:
在这里插入图片描述
reduce(回调函数,默认参数)
(x,xx,xxx):括号运算符,前面的参数全部运算一边,返回最后一个参数
列如:

 		var a=1var b=2var c=3console.log((a+=b,a+=c,a));//6   

4.磨砂效果

预览:
在这里插入图片描述
代码:

 <div class="container"><h1>Genshin Impact</h1><div class="mosha">原神</div></div>
.container {background: linear-gradient(-45deg, #2d8cf0, #19be6b, #ff9900, #ed3f14);animation: backC 15s ease infinite;background-size: 400% 400%;width: 1000px;height: 500px;position: relative;display: flex;align-items: center;justify-content: center;}@keyframes backC {0% {background-position: 0% 50%;}50% {background-position: 100% 50%;}100% {background-position: 0% 50%;}}h1{font-size: 42px;color:#fff;}.mosha{display: flex;align-items:center;justify-content: center;position: absolute;font-size: 32px;color: #2d8cf0;background: rgba(255, 255, 255,.5);width: 20%;height: 20%;z-index: 2;border-radius: 10px;/* filter只能把自己给模糊 *//* filter: blur(5px); *//* backdrop-filter不会模糊自己,模糊的是背后的元素 */backdrop-filter: blur(5px);}

注意:

   1. /* filter只能把自己给模糊 */filter: blur(5px); 2./* backdrop-filter不会模糊自己,模糊的是背后的元素 */backdrop-filter: blur(5px);

如果使用了filter: blur(5px);那么效果为:
在这里插入图片描述

5.中文输入触发input事件问题

问题描述:在input要配合后端接口进行搜索操作并且输入中文搜索时,在中文还没输入完成前,表单的input事件首要检测到了英文字母的输入,所以也会进行请求,这就会产生多余的请求操作。

<input type="text" >
	let input =document.querySelector('input')//向后端请求查询的接口函数const api=()=>{console.log('查询中.....');}//标记位是否为中文输入状态let isComposite=true//正常输入英文字母的查询input.addEventListener('input',()=>{//判断一下是否为中文输入if(!isComposite){api()}})//中文输入开始input.addEventListener('compositionstart',()=>{console.log('start');isComposite=true})  // 中文输入结束input.addEventListener('compositionend',()=>{console.log('end');isComposite=false//中文输入后再进行查询api()})//注:在vue查询中,一般都会使用修饰符lazy懒加载进行搜索

compositionstart
在这里插入图片描述

6.scrollIntoView的使用

在这里插入图片描述
在这里插入图片描述

    <div class="container"><button onclick="scroll2Bot()">滚动到底部</button><div class="bot">底部锚点</div></div><script>let bot=document.querySelector('.bot')const scroll2Bot=()=>{bot.scrollIntoView({behavior:"smooth",block:"center"})}</script>
  .container{height: 2000px;position: relative;}.bot{position: absolute;bottom: 200px;box-sizing: border-box;padding: 10px;background: rgb(100, 199, 61);}

效果:

这个api可以用于如下场景:
1.填多个表单后提交,且表单超出可视区域时,如果有表单验证没通过就滚动到对应位置。
在这里插入图片描述
2.无缝轮播
以前的实现轮播的方式见:轮播图

预览效果:

代码:

    <div class="scroll"><div class="box"><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">5</div><div class="box-item">6</div></div></div><div class="dots"><div class="dot">1</div><div class="dot">2</div><div class="dot">3</div><div class="dot">4</div><div class="dot">5</div><div class="dot">6</div></div><script>let items = document.querySelectorAll('.box-item')let dots = document.querySelectorAll('.dot')let scroll = document.querySelector('.scroll')let tag = 0let timer = nullfunction scrollEvent() {if (tag < items.length) {items[tag].scrollIntoView({ behavior: "smooth" })console.log(tag);tag++} else {tag = 0}}timer = setInterval(scrollEvent, 2000)scroll.addEventListener('mouseover', () => {console.log('hover');clearInterval(timer)timer = null})scroll.addEventListener('mouseout', () => {console.log('out');timer = setInterval(scrollEvent, 2000)})dots.forEach((val, index) => {val.onclick = function () {tag = indexconsole.log(index);clearInterval(timer)items[index].scrollIntoView({ behavior: "smooth" })timer = setInterval(scrollEvent, 2000)}})</script>
    .scroll {margin: 50px auto;width: 400px;height: 200px;border: 2px solid darkcyan;overflow: hidden;}.box {position: absolute;display: flex;width: 2400px;height: 200px;position: relative;}.box-item {left: 0;display: flex;justify-content: center;align-items: center;font-size: 42px;color: #fff;width: 400px;height: 200px;}.dot:nth-child(even),.box-item:nth-child(even) {background: #46ca12;}.dot:nth-child(odd),.box-item:nth-child(odd) {background: #e29a13;}.dots {margin: 20px 0;display: flex;width: 400px;justify-content: center;margin: 0 auto;}.dot {margin: 0 20px;color: #fff;box-sizing: border-box;padding: 0 5px;border-radius: 10px;display: flex;justify-content: center;align-items: center;box-shadow: 1px 2px 5px rgba(0, 0, 0, .5);}.dot:hover {transform: translateY(-2px);cursor: pointer;}

7.用css画图

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div style="display:flex"><input  type="file"   /><button>下载html</button></div><script src="./index.js"></script>
</body>
</html>
//思路
const fileDom = document.querySelector("input[type=file]");
const btn = document.querySelector("button");//选择文件生成图片对象
function loadImage() {console.log(fileDom.files);const file = fileDom.files[0];if (!file) {return;}const objUrl = URL.createObjectURL(file);const img = new Image();return new Promise((resolve, reject) => {img.onload = () => {resolve(img);};img.onerror = () => {resolve(null);};img.src = objUrl;});
}//创建div的Html
function createHTML(width, height, bmp) {const shadowCssFragments = []; //阴影css的片段const shadowCsshover = []; //鼠标移入的css阴影//读取每个位图的像素点for (let r = 0; r < height; r++) {for (let c = 0; c < width; c++) {const i = r * width + c,R = bmp[i * 4],G = bmp[i * 4 + 1],B = bmp[i * 4 + 2],A = bmp[i * 4 + 3] / 255;shadowCssFragments.push(`${c + 1}px ${r}px rgba(${R},${G},${B},${A})`);shadowCsshover.push(`${c + 1}px ${r}px rgba(${255 - R},${255 - G},${255 - B},${A})`);}}return `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><style>.shadow-img{width: ${width}px;height: ${height}px;}.shadow-img .inner{width: 1px;height: 1px;box-shadow: ${shadowCssFragments.join(",")};transition:  1.5s;}.shadow-img:hover .inner{box-shadow: ${shadowCsshover.join(",")};}</style><body><div class="shadow-img"><div class="inner"></div></div></body></html>`;
}//下载html
function download(html) {let blob = new Blob([html], { type: "text/html" });let url = window.URL.createObjectURL(blob);let a = document.createElement("a");a.href = url;a.style.display = "none";a.download = "demo.html";a.click();
}
async function generate() {const img = await loadImage(); //得到图片对象if (!img) {return;}//将图片画到canvans上const cvs = document.createElement("canvas");cvs.width = img.width;cvs.height = img.height;const ctx = cvs.getContext("2d");ctx.drawImage(img, 0, 0);//获取canvas中的位图const bmp = ctx.getImageData(0, 0, img.width, img.height).data;const html = createHTML(img.width, img.height, bmp);//下载htmldownload(html);
}btn.onclick = generate;

8.奥运五环绘制

效果:
在这里插入图片描述
代码:

    <div class="box"><div class="ring"></div><div class="ring"></div><div class="ring"></div><div class="ring"></div><div class="ring"></div>   </div>
    .box {width: 700px;display: flex;flex-wrap: wrap;justify-content: center;transform-style: preserve-3d;}.ring {width: 200px;height: 200px;border-radius: 50%;box-sizing: border-box;margin: 5px;}.ring:nth-child(1) {border: 15px solid blue;transform:  rotateX(-1deg) ;}.ring:nth-child(2) {border: 15px solid black;transform:  rotateX(-1deg) ;}.ring:nth-child(3) {border: 15px solid red;transform: rotateX(-1deg);}.ring:nth-child(4) {border: 15px solid yellow;transform: translateY(-100px) rotateX(1deg) ;}.ring:nth-child(5) {border: 15px solid green;transform: translateY(-100px)  rotateX(1deg);}

9.文字光影

效果:

代码:

    <div class="box"><span>G</span><span>e</span><span>n</span><span>s</span><span>h</span><span>i</span><span>n</span><span>I</span><span>m</span><span>p</span><span>a</span><span>c</span><span>t</span></div>
    body {background: #000;}.box {margin: 50px auto;font-size: 62px;font-weight: 800;text-align: center;}span {color: rgb(217, 255, 0);animation: shining 1s ease-in-out infinite alternate;}span:nth-child(13) {animation-delay: 2.4s;}@keyframes shining {to {color: rgb(16, 224, 44);text-shadow: 20px 3px 60px rgb(16, 224, 44);}}span:nth-child(2) {animation-delay: 0.2s;}span:nth-child(3) {animation-delay: 0.4s;}span:nth-child(4) {animation-delay: 0.6s;}span:nth-child(5) {animation-delay: 0.8s;}span:nth-child(6) {animation-delay: 1s;}span:nth-child(7) {animation-delay: 1.2s;}span:nth-child(8) {animation-delay: 1.4s;}span:nth-child(9) {animation-delay: 1.6s;}span:nth-child(10) {animation-delay: 1.8s;}span:nth-child(11) {animation-delay: 2s;}span:nth-child(12) {animation-delay: 2.2s;}

10.九宫格图片

效果:

代码:

<div class="box"><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div></div>
    body{background: #000;}.box{width: 300px;height: 300px;margin: 50px auto;display: flex;flex-wrap: wrap;position: relative;}.item{width: 100px;background-size: 300px 300px;background-image: url('./paimon.jpg');box-shadow: inset 0 0 0 5px #fff;position: relative;transition: 1s ease;}.item:nth-child(3n+1){left: -20px;background-position-x: 0px;} .item:nth-child(3n+2){left: 0px;background-position-x: -100px;}.item:nth-child(3n){left: 20px;background-position-x: -200px;}.item{top: 20px;background-position-y:-200px ;}.item:nth-child(-n+6){top: 0;background-position-y: -100px;}.item:nth-child(-n+3){top: -20px;background-position-y: 0;}.box:hover .item{left: 0;top: 0;box-shadow: none;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_411562.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

35岁以后还能学软件测试吗?

之前看到一个问题“35岁学软件测试来得及吗”。 之前一直在工厂上班&#xff0c;看不到希望。 已经35岁了&#xff0c;想转学软件测试来得及吗&#xff1f; 经常会碰到类似这样的问题&#xff1a;担心自己学历不够&#xff0c;非计算机专业&#xff0c;害怕学不会&#xff0c;甚…

擎创技术流 | ClickHouse实用工具—ckman教程(1)部署安装

前言&#xff1a; 在数据量日益增长的当下&#xff0c;传统数据库的查询性能已满足不了业务需求。而Clickhouse在OLAP&#xff08;On-Line Analysis Processing——即一种在线分析处理的&#xff0c;用于数据分析的计算方法&#xff09;领域的应用&#xff0c;可以助力企业打造…

2022爱分析·虚拟化活动实践报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 **王鹏 ** 爱分析分析师 外部专家**&#xff08;按姓氏拼音排序&#xff09;** 梁瑛玮 保利威技术副总裁 于颢 tatameCEO 特别鸣谢&#xff08;按拼音排序&#xff09; 报告摘要 新冠疫…

Linux基础(yum,vim,gcc,gdb)

Linux基本的命令我们会敲了&#xff0c;基本的文件概念以及权限概念我们也都了解了&#xff0c;接下来该学一些好用的工具&#xff0c;用Linux完成一些工作了 目录 yum yum的作用 yum基本操作 vim vim的基本模式 命令模式 插入模式 底行模式 可视化模式 gcc gcc…

Drag-MoveMent

目录UGUI-OnDrag事件如何使用PointerEventDataposition屏幕空间->世界坐标/局部坐标空间(转换)参考文章UGUI-OnDrag事件 示例代码: using UnityEngine.EventSystems;public class TestOnDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {public v…

java计算机毕业设计基于安卓Android的教学考勤系统APP

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库…

二叉查找树、平衡二叉树、红黑二叉树简单概念

二叉查找树&#xff08;二叉排序树、二叉搜索树&#xff09;&#xff1a; 性质&#xff1a; 1.若其左子树非空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2.若其右子树非空&#xff0c;则右子树上所有节点的值都大于根节点的值&#xff1b; 3.其…

Kubectl

目录 一、资源管理 1.kubernetes集群管理 2.kubectl 3.kubectl 的命令 (1)查看版本信息 (2)查看资源对象简写信息 (3)查看集群信息 (4)配置kubectl自动补全 (5)node节点查看日志 (6)K8s核心组件日志 二、基本信息查看 1.查看master节点状态 2.查看命令空间 3.查看…

系统学习SpringFrame:SpringBean的注入方式

本篇内容包括&#xff1a;Spring 容器简介&#xff08;什么是容器、容器如何工作&#xff09;、SpringBean 注入方式&#xff08;SpringBean 注入方式分类、Autowiring 自动绑定&#xff09;以及 获取 Spring Bean 的工具类&#xff01; 一、Spring 容器 1、什么是容器 Sprin…

企业电子文档管理系统哪个好?怎么选?

选择一款企业电子文档管理系统&#xff08;EDMS&#xff09;时应该关注什么&#xff1f; 这完全取决于你需要实现的控制、协作和灵活性水平。 然而&#xff0c;有两个关键的电子文档管理系统功能是你应该要关注的。 ● 简单配置的工作流程 你可以更轻松地进行协作&#xff…

算法6 排序算法 QuickSort 快速排序

Quick sort 快速排序快算排序 Quick Sort &#xff0c;可能是应用最为广泛的算法&#xff0c;被视为20世纪科学和工程领域的十大算法之一。其流行的原因是因为它实现简单&#xff0c;可适用于不同数据&#xff0c;并且在一般场景下比其他算法要更快。其优点是&#xff1a; 可借…

JSP声明:变量、方法和类的声明

在 JSP 页面中可以声明变量、方法和类&#xff0c;其声明格式如下&#xff1a; <%!声明变量、方法和类的代码&#xff05;>特别要注意&#xff0c;在“<%“与“!”之间不要有空格。声明的语法与在 Java 语言中声明变量和方法时的语法是一样的。 声明变量 在“<%!…

面试官视角总结的测开面试题(付答案)

背景 leader让胖虎当回面试官, 招一位合适的测开同学. 由于是第一次当面试官, 肯定要认真对待一下, 所以精心准备了一些面试题. 讲道理胖虎经历过很多次面试了, 不过都是以面试者的角度, 首次以面试官的身份来面试别人还是有点期待的! 制定评判标准 首先我列了个能力需求和…

python自带的idle以及pycharm使用

作者介绍&#xff1a; ♥️作者&#xff1a;小刘在C站 ♥️每天分享课堂笔记&#xff0c;一起努力&#xff0c;共赴美好生活&#xff01; ♥️夕阳下&#xff0c;是最美的绽放。 目录 一.python自带的idle 二.ipython ipython介绍 ipython安装步骤 ipython使用 三.pycharm…

Uniapp零基础开发学习笔记(11)-安装扩展组件uni-ui/uView及微信小程序开发环境

Uniapp零基础开发学习笔记(11)-安装扩展组件uni-ui/uView及微信小程序开发环境 1.安装扩展组件uni-ui uni-ui是uni-app团队开发的官方扩展组件&#xff0c;比基础组件的能力更强更好用。 介绍文档: https://uniapp.dcloud.net.cn/component/uniui/uni-ui.html 使用方法: 按照…

SCALA基础

若没有安装scala&#xff0c;则参考博客链接&#xff1a;http://t.csdn.cn/mF7tx 1、Scala的常用数据类型 注意&#xff1a;在Scala中&#xff0c;任何数据都是对象。例如&#xff1a;scala> 1 res0: Int 1scala> 1.toString res1: String 1scala> "1".t…

2024年浙江大学金融硕士专业报考分析

全国经济类联考专业之一的金融硕士&#xff0c;近年来成为不少考生报考的热点&#xff0c;特别是浙江大学金融硕士每年的报考竞争压力都非常大&#xff0c;今天专注于经管类联考的达立易考教育针对浙大金融硕士这个专业做简单报考分析&#xff0c;帮助2024年考生成功完成专业的…

微服务注册中心技术选型:5种主流注册中心,哪个最香?

讲解5种常用的注册中心&#xff0c;对比其流程和原理&#xff0c;无论是面试还是技术选型&#xff0c;都非常有帮助。 对于注册中心&#xff0c;在写这篇文章前&#xff0c;我其实只对ETCD有比较深入的了解&#xff0c;但是对于Zookeeper和其它的注册中心了解甚少&#xff0c;甚…

样板间虚拟现实定制让看房者有一种自己设计家自主交互体验-深圳华锐视点

为了完成销售目标,扩大市场销售面积,各大房企必将加大楼盘推出,降价冲销量已成常态。房企更多的是需要采用创意化的营销策略,方能在激烈的竞争中脱颖而出。精细化场景还原,提升用户好感度,相比有趣的交互方式,VR虚拟样板间本身的质量更为重要。在这方面,VR虚拟样板间必…