Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
body { background-color: #03A9F4; overflow: hidden; font-family: Arial, sans-serif; text-align: center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } svg { /*border: 1px solid Linen;*/ height: 100%; position: absolute; left: calc(50vw - 50vh); } #_slider rect { fill: White; pointer-events: none; } #_slider circle { fill: White; /*stroke: #333;*/ } text { dominant-baseline: central; text-anchor: middle; font-size: 5px; pointer-events: none; fill:#028bca; } svg text::selection { background: none; }
JavaScript
const SVG_NS = "http://www.w3.org/2000/svg"; const XLink_NS = "http://www.w3.org/1999/xlink"; const svg = document.querySelector("svg"); let draggable = false; let rid = null; let m = { x: 0, y: 0 }; const t = { x: 100, y: 100 }; // translate let dx = 0; // distance between the center of the balloon and the click point const spring = 0.09; const friction = 0.80; class Slider { constructor() { this.target = { x:0, y:0, r:5, fontSize:5 }; this.pos = { x:0, y:0, r:5, fontSize:5 }; this.vel = { x:0, y:0, r:0, fontSize:0 }; /*this.track = { props: { x: -50, y: -1, width: 100, height: 2 }, tagName: "rect" };*/ this.thumb = { props: { cx: 0, cy: 0, r: 2,style:"pointer-events: none;" }, tagName: "circle" }; this.balloon = { props: { cx: 0, cy: 0, r: 5 }, tagName: "circle" }; this.label = { props: { x: 0, y: 0,style:"font-size:5px" }, tagName: "text", text_content: "50" }; //this.track.elmt = drawElement(this.track, _slider); this.thumb.elmt = drawElement(this.thumb, _thumb); this.balloon.elmt = drawElement(this.balloon, _thumb); this.label.elmt = drawElement(this.label, _thumb); } getThisTargetY(){ if(draggable){ this.target.y = -11; this.target.r = 9; this.target.fontSize = 8; }else{ this.target.y = 0; this.target.r = 5; this.target.fontSize = 5;}; } getThisTargetX(m){ this.target.x = m.x - dx; if (this.target.x < -50) { this.target.x = -50 ; } if (this.target.x > 50) { this.target.x = 50; } } getNewPos(prop){//x,y,r,fontSize let dist = this.target[prop] - this.pos[prop]; let acc = dist * spring; this.vel[prop] += acc; this.vel[prop] *= friction; this.pos[prop] += this.vel[prop]; } update(){ this.getNewPos("y"); this.getNewPos("x"); this.getNewPos("r"); this.thumb.props.cx = this.target.x; this.balloon.props.cx = this.pos.x; this.label.props.x = this.pos.x; this.label.elmt.textContent = Math.round(this.target.x) + 50; this.label.props.y = this.balloon.props.cy = this.pos.y; this.label.props.style = "font-size:"+this.target.fontSize+"px" this.balloon.props.r = this.pos.r; updateElement(this.label); updateElement(this.thumb); updateElement(this.balloon); } } let slider = new Slider(); function drawElement(o, parent) { let elmt = document.createElementNS(SVG_NS, o.tagName); for (let name in o.props) { if (o.props.hasOwnProperty(name)) { elmt.setAttributeNS(null, name, o.props[name]); } } if (o.text_content) { elmt.textContent = o.text_content; } parent.appendChild(elmt); return elmt; } function updateElement(o) { for (let name in o.props) { if (o.props.hasOwnProperty(name)) { o.elmt.setAttributeNS(null, name, o.props[name]); } } } function oMousePosSVG(e) { let p = svg.createSVGPoint(); p.x = e.clientX; p.y = e.clientY; let ctm = svg.getScreenCTM().inverse(); p = p.matrixTransform(ctm); return p; } function transformedMousePos(e, t) { let m = oMousePosSVG(e); return { x: m.x - t.x, y: m.y - t.y }; } function Animation() { requestId = window.requestAnimationFrame(Animation); slider.update(); } Animation(); slider.balloon.elmt.addEventListener("mousedown", function(e) { e.preventDefault(); draggable = true; svg.style.cursor = "move"; m = transformedMousePos(e, t);// mouse position // distance between the center of the balloon and the click point dx = m.x - this.getAttributeNS(null, "cx"); slider.getThisTargetY(); }, false ); svg.addEventListener("mouseup", function(e) { draggable = false; svg.style.cursor = "default"; slider.getThisTargetY(); }, false ); svg.addEventListener("mousemove", function(e) { if (draggable) { m = transformedMousePos(e, t); slider.getThisTargetX(m) } else { svg.style.cursor = "default"; } });
粒子
时间
文字
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号