gif动画可控制播放

问题描述:

翻页H5,每次翻页进入某页面时,需要播放页面中的gif动画。gif动画不是循环的,只需播放一遍。浏览器却只会在第一次进入翻页时播放gif动画,第二次进入时停留在最后一帧。

处理方案:

每次进入某个页面时,删除gif元素并添加img元素,等待10毫秒后为img.src赋值。

// 预加载图片     相比于让图片url带随机数的方案,不需要每次加载。对于动辄上M的gif,体验优化明显。
var image = new Image();
image.src = "path";  

// 删除并重新创建  如果不删除元素,只让src='', 然后再等10毫秒赋值,Chrome实测并不能让gif重新动起来
$('#mygif').remove();
var a = $('<img id="mygif" />').insertAfter($('#gifBox'));
setTimeout(function () { // 实测如果不延时,gif 不会动。
    a.attr('src', image.src);
}, 10);

如果gif 本身是循环的,可以用photoshop调整为不循环。

参考资料:
https://stackoverflow.com/questions/3191922/restart-an-animated-gif-from-javascript-without-reloading-the-image

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在lvgl中,可以使用`lv_anim_t`结构体来实现动画播放控制。如果需要判断GIF动画是否播放完毕,可以使用该结构体的`start_cb`和`end_cb`成员函数来实现。 具体地,可以通过设置`end_cb`回调函数来判断GIF动画是否播放完毕。当动画播放结束时,该回调函数将被调用。例如: ```c static void gif_anim_end_cb(lv_anim_t *anim) { lv_gif_t *gif = anim->var; if (gif->play_cnt > 0 && ++gif->play_cnt >= gif->playback_count) { // 播放次数达到上限,停止播放 lv_gif_stop(gif); } } ``` 在回调函数中,可以通过判断动画播放次数和播放上限来确定是否停止播放。如果不需要限制播放次数,可以忽略这一部分。 然后,在开始播放GIF动画时,可以将上述回调函数设置为`end_cb`,例如: ```c lv_gif_t *gif = lv_gif_create(parent, NULL); lv_gif_set_src(gif, "path/to/gif/file.gif"); lv_anim_t anim; lv_anim_init(&anim); lv_anim_set_var(&anim, gif); lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t)lv_gif_set_frame); lv_anim_set_values(&anim, 0, lv_gif_get_frame_count(gif) - 1); lv_anim_set_time(&anim, lv_gif_get_anim_time(gif)); lv_anim_set_playback_time(&anim, lv_gif_get_anim_time(gif)); lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE); lv_anim_set_ready_cb(&anim, NULL); lv_anim_set_start_cb(&anim, NULL); lv_anim_set_end_cb(&anim, gif_anim_end_cb); lv_anim_start(&anim); ``` 这里使用了`lv_anim_t`结构体来实现动画播放,并将GIF动画指针作为`var`成员变量传递给了动画对象。在设置`end_cb`回调函数时,将上述函数`gif_anim_end_cb`设置为回调函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值