• 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   }
  • 相关阅读:
    第一部分:开发前的准备-第二章 基础入门
    多线程笔记
    .net平台下垃圾回收机制
    xml基本操作和保存配置文件应用实例
    .net平台下C#socket通信(中)
    .net平台下C#socket通信(上)
    泛型
    面向过程和面向对象及面向对象的三大特征
    值类型和引用类型及参数传递
    js中typeof与instanceof区别
  • 原文地址:https://www.cnblogs.com/xuey/p/8508606.html
Copyright © 2020-2023  润新知