GIF动画上传成静态图片并可鼠标经过播放与暂停

JS or jQuery 5 年前 回复

, ,

演示站直接放出原站链接:https://demo.demohuo.top/jquery/46/4605/demo/

直接贴出代码:


<!doctype html>
<html>
<head>
<meta charset="utf-8">
    <title>模拟GIF动画上传成静态图片并可控制播放与暂停</title>
    <script src="https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
    <style>
		body{padding: 30px}
        *{margin: 0; padding: 0;}
        .fileBtn{display: inline-block; position: relative; width: 60px; height: 30px;}
        .fileBtn label{position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: #108bff; color: #fff; border-radius: 100px; text-align: center; line-height: 30px; font-size: 14px; cursor: pointer;}
        .fileBtn input{width: 0; height: 0;}
        .gif{border: solid 1px #ccc; float: left;}
    </style>
</head>
<body>
	<h3>请选择一张gif图片上传查看效果,上传后鼠标移动到图片上gif播放,离开暂停</h3>
    <div class="fileBtn">
        <label for="file">上传</label>
        <input type="file" id="file" accept="image/*" multiple="multiple">
    </div>
</body>
<script>

	
	//dataURLtoBlob("a.gif");
    // base64 转 blob
    function dataURLtoBlob(dataurl) {
        var arr = dataurl.split(','),
            mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]),
            n = bstr.length,
            u8arr = new Uint8Array(n);
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new Blob([u8arr], {
            type: mime
        });
    }

    // 动态图片转静态
    function aniToReview(e){
        $(e).each(function () {
            var canvas = document.createElement('canvas'),
                ctx = canvas.getContext("2d"),
                base64 = '',
                aniUrl = this.src;
            $(this).one('load', function () {
                canvas.width = this.width;
                canvas.height = this.height;
                ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
                base64 = canvas.toDataURL("image/png");
                var reviewUrl = URL.createObjectURL(dataURLtoBlob(base64))
                $(this).attr({
                    'src': reviewUrl,
                    'realsrc': aniUrl
                });
            });
        })
    }

    aniToReview('.gif')

    // 上传文件
    $("#file").change(function(file){
        var fileList = file.target.files;
        for(var i=0; i<fileList.length; i++){
            if (window.FileReader) {
                var reader = new FileReader();
                reader.readAsDataURL(fileList[i]);
                reader.onloadend = function (e) {
                    var fileurl = URL.createObjectURL(dataURLtoBlob(e.target.result));
                    $('body').append('<img class="gif newgif" src='+fileurl+'>')
                    aniToReview('.newgif');
                    $('.gif').last().removeClass('newgif');
                };
            }
        }
    });

    // 鼠标经过时静态图片转动态
    $(document).on('mouseover','.gif',function () {
        var reviewImg = $(this).attr('src'),
            aniImg = $(this).attr('realsrc');
        $(this).attr({'src': aniImg, 'realsrc': reviewImg});
    })
    $(document).on('mouseout','.gif',function () {
        var reviewImg = $(this).attr('realsrc'),
            aniImg = $(this).attr('src');
        $(this).attr({'src': reviewImg, 'realsrc': aniImg});
    })

</script>
</html>

这是一个上传图片临时转换为链接的方法,其实我们可以用这段代码加以修改,可以让我们的网站GIF图片默认是静态的图片,当鼠标经过的时候显示动态的图片,这样可以减少资源的浪费,使得浏览更顺畅。

源代码转自https://www.sucaihuo.com/js/4605.html

支付宝打赏微信打赏

如果此文对你有帮助,欢迎打赏作者。

发表评论

欢迎回来 (打开)

(必填)