加载动效(图片)

更多样式:点击查看

效果

在这里插入图片描述

模板代码

<div class="loading"></div>

样式代码

.loading {
	width: 64px;
	height: 64px;
	position: relative;
	background: #FFF;
	border-radius: 4px;
	overflow: hidden;

	&:before {
		content: "";
		position: absolute;
		left: 0;
		bottom: 0;
		width: 40px;
		height: 40px;
		transform: rotate(45deg) translate(30%, 40%);
		background: #1bbe21;
		box-shadow: 32px -34px 0 5px #0f9301;
		animation: slide 2s infinite ease-in-out alternate;
	}

	&:after {
		content: "";
		position: absolute;
		left: 10px;
		top: 10px;
		width: 16px;
		height: 16px;
		border-radius: 50%;
		background: #93200c;
		transform-origin: 35px 145px;
		animation: rotate 2s infinite ease-in-out;
	}
}

@keyframes slide {

	0%,
	100% {
		bottom: -35px;
	}

	25%,
	75% {
		bottom: -2px;
	}

	20%,
	80% {
		bottom: 2px;
	}
}

@keyframes rotate {
	0% {
		transform: rotate(-15deg);
	}

	25%,
	75% {
		transform: rotate(0deg);
	}

	100% {
		transform: rotate(25deg);
	}
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现在 echarts 中渲染图片并加上动效,可以使用 echarts 的自定义系列(series)和 echarts-gl 库中的三维库,具体步骤如下: 1. 安装 echarts 和 echarts-gl 库: ```bash npm install echarts echarts-gl --save ``` 2. 在 HTML 文件中引入 echarts: ```html <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> ``` 3. 创建一个 echarts 实例,并设置图表的容器和基本配置: ```javascript var myChart = echarts.init(document.getElementById('chart')); myChart.setOption({ series: [{ type: 'custom', renderItem: renderItem, data: data, animation: false }] }); ``` 其中,`renderItem` 是自定义渲染函数,`data` 是要渲染的数据。 4. 在 `renderItem` 函数中,使用 echarts-gl 库中的 `createGL()` 方法创建一个 WebGL 实例,并添加一个动画效果: ```javascript function renderItem(params, api) { var coords = api.coord([api.value(0), api.value(1)]); var size = api.size([1, 1], [30, 30]); var gl = echarts.gl.createGL(params.context.canvas); var program = gl.createProgram(); // ... WebGL 相关代码 var animation = new echarts.animation.Animation({ duration: 1000, easing: 'linear', delay: function(idx) { return idx * 100; }, onframe: function(target, percent) { // ... 动画相关代码 }, ondestroy: function() { // ... 动画结束后的回调函数 } }); animation.start(); } ``` 5. 在 `renderItem` 函数中,使用 WebGL 渲染图片: ```javascript var texture = echarts.gl.createTexture(gl, { image: 'image/path.png', anisotropic: 16 }); gl.bindTexture(gl.TEXTURE_2D, texture); // ... WebGL 相关代码 ``` 注意,使用 WebGL 渲染图片需要先将图片加载为纹理(texture)。 完整代码示例: ```javascript var myChart = echarts.init(document.getElementById('chart')); myChart.setOption({ series: [{ type: 'custom', renderItem: renderItem, data: data, animation: false }] }); function renderItem(params, api) { var coords = api.coord([api.value(0), api.value(1)]); var size = api.size([1, 1], [30, 30]); var gl = echarts.gl.createGL(params.context.canvas); var program = gl.createProgram(); // 顶点着色器代码 var vertexShader = ` attribute vec4 a_Position; attribute vec2 a_TexCoord; varying vec2 v_TexCoord; void main() { gl_Position = a_Position; v_TexCoord = a_TexCoord; } `; // 片元着色器代码 var fragmentShader = ` precision mediump float; uniform sampler2D u_Sampler; varying vec2 v_TexCoord; void main() { gl_FragColor = texture2D(u_Sampler, v_TexCoord); } `; // 创建顶点着色器 var vertexShaderObject = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShaderObject, vertexShader); gl.compileShader(vertexShaderObject); // 创建片元着色器 var fragmentShaderObject = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShaderObject, fragmentShader); gl.compileShader(fragmentShaderObject); // 创建着色器程序 gl.attachShader(program, vertexShaderObject); gl.attachShader(program, fragmentShaderObject); gl.linkProgram(program); gl.useProgram(program); // 设置顶点位置和纹理坐标 var vertices = new Float32Array([ -size[0], -size[1], 0.0, 0.0, size[0], -size[1], 1.0, 0.0, size[0], size[1], 1.0, 1.0, -size[0], size[1], 0.0, 1.0 ]); // 创建缓冲区对象 var vertexTexCoordBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexTexCoordBuffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 顶点位置 var a_Position = gl.getAttribLocation(program, 'a_Position'); gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 16, 0); gl.enableVertexAttribArray(a_Position); // 纹理坐标 var a_TexCoord = gl.getAttribLocation(program, 'a_TexCoord'); gl.vertexAttribPointer(a_TexCoord, 2, gl.FLOAT, false, 16, 8); gl.enableVertexAttribArray(a_TexCoord); // 设置纹理 var texture = echarts.gl.createTexture(gl, { image: 'image/path.png', anisotropic: 16 }); gl.bindTexture(gl.TEXTURE_2D, texture); // ... WebGL 相关代码 // 动画效果 var animation = new echarts.animation.Animation({ duration: 1000, easing: 'linear', delay: function(idx) { return idx * 100; }, onframe: function(target, percent) { // ... 动画相关代码 }, ondestroy: function() { // ... 动画结束后的回调函数 } }); animation.start(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值