在实现上传显示进度的过程中,我引入了layui的组件,想要实现点击开始上传之后,出现弹出层,弹出层展示进度条。
但是在实现的过程中无论如何进度条都无法渲染出进度值。
效果如下:
我的代码如下:
// html部分
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal" id="ID-upload-demo-choose" lay-options="{accept:'file'}">选择文件</button>
<button type="button" class="layui-btn" id="ID-upload-demo-action" lay-on="upload_process">开始上传</button>
</div>
// js部分
layui.use('element',function(){
var layer = layui.layer;
var util = layui.util;
var element = layui.element;
util.on('lay-on',{
"upload_process": function(){
layer.open({
type:'1',
title:'上传中',
area: ['420px', '80px'],
content:'<div class="layui-progress" lay-filter="demo-filter-progress" lay-showpercent="true" lay-percent="30%"><div class="layui-progress-bar"></div></div>'
})
}
})
element.render('progress', 'demo-filter-progress');
})
我有点疑惑,element.render('progress', 'demo-filter-progress') 不是可以在元素生成后渲染一次元素吗?为什么在这里会失效呢?
希望有带佬可以帮我解惑,万分感谢!
content的内容中,class为layui-progress-bar的div里面,缺钱了进度数字的span,里面添加上如下内容立刻
0%
添加完毕后整体内容如下
content: '<div class="layui-progress layui-progress-big" lay-filter="demo" lay-showPercent="true" style="width: 250px;"><div class="layui-progress-bar" lay-percent="0%"><span class="layui-progress-text">0%</span></div></div>'
```
首先layui不是已经提供了上传带进度条的功能么,你用那个就可以直接完成你的要求。其次你都没有了解layui的机制,不是你随便用js渲染出来一个html它就能按照你的要求给你显示,这里你渲染完html得调用render函数来更新才行。
这是一个示例代码,根据layui的演示程序改的,希望能帮到你!
<!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>
<link href="./js/layui/css/layui.css" rel="stylesheet" />
</head>
<style>
.container {
margin: 50px 0 0 50px;
}
</style>
<body>
<div class="container">
<div class="layui-progress layui-progress-big layui-btn-disabled" lay-showpercent="true" lay-filter="demo">
<div class="layui-progress-bar layui-bg-red" lay-percent="0%"></div>
</div>
<div class="site-demo-button" style="margin-top: 20px; margin-bottom: 0;">
<button class="layui-btn site-demo-active" id="setPercent">设置 50%</button>
<button class="layui-btn site-demo-active" id="loading">模拟 loading</button>
</div>
</div>
</body>
<script src="./js/layui/layui.js"></script>
<script>
//注意进度条依赖 element 模块,否则无法进行正常渲染和功能性操作
layui.use('element', function () {
var element = layui.element;
//设置50%进度
document.getElementById('setPercent').addEventListener("click", function () {
element.progress('demo', '50%')
});
//模拟loading
document.getElementById('loading').addEventListener("click", function () {
var n = 0, timer = setInterval(function () {
n = n + Math.random() * 10 | 0;
if (n > 100) {
n = 100;
clearInterval(timer);
}
element.progress('demo', n + '%');
}, 300 + Math.random() * 1000);
});
});
</script>
</html>