Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
body { background: #18222F; } .wrapper { position: absolute; width: 400px; height: 400px; margin: auto; top: 0; bottom: 0; left: 0; right: 0; display: flex; flex-direction: row; } .container { flex: 1; padding: 0 20px; }
JavaScript
// // Library // var Dial = function(container) { this.container = container; this.size = this.container.dataset.size; this.strokeWidth = this.size / 8; this.radius = (this.size / 2) - (this.strokeWidth / 2); this.value = this.container.dataset.value; this.direction = this.container.dataset.arrow; this.svg; this.defs; this.slice; this.overlay; this.text; this.arrow; this.create(); } Dial.prototype.create = function() { this.createSvg(); this.createDefs(); this.createSlice(); this.createOverlay(); this.createText(); this.createArrow(); this.container.appendChild(this.svg); }; Dial.prototype.createSvg = function() { var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.setAttribute('width', this.size + 'px'); svg.setAttribute('height', this.size + 'px'); this.svg = svg; }; Dial.prototype.createDefs = function() { var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs"); var linearGradient = document.createElementNS("http://www.w3.org/2000/svg", "linearGradient"); linearGradient.setAttribute('id', 'gradient'); var stop1 = document.createElementNS("http://www.w3.org/2000/svg", "stop"); stop1.setAttribute('stop-color', '#6E4AE2'); stop1.setAttribute('offset', '0%'); linearGradient.appendChild(stop1); var stop2 = document.createElementNS("http://www.w3.org/2000/svg", "stop"); stop2.setAttribute('stop-color', '#78F8EC'); stop2.setAttribute('offset', '100%'); linearGradient.appendChild(stop2); var linearGradientBackground = document.createElementNS("http://www.w3.org/2000/svg", "linearGradient"); linearGradientBackground.setAttribute('id', 'gradient-background'); var stop1 = document.createElementNS("http://www.w3.org/2000/svg", "stop"); stop1.setAttribute('stop-color', 'rgba(0, 0, 0, 0.2)'); stop1.setAttribute('offset', '0%'); linearGradientBackground.appendChild(stop1); var stop2 = document.createElementNS("http://www.w3.org/2000/svg", "stop"); stop2.setAttribute('stop-color', 'rgba(0, 0, 0, 0.05)'); stop2.setAttribute('offset', '100%'); linearGradientBackground.appendChild(stop2); defs.appendChild(linearGradient); defs.appendChild(linearGradientBackground); this.svg.appendChild(defs); this.defs = defs; }; Dial.prototype.createSlice = function() { var slice = document.createElementNS("http://www.w3.org/2000/svg", "path"); slice.setAttribute('fill', 'none'); slice.setAttribute('stroke', 'url(#gradient)'); slice.setAttribute('stroke-width', this.strokeWidth); slice.setAttribute('transform', 'translate(' + this.strokeWidth / 2 + ',' + this.strokeWidth / 2 + ')'); slice.setAttribute('class', 'animate-draw'); this.svg.appendChild(slice); this.slice = slice; }; Dial.prototype.createOverlay = function() { var r = this.size - (this.size / 2) - this.strokeWidth / 2; var circle = document.createElementNS("http://www.w3.org/2000/svg", "circle"); circle.setAttribute('cx', this.size / 2); circle.setAttribute('cy', this.size / 2); circle.setAttribute('r', r); circle.setAttribute('fill', 'url(#gradient-background)'); this.svg.appendChild(circle); this.overlay = circle; }; Dial.prototype.createText = function() { var fontSize = this.size / 3.5; var text = document.createElementNS("http://www.w3.org/2000/svg", "text"); text.setAttribute('x', (this.size / 2) + fontSize / 7.5); text.setAttribute('y', (this.size / 2) + fontSize / 4); text.setAttribute('font-family', 'Century Gothic, Lato'); text.setAttribute('font-size', fontSize); text.setAttribute('fill', '#78F8EC'); text.setAttribute('text-anchor', 'middle'); var tspanSize = fontSize / 3; text.innerHTML = 0 + '
%
'; this.svg.appendChild(text); this.text = text; }; Dial.prototype.createArrow = function() { var arrowSize = this.size / 10; var arrowYOffset, m; if(this.direction === 'up') { arrowYOffset = arrowSize / 2; m = -1; } else if(this.direction === 'down') { arrowYOffset = 0; m = 1; } var arrowPosX = ((this.size / 2) - arrowSize / 2); var arrowPosY = (this.size - this.size / 3) + arrowYOffset; var arrowDOffset = m * (arrowSize / 1.5); var arrow = document.createElementNS("http://www.w3.org/2000/svg", "path"); arrow.setAttribute('d', 'M 0 0 ' + arrowSize + ' 0 ' + arrowSize / 2 + ' ' + arrowDOffset + ' 0 0 Z'); arrow.setAttribute('fill', '#97F8F0'); arrow.setAttribute('opacity', '0.6'); arrow.setAttribute('transform', 'translate(' + arrowPosX + ',' + arrowPosY + ')'); this.svg.appendChild(arrow); this.arrow = arrow; }; Dial.prototype.animateStart = function() { var v = 0; var self = this; var intervalOne = setInterval(function() { var p = +(v / self.value).toFixed(2); var a = (p < 0.95) ? 2 - (2 * p) : 0.05; v += a; // Stop if(v >= +self.value) { v = self.value; clearInterval(intervalOne); } self.setValue(v); }, 10); }; Dial.prototype.animateReset = function() { this.setValue(0); }; Dial.prototype.polarToCartesian = function(centerX, centerY, radius, angleInDegrees) { var angleInRadians = (angleInDegrees-90) * Math.PI / 180.0; return { x: centerX + (radius * Math.cos(angleInRadians)), y: centerY + (radius * Math.sin(angleInRadians)) }; } Dial.prototype.describeArc = function(x, y, radius, startAngle, endAngle){ var start = this.polarToCartesian(x, y, radius, endAngle); var end = this.polarToCartesian(x, y, radius, startAngle); var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1"; var d = [ "M", start.x, start.y, "A", radius, radius, 0, largeArcFlag, 0, end.x, end.y ].join(" "); return d; } Dial.prototype.setValue = function(value) { var c = (value / 100) * 360; if(c === 360) c = 359.99; var xy = this.size / 2 - this.strokeWidth / 2; var d = this.describeArc(xy, xy, xy, 180, 180 + c); this.slice.setAttribute('d', d); var tspanSize = (this.size / 3.5) / 3; this.text.innerHTML = Math.floor(value) + '
%
'; }; // // Usage // var containers = document.getElementsByClassName("chart"); var dial = new Dial(containers[0]); dial.animateStart();
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>SVG环型加载动画-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号