css3动画实现------利用长图片资源(jpg png 等)实现帧动画

首先,公司项目内部里实现利用许多张图片(30多张图片)制作成一个动画,效果是鼠标停留时实现img的自动转化。

我的思路有2:

1.js 做mouseover事件触发处理,利用setInteval()传入function和周期隔离事件50ms,但是在实现了相关方法之后在本地可以跑通效果,在预发布环境下出现了卡顿现象,难以出现相关的效果(js请求太多了)!!! 大佬说可以做一下限流实现,我还没做过,转战方法二了,代码事例如下:

    var i = -1;
    var num = "";
    var _interval;
    var icon_name;
    // js动画效果
    $(document).ready(function(){
       $(".icon-dyn").mouseover(function () {
           icon_name=this.id;
           _interval=setInterval(function () {
               i++;
               if(i<10){
                   num ="0"+i;
               }else if(i<34){
                   num = i+"";
               }else{
                    i=-1;
                    num="00";
               }
               var img_addr= "css/i/dynamic_icons/"+ icon_name +"/"+icon_name+"_"+num+".png";
               $("#"+icon_name).attr("src",img_addr);
           },50);
       });
        $(".icon-dyn").mouseout(function () {
            icon_name=this.id;
            window.clearInterval(_interval);
            resetImg();
        });
    });
    function resetImg() {
        $("#"+icon_name).attr("src", "css/i/dynamic_icons/"+ icon_name +"/"+icon_name+"_00.png");
    }
注:相当卡顿,炸裂卡顿!!

2.css3实现多一个长图片的读取,background:url(#长图片资源路径#),对该层设定css3动画效果,具体事例参考的是博客中的做法 ----点击打开链接。那么下面整个步骤存在着以下问题:

   2.1:制作长图片(拼接问题)

            大佬说可以用ps弄,自己弄了好久,对后端人感觉好难。。。所以找了段java代码实现图片的拼接、剪辑功能的如下:

 public static void mergeImage(String[] files, int type, String targetFile) {
        int len = files.length;
        if (len < 1) {
            throw new RuntimeException("图片数量小于1");
        }
        File[] src = new File[len];
        BufferedImage[] images = new BufferedImage[len];
        int[][] ImageArrays = new int[len][];
        for (int i = 0; i < len; i++) {
            try {
                src[i] = new File(files[i]);
                images[i] = ImageIO.read(src[i]);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            int width = images[i].getWidth();
            int height = images[i].getHeight();
            ImageArrays[i] = new int[width * height];
            ImageArrays[i] = images[i].getRGB(0, 0, width, height, ImageArrays[i], 0, width);
        }
        int newHeight = 0;
        int newWidth = 0;
        for (int i = 0; i < images.length; i++) {
            // 横向
            if (type == 1) {
                newHeight = newHeight > images[i].getHeight() ? newHeight : images[i].getHeight();
                newWidth += images[i].getWidth();
            } else if (type == 2) {// 纵向
                newWidth = newWidth > images[i].getWidth() ? newWidth : images[i].getWidth();
                newHeight += images[i].getHeight();
            }
        }
        if (type == 1 && newWidth < 1) {
            return;
        }
        if (type == 2 && newHeight < 1) {
            return;
        }

        // 生成新图片
        try {
            BufferedImage ImageNew = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            int height_i = 0;
            int width_i = 0;
            for (int i = 0; i < images.length; i++) {
                if (type == 1) {
                    ImageNew.setRGB(width_i, 0, images[i].getWidth(), newHeight, ImageArrays[i], 0,
                            images[i].getWidth());
                    width_i += images[i].getWidth();
                } else if (type == 2) {
                    ImageNew.setRGB(0, height_i, newWidth, images[i].getHeight(), ImageArrays[i], 0, newWidth);
                    height_i += images[i].getHeight();
                }
            }
            //输出想要的图片
            ImageIO.write(ImageNew,"png", new File(targetFile));

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

注:如果给的是png文件可能存在透明度问题,在使用代码进行拼接的时候可能存在着问题,(target图片大小不变,但是里面的rgb值也就是颜色变了),笨一点的话用画图转jpg就会去掉那些透明度了~~~  也可以用ps录个动作~~~~:》

2.2background的坑

    这里面的样例是采用的background引入图片,但是往往这个父层存在着相关的子元素(就是图片),而background的index是最低的,也就是所有的子元素往往是遮盖在background上(悲剧)。。。目前我的方法是hover伪类选择器下对子元素做出display:none操作~~~也不知道有没有大神告知聪明一点的方法

  2.3 动画设计

 div{
            width:140px;
            height:140px;
            background: url(http://images2015.cnblogs.com/blog/754767/201606/754767-20160601000042992-1734972084.png) ;
            animation:run 1s steps(1, start) infinite;
                -webkit-animation:run 1s steps(1, start) infinite;
        }
@keyframes run{
    from{
        background-position: 0 0;
    }
    to{
        background-position: -1540px 0 ;
    }
}
这是横着放的长图片(1540px *140px) 有可能还设置background-size:${宽} ${高}来设置图片高度,那动画也要设置对应的拖动长度~~ 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现background-image图片渐显渐隐动画,可以通过CSS3的transition和opacity属性来实现。具体实现步骤如下: 1. 首先,需要将要渐显渐隐的图片设置为HTML元素的背景图,例如: ``` <div class="image"></div> ``` ``` .image { background-image: url('path/to/image.jpg'); width: 500px; height: 300px; } ``` 2. 接着,使用CSS3的transition属性来定义背景图的渐变效果,例如: ``` .image { background-image: url('path/to/image.jpg'); width: 500px; height: 300px; transition: opacity 0.5s ease-in-out; } ``` 其中,transition属性用于指定CSS属性及其过渡效果的持续时间、过渡方式和延时时间,这里指定了opacity属性在0.5秒内进行渐变,渐变方式为ease-in-out。 3. 最后,在需要触发图片渐变效果的事件中,使用opacity属性来控制图片的透明度,例如: ``` .image { background-image: url('path/to/image.jpg'); width: 500px; height: 300px; transition: opacity 0.5s ease-in-out; opacity: 0; /* 初始状态为透明 */ } .image:hover { opacity: 1; /* 鼠标悬浮时逐渐显示 */ } ``` 这里假设需要在鼠标悬浮时触发背景图的渐显渐隐效果,因此在原始状态下将图片的opacity属性设置为0,即完全透明。当鼠标悬浮在图片上时,通过:hover伪类将opacity属性设置为1,背景图将逐渐显示出来,实现渐显渐隐效果。 以上就是通过CSS3实现background-image图片渐显渐隐动画的方法,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值