js 多张图片加载 环形进度条

css 部分使用 svg 绘制环形

1 svg{width:100px; height: 100px; margin:15% auto 25%; box-sizing:border-box; display: block;}
2 svg circle{fill:none;cx:50;cy:50;}
3  /* svg text{x:40;y:55;} 不起作用  原因不知*/
4 svg #txt{ x:35;y:55%;fill:red;}
5 svg #backdrop{stroke-linecap:round;stroke:#333; stroke-width:2px;r:48;}
6 svg #progress{stroke:#690; stroke-dasharray:0 1000;stroke-width:3px;r:48;}

此处的 js 放在 body 标签中

 1 var mulitImg = [
 2           'http://www.cctv.com/img/2.png',
 3           'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1520235078852&di=a57664a8e118c403bf2d378757e40b08&imgtype=0&src=http%3A%2F%2Fs9.knowsky.com%2Fbizhi%2Fl%2F100001-105083%2F2009530184324945217430590.jpg',
 4           'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1520235078852&di=0a127ba0bf50857c86bd886ef355d2c9&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F4%2F593a3dba085e1.jpg',
 5           'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1520235078851&di=f1dacfe012d7e71c7469a4b0b4df2708&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Fe%2F5902ad376edd5.jpg',
 6           'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1520235078851&di=b6ab0dcfbe939057988cabb0bd0f3899&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F1%2F535a1f52d5f8c.jpg',
 7           'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1520235078850&di=4f0693db95d8e117035f77d7a1d5e493&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Ff%2F594336ec75b26.jpg'
 8           
 9        ];
10   // 调用函数, 传入图片数组
11   load_img(mulitImg);
12   function load_img(mulitImg)
13   {
14      var svg=document.createElementNS('http://www.w3.org/2000/svg','svg');
15        document.body.appendChild(svg);
16       var svg_html='<circle id="backdrop" /><text x="35" y="55%" fill="red" id="txt">0%</text><circle id="progress"  />';
17         svg.innerHTML=svg_html;
18      
19      var idtxt=document.getElementById('txt');
20      var progrees=document.getElementById('progress');   
21      var pro_v=parseInt(css(progrees,'stroke-dashoffset')); 
22      var r=parseInt(css(progrees,'r'));     // 半径
23      var arcLength=Math.floor(2*Math.PI*r); // 周长
24   
25      var taget=100;
26      var img = [],  
27           flag = 0; 
28           
29        var imgTotal = mulitImg.length;
30             //添加过渡效果
31            progrees.style.transitionDuration=arcLength/imgTotal/100+'s';
32            idtxt.style.transitionDelay=arcLength/imgTotal/100/2+'s';
33 
34        for(var i = 0 ; i < imgTotal ; i++){
35           img[i] = new Image();
36           img[i].index=i;
37           img[i].src = mulitImg[i]
38           // 图片加载完成
39           img[i].onload = function(){
40 
41              //第i张图片加载完成
42              flag++;
43              idtxt.textContent=(flag/imgTotal).toFixed(2) *100+'%';     
44              progrees.style.strokeDasharray=arcLength*(flag/imgTotal)+' 1000';// 第二个值必须大于周长
45           
46              if( flag == imgTotal ){
47                 //全部加载完成
48              }
49           };
50           // 图片加载失败----继续执行,可以选择用另一张图片替换
51           img[i].onerror = function(){
52              //第i张图片加载失败
53             
54              flag++;  // 继续执行
55              // console.log(this.index+':'+this.src)
56             idtxt.textContent=(flag/imgTotal).toFixed(2) *100+'%';     
57              progrees.style.strokeDasharray=arcLength*(flag/imgTotal)+' 1000';// 第二个值必须大于周长
58              if( flag == imgTotal ){
59                 //全部加载完成
60              }
61           };
62        }
63        
64       // 获取css 样式
65       function css(t, n) {
66           return t.currentStyle ? t.currentStyle[n] : getComputedStyle(t, !1)[n]
67         }
68   }

 

posted @ 2018-03-05 13:53  柔和的天空  阅读(1139)  评论(0编辑  收藏  举报