位置: IT常识 - 正文

分享一个CSS的垂帘效果(css垂直导航栏)

编辑:rootadmin
分享一个CSS的垂帘效果

推荐整理分享分享一个CSS的垂帘效果(css垂直导航栏),希望有所帮助,仅作参考,欢迎阅读内容。

分享一个CSS的垂帘效果(css垂直导航栏)

文章相关热门搜索词:css实现垂直居中的方法,css垂直定位,css垂直导航栏,css div垂直居中的几种方法,css设置垂直位移一半,css垂直定位,css垂直对齐方式怎么设置,css 垂直,内容如对您有帮助,希望把文章链接给更多的朋友!

先上效果图: 再上代码:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> html, body, canvas { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } html, body { width: 100%; height: 100%; overflow: hidden; margin: 0; display: flex; align-items: center; justify-content: center; background: #191919; } .asset-img { display: none; } </style></head><body><canvas></canvas><img class="asset-img" id="light-img" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACnVBMVEUAAAD40ED40D740Dv40En40Dr40FH40Df40D/40D340Dn40Dz40Dj40AD40Ff40Db40DT40EH40EL40ED40ED40Dv40D/4zz/4zz74zz/4zz/40D74zz/4zz/4zz/40UH40kD40UL40kH4zz/4zz340D34zz740kH41UT410f410j410j410f40D/40D/4zz/40ED40EH400T410f42Er4103410/411D41UT40kH40D/4z0D4zz/41UX410j42E7411L42Ff42Vv42Vz42En41kb40UH4zz/40Dz40ED41UT42Ej4107411b42l743WT432r4323432r410/42En4zz340Dn400H410f42mD432v44nf45IP45Yn45IT44nj432r411b400L40D/4zz/41UT42Er411P432v44oD46Zv47q/48Lj46Zr432n40UH410f42Ff44nf48r/499T4997499T48r744nf43WP40D741EH42Vv4+O34+PP4+O347q745IL432j40UD432345Yj48LX49934+PP4+Pj4993477T45Ib432z411D400D40D/40UH432n45IP47a7432j42Vv410/400H40Dr4zz340UD410b410346Zj48r343WP42Ff410f40D/41kT42Er42l744nv46Zf42l3411L410r41kX40ED410f42E7411b421/45IL45Ib432n421740UH40D340Dz4zz741EP410j410743WT432f432v43mj43GT42Ej41kT4zz740ED41EX411P42Ff42Fv411f410j41kX400P41034107411D42E340D740UH410j41kb41ET400H40D/40ED4z0D4zz74zz340D////+WdN8lAAAA3nRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAgMCBAcJDAkDCA0SFRsbGxMDBQscJSwwMS0SDAUFFyExQExUVyIYDQULJzlOZHeDhDonFwoDASE5VXGNpbO4tFM5BwEcMJa3zdjb2Mu2cBwDESM+Y7bU4ebo4bUUK3bL6vDy7+rKogIZgPb49ebXsBu02+jx9/jw6Nu0VRsBGbDX5q9/UhkCCRUqS+HqoHMqESI9i9Thi2E9IhEvTG+V1tq0kxsDAQchN1Ggr7SvoDghChUjYXJ/cjgnIUlSVEkFGi8qIhsFFAcICAaJi/ApAAAAAWJLR0Te6W7imwAAAAd0SU1FB+YMHBEUINvSacMAAAIKSURBVCjPY2AgBBgZmZiFRYQZgQBVnEVUTFxCUlJSSlxMlAVJjplVWkZWTl5BUUleWVZGhZkZYZKqmpy6hqaWtpaOhrqunj7MREZGA1lDI2MTUzNzM1MTYwtLK2uIFCOjiI2hrZ29g6OTs5Ojg72Lq5u7Bxs7SMZTXNfL28fXzz8gMMjfzzc4xEI3NIwVrEUyPMLeNzIqOiY2Lj4hMtE+Ikk2mYkRKCOekpqW7peRmZWdk52bmeeXnqYhJ84BkpHKLzAt9C/KKi4pLSvPragsNNXMl/JkZGCqUqvWMqsJiMkuqa2rL2tobKox06qWTOZg4EiWbNY2d25pbWvv6Ozo6u7pde7T6pf04GTgmGAzEahn0uSGsvqO+rIpjVOnTdeaoTaTmYGLfdbsOXMLKyvmzS/rKps/r2jBwrmL5KWAfmViEl+8ZGn6srzlK6Z0T1mxPG/lqtVr1oLdxp0sqbRu/YaNeUWbNm8q2rJ1w/p12yS38wDDh3PHTrldu/dsWLZ33/4DB5dt2HPosO7OMFBwM/KKHjl6bPf64yemOZ88dXz96TPyR6T5+EFByi6ganP07LrV585fmH5x6bqzs21UmZhg0XDJXe7ykjnrtK5cvXZdzv0GMycs6jiZpXdKLs532+Z2M0VSXAQ5KTAKeorcuu1uc+TO3e07hNDSCCMjNyczKz8nN8FkxgAAgH2hXtQzzA4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMTItMjhUMTc6MjA6MzIrMDA6MDA1MNVoAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTEyLTI4VDE3OjIwOjMyKzAwOjAwRG1t1AAAAABJRU5ErkJggg==" alt="base64"></body><script> class Mouse { constructor(canvas) { this.pos = new Vector(-1000, -1000) this.radius = 40 canvas.onmousemove = e => this.pos.setXY(e.clientX, e.clientY) canvas.ontouchmove = e => this.pos.setXY(e.touches[0].clientX, e.touches[0].clientY) canvas.ontouchcancel = () => this.pos.setXY(-1000, -1000) canvas.ontouchend = () => this.pos.setXY(-1000, -1000) } } class Dot { constructor(x, y) { this.pos = new Vector(x, y) this.oldPos = new Vector(x, y) this.friction = 0.97 this.gravity = new Vector(0, 0.6) this.mass = 1 this.pinned = false this.lightImg = document.querySelector('#light-img') this.lightSize = 15 } update(mouse) { if (this.pinned) return let vel = Vector.sub(this.pos, this.oldPos) this.oldPos.setXY(this.pos.x, this.pos.y) vel.mult(this.friction) vel.add(this.gravity) let { x: dx, y: dy } = Vector.sub(mouse.pos, this.pos) const dist = Math.sqrt(dx * dx + dy * dy) const direction = new Vector(dx / dist, dy / dist) const force = Math.max((mouse.radius - dist) / mouse.radius, 0) if (force > 0.6) this.pos.setXY(mouse.pos.x, mouse.pos.y) else { this.pos.add(vel) this.pos.add(direction.mult(force)) } } drawLight(ctx) { ctx.drawImage( this.lightImg, this.pos.x - this.lightSize / 2, this.pos.y - this.lightSize / 2, this.lightSize, this.lightSize ) } draw(ctx) { ctx.fillStyle = '#aaa' ctx.fillRect(this.pos.x - this.mass, this.pos.y - this.mass, this.mass * 2, this.mass * 2) } } class Stick { constructor(p1, p2) { this.startPoint = p1 this.endPoint = p2 this.length = this.startPoint.pos.dist(this.endPoint.pos) this.tension = 0.3 } update() { const dx = this.endPoint.pos.x - this.startPoint.pos.x const dy = this.endPoint.pos.y - this.startPoint.pos.y const dist = Math.sqrt(dx * dx + dy * dy) const diff = (dist - this.length) / dist const offsetX = diff * dx * this.tension const offsetY = diff * dy * this.tension const m = this.startPoint.mass + this.endPoint.mass const m1 = this.endPoint.mass / m const m2 = this.startPoint.mass / m if (!this.startPoint.pinned) { this.startPoint.pos.x += offsetX * m1 this.startPoint.pos.y += offsetY * m1 } if (!this.endPoint.pinned) { this.endPoint.pos.x -= offsetX * m2 this.endPoint.pos.y -= offsetY * m2 } } draw(ctx) { ctx.beginPath() ctx.strokeStyle = '#999' ctx.moveTo(this.startPoint.pos.x, this.startPoint.pos.y) ctx.lineTo(this.endPoint.pos.x, this.endPoint.pos.y) ctx.stroke() ctx.closePath() } } class Rope { constructor(config) { this.x = config.x this.y = config.y this.segments = config.segments || 10 this.gap = config.gap || 15 this.color = config.color || 'gray' this.dots = [] this.sticks = [] this.iterations = 10 this.create() } pin(index) { this.dots[index].pinned = true } create() { for (let i = 0; i < this.segments; i++) { this.dots.push(new Dot(this.x, this.y + i * this.gap)) } for (let i = 0; i < this.segments - 1; i++) { this.sticks.push(new Stick(this.dots[i], this.dots[i + 1])) } } update(mouse) { this.dots.forEach(dot => { dot.update(mouse) }) for (let i = 0; i < this.iterations; i++) { this.sticks.forEach(stick => { stick.update() }) } } draw(ctx) { this.dots.forEach(dot => { dot.draw(ctx) }) this.sticks.forEach(stick => { stick.draw(ctx) }) this.dots[this.dots.length - 1].drawLight(ctx) } } class App { static width = innerWidth static height = innerHeight static dpr = devicePixelRatio > 1 ? 2 : 1 static interval = 1000 / 60 constructor() { this.canvas = document.querySelector('canvas') this.ctx = this.canvas.getContext('2d') this.mouse = new Mouse(this.canvas) this.resize() window.addEventListener('resize', this.resize.bind(this)) this.createRopes() } createRopes() { this.ropes = [] const TOTAL = App.width * 0.06 for (let i = 0; i < TOTAL + 1; i++) { const x = randomNumBetween(App.width * 0.3, App.width * 0.7) const y = 0 const gap = randomNumBetween(App.height * 0.05, App.height * 0.08) const segments = 10 const rope = new Rope({ x, y, gap, segments }) rope.pin(0) this.ropes.push(rope) } } resize() { App.width = innerWidth App.height = innerHeight this.canvas.style.width = '100%' this.canvas.style.height = '100%' this.canvas.width = App.width * App.dpr this.canvas.height = App.height * App.dpr this.ctx.scale(App.dpr, App.dpr) this.createRopes() } render() { let now, delta let then = Date.now() const frame = () => { requestAnimationFrame(frame) now = Date.now() delta = now - then if (delta < App.interval) return then = now - (delta % App.interval) this.ctx.clearRect(0, 0, App.width, App.height) // draw here this.ropes.forEach(rope => { rope.update(this.mouse) rope.draw(this.ctx) }) } requestAnimationFrame(frame) } } function randomNumBetween(min, max) { return Math.random() * (max - min) + min } window.addEventListener('load', () => { const app = new App() app.render() }) class Vector { constructor(x, y) { this.x = x || 0 this.y = y || 0 } static add(v1, v2) { return new Vector(v1.x + v2.x, v1.y + v2.y) } static sub(v1, v2) { return new Vector(v1.x - v2.x, v1.y - v2.y) } add(x, y) { if (arguments.length === 1) { this.x += x.x this.y += x.y } else if (arguments.length === 2) { this.x += x this.y += y } return this } sub(x, y) { if (arguments.length === 1) { this.x -= x.x this.y -= x.y } else if (arguments.length === 2) { this.x -= x this.y -= y } return this } mult(v) { if (typeof v === 'number') { this.x *= v this.y *= v } else { this.x *= v.x this.y *= v.y } return this } setXY(x, y) { this.x = x this.y = y return this } dist(v) { const dx = this.x - v.x const dy = this.y - v.y return Math.sqrt(dx * dx + dy * dy) } }</script></html>

代码直接粘贴到html页面就能使用,顺滑的不可言说

本文链接地址:https://www.jiuchutong.com/zhishi/296029.html 转载请保留说明!

上一篇:情感计算——多模态情感识别(情感计算的应用)

下一篇:element - - - - - 你不知道的loading使用方式

  • 提升企业网站优化排名实用的方法(企业网站优化解决方案)

    提升企业网站优化排名实用的方法(企业网站优化解决方案)

  • 苹果13promax充电器多少瓦(苹果13promax充电慢怎么回事)

    苹果13promax充电器多少瓦(苹果13promax充电慢怎么回事)

  • 红米k30s至尊纪念版用的是高通的处理器吗(红米k30s至尊纪念版参数)

    红米k30s至尊纪念版用的是高通的处理器吗(红米k30s至尊纪念版参数)

  • 华为nova4e怎样弄悬浮球(华为nova4设置)

    华为nova4e怎样弄悬浮球(华为nova4设置)

  • 转转申请退款卖家不处理怎么办(转转申请退款卖家不理会怎么样)

    转转申请退款卖家不处理怎么办(转转申请退款卖家不理会怎么样)

  • Word全文行距怎么设置(word全文行距怎么设置)

    Word全文行距怎么设置(word全文行距怎么设置)

  • 电脑显示器坏了可以修吗(电脑显示器坏了有必要修吗)

    电脑显示器坏了可以修吗(电脑显示器坏了有必要修吗)

  • 电路板上ant是什么意思(电路板上的a)

    电路板上ant是什么意思(电路板上的a)

  • 删除聊天记录红包没收还能退回吗(删除聊天记录红包没领怎么办)

    删除聊天记录红包没收还能退回吗(删除聊天记录红包没领怎么办)

  • 三星手机息屏就关机什么原因

    三星手机息屏就关机什么原因

  • 自主访问流量是什么(自主访问流量是卖家不用花钱就能引入店铺的流量)

    自主访问流量是什么(自主访问流量是卖家不用花钱就能引入店铺的流量)

  • 华为手机微信黑暗模式怎么设置(华为手机微信黑名单里的人怎么彻底删除?)

    华为手机微信黑暗模式怎么设置(华为手机微信黑名单里的人怎么彻底删除?)

  • qq怎么看隐藏会话(QQ怎么看隐藏会话的好友)

    qq怎么看隐藏会话(QQ怎么看隐藏会话的好友)

  • b站绑了身份证会被找回吗(b站绑了身份证能改吗)

    b站绑了身份证会被找回吗(b站绑了身份证能改吗)

  • 豆瓣豆邮就是私信吗(豆瓣app豆邮在哪里)

    豆瓣豆邮就是私信吗(豆瓣app豆邮在哪里)

  • 在apple store买东西几天能到(在applestore买东西送到哪)

    在apple store买东西几天能到(在applestore买东西送到哪)

  • soul怎么搜索添加好友(soul上怎么搜索添加好友)

    soul怎么搜索添加好友(soul上怎么搜索添加好友)

  • 华为ask-al00x是什么型号(华为ask_al00x型号)

    华为ask-al00x是什么型号(华为ask_al00x型号)

  • 微信漂流瓶何时重新上线(微信漂流瓶什么时候没的)

    微信漂流瓶何时重新上线(微信漂流瓶什么时候没的)

  • netbean怎么用(netbeans怎么用)

    netbean怎么用(netbeans怎么用)

  • yy语音手机上有吗(手机yy语音聊天在哪)

    yy语音手机上有吗(手机yy语音聊天在哪)

  • 苹果x,xr,xs有什么区别(iphone x,xs,xr)

    苹果x,xr,xs有什么区别(iphone x,xs,xr)

  • sql优化的几种方法(sql优化的几种方法有哪些)

    sql优化的几种方法(sql优化的几种方法有哪些)

  • 魅族pay怎么卸载(魅族pay怎么彻底卸载)

    魅族pay怎么卸载(魅族pay怎么彻底卸载)

  • 华为时间怎么调24小时(华为时间怎么调大字)

    华为时间怎么调24小时(华为时间怎么调大字)

  • 万用表档位功能有哪些(万用表档位的使用方法)

    万用表档位功能有哪些(万用表档位的使用方法)

  • 黄石国家公园的美洲野牛,美国怀俄明州 (© Steve Gettle/Minden Pictures)(黄石国家公园的占地面积)

    黄石国家公园的美洲野牛,美国怀俄明州 (© Steve Gettle/Minden Pictures)(黄石国家公园的占地面积)

  • (15) 如何设置Linux实现与Windows的共享访问?  Linux Windows  乐维UP(如何设置linux)

    (15) 如何设置Linux实现与Windows的共享访问? Linux Windows 乐维UP(如何设置linux)

  • 固定资产报废收入
  • 销售不动产税率9%还是5%
  • 啥是完税凭证
  • 企业进口葡萄酒也要缴纳消费税吗
  • 收购发票加计扣除
  • 税务局如何认定虚开
  • 一般纳税人的发票抵扣进项税额
  • 账户认证操作
  • 银行承兑贴现的会计分录怎么做
  • 没有纸质机票电子行程单电子版可以报销吗
  • 其他业务收入的核算内容
  • 公司购买网络交换机入什么会计科目
  • 外贸企业留抵税额过大
  • 未分配利润转出会计分录
  • 项目一次性奖励会计分录怎么处理
  • 公司评级有什么用
  • 核销确实无法收回的应收账款后会影响资产负债率
  • 增值税普通发票税率
  • 软件开发公司怎么找客户
  • 免税发票可以入账吗
  • 税负原则
  • 国家税务总局公告2012年第57号
  • 小规模纳税人应纳税额减征额怎么算
  • 地价计入房产原值乘70%
  • 进货会计凭证
  • 500万以下固定资产最新政策
  • 发票作废时间有多长
  • 只有专票没有普票
  • 公司注销货币资金有余额要交税吗
  • 公司注销时存货计税依据
  • 居民小区人防设施主要是什么
  • 白银及其制品出自哪里
  • 增值税月末如何计算
  • mac系统如何开启任何来源
  • 脚手架属于什么费用
  • win10最新版本激活
  • 进销存单据
  • 增值税发票月末怎么账务处理
  • 总公司固定资产包括哪些
  • phpmemcached使用
  • pacis.exe - pacis是什么进程 有什么用
  • java.exe进程可以关掉吗
  • 计量差错引起的盘亏
  • 转让应收账款会计分录
  • vue3使用vueup/vue-quill富文本、并限制输入字数
  • Madonna della Corona教堂,意大利 (© Volodymyr Kalyniuk/Alamy)
  • thinkphp count
  • php使用while循环计算1到100的和
  • 英雄联盟轮转模式2020时间表
  • 解决什么情况
  • wordpress限制邮箱注册
  • c语言中asin
  • 差旅费抵扣进项税额
  • 定额的个体户怎么交税
  • 国债收益率如何查看
  • 汽车加油增值税专用发票
  • 餐饮营业收入怎么算
  • 房地产企业成本包括哪些
  • 上年未结转的成本今年可以结转吗
  • 取得无形资产时增值税进项税额的处理
  • 企业代扣的个人所得税款收入属于哪个会计科目
  • 做账一定要计提本月工资吗
  • 住院伙食补助费每天50
  • 小规模纳税人标准500万是含税吗
  • 法院主要业务活动
  • sqlserver批处理语句
  • wrapper.exe是什么
  • aix操作命令
  • WinXP老显示器CRT显示器严重闪屏的修复方法
  • gcuservice.exe
  • linux扩大文件系统
  • win10系统office2007每次打开都要配置
  • win7软件包
  • wow血条插件
  • css div高度填满父容器剩余空间
  • jquery 判断对象是否为空
  • 陕西国家税务
  • 内蒙古税务局发票认证
  • 特殊工种作业人员
  • 海南省税务局网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设