css3+js旗帜飘动
时间:2020-01-09
本文章向大家介绍css3+js旗帜飘动,主要包括css3+js旗帜飘动使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
效果:
代码:
<!doctype html> <html lang="zh-cn"> <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; } html, body { height: 100%; width: 100%; background-color: lightgrey; } body { text-align: center; position: relative; } ul, li { list-style: none; } #flag { position: absolute; left: 50%; top: 50%; transform: translate3d(-50%,-50%,0); animation: flag-reverse ease-in-out infinite; } /* 这里是核心css样式 */ #flag > li { height: 100%; float: left; background-image: url("https://oscimg.oschina.net/oscnet/4073613a5ab7bb799829aa83a67e9f46b7d.jpg"); background-size: auto 100%; animation: flag ease-in-out infinite; } </style> </head> <body> <ul id="flag"></ul> <script> (function () { // 这里是js代码 var flagEle = document.getElementById('flag') var image = new Image() image.src = 'https://oscimg.oschina.net/oscnet/4073613a5ab7bb799829aa83a67e9f46b7d.jpg' var IMG_MAX_WIDTH = 600 var IMG_MAX_HEIGHT = 600 var imgHeight var imgWidth image.onload = function () { imgWidth = image.width imgHeight = image.height var ratio = image.width / image.height if (imgWidth > IMG_MAX_WIDTH) { imgWidth = IMG_MAX_WIDTH imgHeight = imgWidth / ratio } if (imgHeight > IMG_MAX_HEIGHT) { imgHeight = IMG_MAX_HEIGHT imgWidth = imgHeight * ratio } flagEle.style.width = imgWidth + 'px' flagEle.style.height = imgHeight + 'px' flagEle.style.marginLeft = -imgWidth / 2 + 'px' flagEle.style.marginTop = -imgHeight / 2 + 'px' splitImg(100, 20, 1.5, 1) function splitImg (sliceCount, amplitude, period, duration) { var styleEle = document.createElement('style') // styleEle.innerHTML = 'body{background: red}' var styleHtmlAry = [] var sliceCountPerPeriod = Math.floor(sliceCount / period) var sliceWidth = imgWidth / sliceCount var formula = sliceCountPerPeriod + 'n+' var interval = duration * period / sliceCount // 添加动画延时 for (var i = 0; i < sliceCount; i++) { if (i < sliceCountPerPeriod) { styleHtmlAry.push('#flag > li:nth-child(' + formula + i + ') { ') styleHtmlAry.push('animation-delay: -' + (interval * (sliceCountPerPeriod - i)) + 's;') styleHtmlAry.push('}') } styleHtmlAry.push('#flag > li:nth-child(' + i + ') { background-position: -' + (i * sliceWidth) + 'px 0; }') // 设置切片背景 } // 添加关键帧动画 styleHtmlAry.push('@keyframes flag {') styleHtmlAry.push('0% { transform: translate3d(0, ' + amplitude + 'px, 0); }') styleHtmlAry.push('50% { transform: translate3d(0, -' + amplitude + 'px, 0); }') styleHtmlAry.push('100% { transform: translate3d(0, ' + amplitude + 'px, 0); }') styleHtmlAry.push('}') // 添加反向关键帧动画 styleHtmlAry.push('@keyframes flag-reverse {') styleHtmlAry.push('0% { transform: translate3d(0, ' + (-amplitude) + 'px, 0); }') styleHtmlAry.push('50% { transform: translate3d(0, ' + amplitude + 'px, 0); }') styleHtmlAry.push('100% { transform: translate3d(0, ' + (-amplitude) + 'px, 0); }') styleHtmlAry.push('}') // 容器应用flag-reverse动画 styleHtmlAry.push('#flag {') styleHtmlAry.push('animation-duration: ' + duration + 's;') // 添加周期时长 styleHtmlAry.push('animation-delay: -' + (interval * sliceCountPerPeriod) + 's;') styleHtmlAry.push('}') // 切片样式 styleHtmlAry.push('#flag > li {') styleHtmlAry.push('animation-duration: ' + duration + 's;') // 添加周期时长 styleHtmlAry.push('width: ' + (imgWidth / sliceCount) + 'px;') // 设置切片宽度 styleHtmlAry.push('}') styleEle.innerHTML = styleHtmlAry.join('') // 创建切片元素 flagEle.innerHTML = new Array(sliceCount + 1).join('<li></li>') document.documentElement.appendChild(styleEle) } } })(); </script> </body> </html>
原文地址:https://www.cnblogs.com/wuqilang/p/12172186.html
- spring cloud 学习(7) - 生产环境如何不停机热发布?
- jupyter notebook 在mac OS上的安装
- Hadoop(七)HDFS容错机制详解
- java一些常用并发工具示例
- 机器人来“抢工作”了,瑞典人为何能淡定处之
- 线性代数01 线性的大脑
- spring cloud 学习(10) - 利用springfox集成swagger
- Hadoop(六)之HDFS的存储原理(运行原理)
- Blockchain Global CEO Sam Lee:以大数据为基础,区块链技术加快决策生成速度
- Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群
- 被解放的姜戈08 远走高飞
- mxnet安装及NDArray初体验
- MySQL(十五)之数据备份中mysqldump详解
- 安卓第十夜 亚当的诞生
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法