我刚刚使用 jQuery 的ajaxStart和ajaxStop函数以及spin.js的组合实现了一个解决方案。
我在我的 App.ready 函数中运行它:
spinner: ->
opts =
lines: 13 # // The number of lines to draw
length: 20 # // The length of each line
width: 10 # // The line thickness
radius: 30 # // The radius of the inner circle
corners: 1 # // Corner roundness (0..1)
rotate: 0 # // The rotation offset
direction: 1 # // 1: clockwise, -1: counterclockwise
color: '#000' # // #rgb or #rrggbb or array of colors
speed: 1 # // Rounds per second
trail: 60 # // Afterglow percentage
shadow: true # // Whether to render a shadow
hwaccel: false # // Whether to use hardware acceleration
className: 'spinner' # // The CSS class to assign to the spinner
zIndex: 2e9 # // The z-index (defaults to 2000000000)
top: 'auto' # // Top position relative to parent in px
left: 'auto' #// Left position relative to parent in px
target = document.getElementById('centre')
spinner = new Spinner(opts)
$( document ).ajaxStart( =>
spinner.spin(target)
)
$( document ).ajaxStop( =>
spinner.stop()
)
center 是一个空的居中 div,用于定位微调器:
#centre{style: "position:fixed;top:50%;left:50%"}
ajaxStart 的好处是它可以跟踪并发下载。ajaxStart 在第一次调用开始时触发,ajaxStop 仅在所有 ajax 调用完成时才调用。它提供了一个很好的微调器体验。