zoukankan      html  css  js  c++  java
  • html2canvas 轮播保存每个图片内容

      接到了一个任务,就是,我们的整个页面,是一个大的轮播,然后到了固定的时间,比方说晚上12点的时候,截取每个屏幕,然后发送邮件给指定的邮箱。当然了,发送邮件的这些操作,不用前端来关心,前端只需要把屏幕的当前页截图保存下来,然后发送给后台就行了。剩下的交给后台就行了。废话不多说,先说一下用到的插件,最主要的是当然是html2canvas.js了,这是一个把屏幕内容,绘制到canvas的一个插件。他的主要调用方式也很简单,请看下面的函数

     1 function html2Img() {
     2         html2canvas($("body"), {
     3             onrendered: function (canvas) {
     4                 //把截取到的图片替换到a标签的路径下载
     5                 $("#download").attr('href', canvas.toDataURL());
     6                 $("<img class='newImg' />").attr("src",canvas.toDataURL()).appendTo($("#imgList"));
     7                 console.log("应该能看到图片了")
     8                 //下载下来的图片名字
     9                 $("#download").attr('download', 'share.png');
    10                 $("#download").click();
    11             }
    12         });
    13     }

    第2行,就是你要保存的DOM元素。然后就能得到一个canvas,剩下的想要怎么做。就看自己的操作了。

      第二个需要注意的点就是,因为是轮播,我们需要等到到达了约定的时间,开始执行咱们的函数,请看下面的函数

     1     function beignImg(hour, min, s) {
     2         var now = new Date();
     3         var setHour = hour || now.getHours();
     4         var setMin = min || now.getMinutes();
     5         var setSec = s || now.getSeconds();
     6         setInterval(function () {
     7             var thisDate = new Date();
     8             console.log(setHour,setMin,setSec);
     9 
    10             if (thisDate.getHours() == setHour && thisDate.getMinutes() == setMin && thisDate.getSeconds() ==
    11                 setSec) {
    12                 swiperChange();
    13             }
    14         }, 1000)
    15     }

    整体的方法是比较简单的,就是根据时分秒相等,然后截图就可以了。遇到的一点问题,就是,swiper 的函数有几个和以前的版本不同了,需要使用新的函数,请看下面的代码

     1     function swiperChange() {
     2         console.log("开始截图");
     3         mySwiper.autoplay.stop();
     4         mySwiper.slideToLoop(0);
     5         setTimeout(()=>{
     6             html2Img();
     7         },1000)
     8         var index = mySwiper.realIndex;
     9         var imgNumber = mySwiper.slides.length - 2;
    10         console.log('imgNumber: ', imgNumber);
    11         var i = 1;
    12         var changeTime = setInterval(() => {
    13             mySwiper.slideNext(1);
    14             setTimeout(()=>{
    15                 html2Img();
    16             },100)
    17             i++;
    18             if (i == imgNumber) {
    19                 clearInterval(changeTime);
    20                 mySwiper.autoplay.start();
    21             }
    22         }, 3000)
    23     }

    上面代码的第3,4行,就是swiper 最新的函数(我这里使用的是swiper6);最新的版本和原来的不一样,简单的叙述就是,新的版本的循环播放的下标不一样了,这里需要注意一下。

      然后我们因为业务需求,我们的轮播图中,都是echart图表,所以,我在第三张轮播中,我插入 一个echart图表,也是能正确的截图的。下面把所有的代码都放在下面,里面的js都是CDN的方式引入的。所以,大家可以复制到任意的html文件中,然后运行就能看到效果了。图片的话,大家随便放上两张就可以了

      1 <!DOCTYPE html>
      2 <html>
      3 
      4 <head>
      5     <meta charset="utf-8">
      6     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
      7     <title>Test</title>
      8     <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.css">
      9     <style type="text/css">
     10         * {
     11             margin: 0;
     12             padding: 0;
     13         }
     14 
     15         html,
     16         body {
     17             height: 100%;
     18              100%;
     19         }
     20 
     21         .swiper-container {
     22              100%;
     23             height: 100%;
     24         }
     25 
     26         .swiper-container img {
     27              100%;
     28             max-height: 100%;
     29         }
     30 
     31         #download {
     32             /* display: none;
     33              */
     34              position: fixed;
     35              z-index: 1000;
     36              left: 0;
     37              top: 0;
     38              
     39         }
     40         #imgList{
     41             position: fixed;
     42             z-index: 1000;
     43              left: 50px;
     44              top: 0;
     45               1000px;
     46              height: 100px;
     47              float: left;
     48         }
     49         #imgList img{
     50              100px;
     51             height: 100px;
     52         }
     53     </style>
     54 
     55 </head>
     56 
     57 <body>
     58     <div class="swiper-container">
     59         <div class="swiper-wrapper">
     60             <div class="swiper-slide">
     61                 <img src="./img/457K.jpg" alt="">
     62             </div>
     63             <div class="swiper-slide">
     64                 <img src="./img/69.9K.jpg" alt="">
     65             </div>
     66             <div class="swiper-slide">
     67                 <div id="main" style=" 600px;height:400px;"></div>
     68             </div>
     69 
     70         </div>
     71         <!-- 如果需要分页器 -->
     72         <div class="swiper-pagination"></div>
     73         <!-- 如果需要导航按钮 -->
     74         <div class="swiper-button-prev"></div>
     75         <div class="swiper-button-next"></div>
     76 
     77 
     78 
     79     </div>
     80     <a href="" id="download">下载</a>
     81     <div id="imgList">
     82         
     83     </div>
     84     
     85 </body>
     86 <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
     87 <script src="https://cdn.bootcss.com/html2canvas/0.4.1/html2canvas.js"></script>
     88 <script src="https://unpkg.com/swiper/swiper-bundle.js"> </script>
     89 <script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/echarts/5.0.2/echarts.js" type="application/javascript"></script>
     90 <script>
     91     // 基于准备好的dom,初始化echarts实例
     92     var myChart = echarts.init(document.getElementById('main'));
     93 
     94     // 指定图表的配置项和数据
     95     var option = {
     96         title: {
     97             text: 'ECharts 入门示例'
     98         },
     99         tooltip: {},
    100         legend: {
    101             data:['销量']
    102         },
    103         xAxis: {
    104             data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
    105         },
    106         yAxis: {},
    107         series: [{
    108             name: '销量',
    109             type: 'bar',
    110             data: [5, 20, 36, 10, 10, 20]
    111         }]
    112     };
    113 
    114 // 使用刚指定的配置项和数据显示图表。
    115 myChart.setOption(option);
    116 
    117 
    118     var mySwiper = new Swiper('.swiper-container', {
    119         direction: 'horizontal', // 垂直切换选项
    120         loop: true, // 循环模式选项
    121         autoplay: true, //可选选项,自动滑动
    122         // 如果需要分页器
    123         pagination: {
    124             el: '.swiper-pagination',
    125         },
    126         // 如果需要前进后退按钮
    127         navigation: {
    128             nextEl: '.swiper-button-next',
    129             prevEl: '.swiper-button-prev',
    130         },
    131     })
    132 
    133     beignImg(11,54,4)
    134 
    135     function beignImg(hour, min, s) {
    136         var now = new Date();
    137         var setHour = hour || now.getHours();
    138         var setMin = min || now.getMinutes();
    139         var setSec = s || now.getSeconds();
    140         setInterval(function () {
    141             var thisDate = new Date();
    142             console.log(setHour,setMin,setSec);
    143 
    144             if (thisDate.getHours() == setHour && thisDate.getMinutes() == setMin && thisDate.getSeconds() ==
    145                 setSec) {
    146                 swiperChange();
    147             }
    148         }, 1000)
    149     }
    150 
    151     function swiperChange() {
    152         console.log("开始截图");
    153         mySwiper.autoplay.stop();
    154         mySwiper.slideToLoop(0);
    155         setTimeout(()=>{
    156             html2Img();
    157         },1000)
    158         var index = mySwiper.realIndex;
    159         var imgNumber = mySwiper.slides.length - 2;
    160         console.log('imgNumber: ', imgNumber);
    161         var i = 1;
    162         var changeTime = setInterval(() => {
    163             mySwiper.slideNext(1);
    164             setTimeout(()=>{
    165                 html2Img();
    166             },100)
    167             i++;
    168             if (i == imgNumber) {
    169                 clearInterval(changeTime);
    170                 mySwiper.autoplay.start();
    171             }
    172         }, 3000)
    173     }
    174 
    175     function html2Img() {
    176         html2canvas($("body"), {
    177             onrendered: function (canvas) {
    178                 //把截取到的图片替换到a标签的路径下载
    179                 $("#download").attr('href', canvas.toDataURL());
    180                 $("<img class='newImg' />").attr("src",canvas.toDataURL()).appendTo($("#imgList"));
    181                 console.log("应该能看到图片了")
    182                 //下载下来的图片名字
    183                 $("#download").attr('download', 'share.png');
    184                 $("#download").click();
    185             }
    186         });
    187     }
    188 </script>
    189 
    190 </html>
    View Code
  • 相关阅读:
    33 函数参数的传递方式
    33 函数递归调用
    32 头文件
    31 函数
    30 枚举
    centos6.5升级默认的Mysql到5.5方法
    Centos6.5命令行快捷键
    redhat 安装lamp
    CentOS6.5中的vsftpd安装配置
    添加一个用户并且让用户获得root权限
  • 原文地址:https://www.cnblogs.com/daniao11417/p/14776674.html
Copyright © 2011-2022 走看看