jquery - 在动态创建的元素上运行 Odometer.js
问题描述
我正在使用里程计为一些值设置动画https://github.hubspot.com/odometer/
我看到它说:
您用来更新其值的任何库,只要它们不通过擦除和重新渲染里程计元素来更新,都可以正常工作。
但这是我需要做的。有没有办法让它与动态创建的元素一起工作?我尝试在 AJAX 成功时再次调用整个库函数,但没有骰子......
我的页面加载元素可以正常工作(初始值 0 是通过 JS 设置的)
<strong id="odometer-away" class="odometer" data-value="'. $value .'"></strong>
我的 js 使用 jQuery.text()
来设置滚动到视图中的元素值。(从数据属性中提取)
var odo = $('#odometer-away');
odo.text(parseFloat(odo.data('value')));
但是当我通过 AJAX 创建更多元素并将它们加载到页面时,动画不再适用于这些元素,并且我看到这些元素不包含任何从元素在页面加载时具有的里程表脚本生成的 HTML。 ..所以很明显有些东西没有注册。
我找不到有关此的任何信息,而且我看起来很努力。这是一个新创建的元素没有动画的小提琴。
解决方案
您需要使用 new Odometer() 重新初始化新创建的元素。在您的小提琴演示中使用它。
/* elements already on the page will animate */
setTimeout(function(){
var odo = $('#odometer-away');
odo.text(parseFloat(odo.data('value')));
}, 1000);
/* create new element */
var div = document.createElement("DIV");
div.classList.add("odometer");
div.classList.add("new-odometer");
var t = document.createTextNode(0);
div.appendChild(t);
document.body.appendChild(div);
/* try and animate newly created elements but it just updates the value... */
setTimeout(function(){
var new_odo = document.querySelector('.new-odometer');
var odPhone = new Odometer({
el: new_odo,
});
odPhone.update(200);
}, 3000);
推荐阅读
- ansible - 如何在 INI 文件中使用加密变量 (ansible_ssh_pass)?
- reactjs - 如何从步数计算一个人的步伐?
- javascript - Button 创建的上传图片预览代码不会预览图片。Javascript/HTML
- python - 对大型 TIFF 堆栈 ndarray 上的 numpy/scipy 样条进行优化?
- javascript - Javascript - 在一个函数函数执行后一段时间内禁用所有嵌套函数
- xml - 无法加载 WixUIExtension.dll
- jira - Jira - 项目或时间
- javascript - 如何在 JS 的画布中更好地移动没有 clearRect() 的框?
- javascript - 为什么创建一个新的繁琐的连接会使我的程序无法完成?
- azure - Azure 门户性能测试:从巴西南部生成负载