You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dirty.html 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. <!DOCTYPE html>
  2. <html lang="en" dir="ltr">
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <script type="text/javascript" src="dist/polyfills.js"></script>
  7. <script type="text/javascript" src="dist/polyfillsIE.js"></script>
  8. <script type="text/javascript" src="dist/svg.min.js"></script>
  9. </head>
  10. <body style="background-color: #c7c7ff">
  11. <!-- <div id="absolute"><label>Absolute: <input type="range" min="0" max="1" step="0.01"></slider></label><span></span></div>
  12. <div id="position"><label>Position: <input type="range" min="0" max="5" step="0.01"></slider></label><span></span></div> -->
  13. <button name="back1000">Back 1000</button>
  14. <button name="back100">Back 100</button>
  15. <button name="forth100">Forth 100</button>
  16. <button name="forth1000">Forth 1000</button>
  17. <button name="speed2">Speed x2</button>
  18. <button name="speed05">Speed x0.5</button>
  19. <button name="stop">Stop</button>
  20. <button name="finish">Finish</button>
  21. <button name="pause">Pause</button>
  22. <button name="play">Play</button>
  23. <button name="reverse">Reverse</button>
  24. <span id="displayText"></span>
  25. <br>
  26. <!-- Making the svg -->
  27. <svg width=1000px height=500px id="canvas">
  28. <rect x=50 y=100 width=200 height=100 stroke=none stroke-width=2 />
  29. </svg>
  30. <!-- Modifying the svg -->
  31. <script type="text/javascript">
  32. // import SVG from './src/svg.js'
  33. //
  34. // window.SVG = SVG
  35. var rect = SVG('rect').hide()
  36. var sin = Math.sin
  37. var pi = Math.PI
  38. var round = Math.round
  39. function getColor(t) {
  40. var a = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150)
  41. var b = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200)
  42. var c = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150)
  43. var color = 'rgb('+ a +','+ b +','+ c +')'
  44. return color
  45. }
  46. // var rect1 = SVG('<rect>').addTo('svg').size(50, 50).move(100, 100)
  47. // var rect2 = SVG('<rect>').addTo('svg').size(50, 50).move(100, 200)
  48. //
  49. // var anim1 = new SVG.Runner(1000).element(rect1).loop(5, true, 1000).move(200, 100)
  50. // var anim2 = new SVG.Runner(1000).element(rect2).loop(5, true, 1000).move(200, 200)
  51. //
  52. // SVG('#absolute').on('input slide', function (e) {
  53. // var val = e.target.value
  54. // document.querySelector('#absolute span').textContent = val
  55. // anim1.absolute(val)
  56. // })
  57. //
  58. // SVG('#position').on('input slide', function (e) {
  59. // var val = e.target.value
  60. // document.querySelector('#position span').textContent = val
  61. // anim2.position(val)
  62. // })
  63. // rect.animate(4000)
  64. // .during(t => rect.transform({scale: sqrt(1 + t), rotate: 720 * t}))
  65. // .after(500, ()=> {rect.attr('stroke', 'white')})
  66. // .queue(() => rect.attr('fill', getColor(0)))
  67. // .animate(1500, 500, true)
  68. // .queue(()=> {}, t => rect.attr('fill', getColor(t)))
  69. // .animate(1000, true)
  70. // .move(200, 200)
  71. // .size(300, 300)
  72. // SVG.Animator.timeout(()=> { rect.animate().pause() }, 1000 - 10)
  73. // SVG.Animator.timeout(()=> { rect.animate().play() }, 2000 - 10)
  74. // SVG('rect')
  75. // .clone().show()
  76. // .animate()
  77. // .move(300, 200)
  78. //
  79. // for (let i = 0 ; i < 15; i++) {
  80. // for (let j = 0 ; j < 10; j++) {
  81. //
  82. // // Make the rect
  83. // let o = i + j
  84. // let rect = SVG('rect').clone().show()
  85. // .width(40).height(40)
  86. // .x(50 * i).y(50 * j)
  87. // .attr('fill', getColor(o * 0.1))
  88. //
  89. // // Move the rect
  90. // let {cx, cy} = rect.bbox()
  91. //
  92. // // Animate the rect
  93. // rect.animate(3000, Math.random() * 2000)
  94. // // .during(t => rect.transform({rotate: 700 * t, origin: [cx, cy]}))
  95. // .transform({rotate: 720}, true)
  96. // // .during(t => rect.attr('transform', `rotate(${700 * t})`))
  97. // .during(t => rect.attr('fill', getColor(o * 0.1 + t)))
  98. // }
  99. // }
  100. var canvas = SVG('#canvas')
  101. canvas.attr('viewBox', null)
  102. SVG.defaults.timeline.ease = '-'
  103. var r = new SVG.Runner(1000)
  104. var t = new SVG.Timeline().persist(true)
  105. r.schedule(t, 200)
  106. .animate(500).loop(5, true, 100)
  107. .animate(600, 200, 'absolute')
  108. .animate(600, 300)
  109. .animate(600, 300, 'now')
  110. .animate(1000, 0, 'absolute').loop(6, true)
  111. var schedule = t.schedule()
  112. schedule.forEach(function (s, i) {
  113. var rect = canvas.rect(s.duration / 10, 25)
  114. .move(100 + s.start/10, 100 + i*30)
  115. .attr('fill', '#000')
  116. s.runner.element(rect)
  117. .attr('fill', getColor(i*0.1))
  118. // if (i===0)
  119. // s.runner.during(console.log)
  120. })
  121. // t.play()
  122. var mover = canvas.line(100, 100, 100, 300).attr('stroke', 'black')
  123. mover.clone().insertAfter(mover)
  124. canvas.line(100, 300, 800, 300).attr('stroke', 'black')
  125. var text = SVG('#displayText')
  126. t.on('time', function (e) {
  127. mover.x(100 + e.detail/10)
  128. text.node.textContent = e.detail
  129. })
  130. t.on('finished', function (e) {
  131. console.log('finished')
  132. })
  133. SVG('button[name="back100"]').on('click', function (e) {
  134. t.seek(-100)
  135. })
  136. SVG('button[name="back1000"]').on('click', function (e) {
  137. t.seek(-1000)
  138. })
  139. SVG('button[name="forth100"]').on('click', function (e) {
  140. t.seek(100)
  141. })
  142. SVG('button[name="forth1000"]').on('click', function (e) {
  143. t.seek(1000)
  144. })
  145. SVG('button[name="speed2"]').on('click', function (e) {
  146. t.speed(2)
  147. })
  148. SVG('button[name="speed05"]').on('click', function (e) {
  149. t.speed(0.5)
  150. })
  151. SVG('button[name="pause"]').on('click', function (e) {
  152. t.pause()
  153. })
  154. SVG('button[name="play"]').on('click', function (e) {
  155. t.play()
  156. })
  157. SVG('button[name="stop"]').on('click', function (e) {
  158. t.stop()
  159. })
  160. SVG('button[name="finish"]').on('click', function (e) {
  161. t.finish()
  162. })
  163. SVG('button[name="reverse"]').on('click', function (e) {
  164. t.reverse()
  165. })
  166. canvas.rect(100, 100).on('click', function (e) {
  167. e.target.instance.animate()
  168. .move(Math.random()*1000, Math.random()*750)
  169. .timeline().on('finished', function (e) {
  170. console.log('rect finished')
  171. })
  172. })
  173. console.log(schedule)
  174. // var bla = SVG('<rect>').size(0, 0).move(200, 200).addTo('svg')
  175. // bla.animate().size(220, 200).queue(null, console.log)
  176. // var randPoint = (x = 50, y = 50) => [
  177. // Math.random() * 100 - 50 + x,
  178. // Math.random() * 100 - 50 + y
  179. // ]
  180. //
  181. // var poly = SVG('<polygon>').plot([
  182. // randPoint(),
  183. // randPoint(),
  184. // randPoint(),
  185. // randPoint(),
  186. // randPoint()
  187. // ]).attr({fill: 'none', stroke: 'black'}).addTo('svg')
  188. // var polyAni = poly.animate(new SVG.Spring(3000, 0))
  189. //
  190. // SVG.on(document, 'click', function (e) {
  191. // polyAni.plot([
  192. // randPoint(e.pageX-50, e.pageY-50),
  193. // randPoint(e.pageX+50, e.pageY-50),
  194. // randPoint(e.pageX+50, e.pageY),
  195. // randPoint(e.pageX+50, e.pageY+50),
  196. // randPoint(e.pageX-50, e.pageY+50)
  197. // ])
  198. // })
  199. // var mover = SVG('<ellipse>').size(50, 50).center(100, 100).addTo('svg')
  200. // var anim = mover.animate(new SVG.Spring(500, 10))
  201. //
  202. // let date = +new Date
  203. // SVG.on(document, 'mousemove', function (e) {
  204. // // if (+new Date - date > 50) {
  205. // // date = +new Date
  206. // // } else {
  207. // // return
  208. // // }
  209. //
  210. // //var p = mover.point(e.pageX, e.pageY)
  211. // var p = mover.doc().point(e.clientX, e.clientY)
  212. // //var p = {x: e.pageX, y: e.pageY}
  213. // //console.log(p)
  214. // anim.transform({px: p.x - 100, py: p.y - 100})
  215. // //anim.center(p.x, p.y)
  216. // })
  217. /*
  218. let canvas = SVG('#canvas')
  219. let rectangle = canvas.rect(100, 200).move(100, 0)
  220. let bbox = rectangle.bbox()
  221. var timer = 0
  222. rectangle.timeline().source(() => {
  223. timer += 2
  224. document.querySelector('#absolute span').textContent = timer
  225. return timer
  226. })
  227. rectangle.animate().transform({
  228. rotate: 90,
  229. origin: [bbox.cx, bbox.cy]
  230. })*/
  231. //
  232. // SVG('#absolute').on('input slide', function (e) {
  233. // var val = e.target.value
  234. //
  235. // canvas.clear()
  236. // canvas.ellipse(20, 20)
  237. // let re = canvas.rect(300, 150).move(100, 150).attr('opacity', 0.5)
  238. // re.clone()
  239. // .transform({rotate: 45, skew: 30}, true)
  240. //
  241. // re.clone()
  242. // .transform({
  243. // rotate: 45, skew: 30, /*translate: [150, 140], */
  244. // }, true)
  245. // .transform({rotate: val, origin: 'bottom-right'}, true)
  246. //
  247. // re.clone()
  248. // .transform({rotate: 45, skew: 30}, true)
  249. // .transform({rotate: val, origin: 'bottom-right'}, true)
  250. // .transform({skew}, true)
  251. // let a = canvas.rect(200, 400).move(500, 400)
  252. // .attr('opacity', 0.3)
  253. // .addClass('pink')
  254. // //.transform({ px: 100, py: 500, origin: 'top-left' })
  255. //
  256. //
  257. // var timer = 0
  258. // a.timeline().source(() => {
  259. // timer += 1
  260. // document.querySelector('#absolute span').textContent = timer
  261. // return timer
  262. // })
  263. //
  264. // let obj = { rotate: val * 180, origin: 'top-left' }
  265. // let obj2 = { rotate: val * 280, origin: 'center' }
  266. //
  267. // a.clone() // startPosition
  268. // a.clone().transform(obj, true).transform(obj2, true) // endPosition
  269. // })
  270. // let a = canvas.rect(200, 400).move(500, 400)
  271. //
  272. // a.animate(1000, 500).move(100, 100).animate(1000, 500).move(500, 400)
  273. /* FUZZYMS PLANETS!! */
  274. // let canvas = SVG('#canvas')
  275. // let gradient = canvas.gradient('radial', function(gradient) {
  276. // gradient.stop(0, '#f00')
  277. // gradient.stop(1, '#ff0')
  278. // })
  279. //
  280. // let gradientEarth = canvas.gradient('linear', function(gradient) {
  281. // gradient.stop(0, '#00f')
  282. // gradient.stop(1, '#0f0')
  283. // })
  284. //
  285. // let sun = canvas.circle(200).center(500, 300).attr({ fill: gradient })
  286. //
  287. // let earth = canvas.circle(100).center(1000, 300).attr({fill: gradientEarth})
  288. //
  289. // let moon = canvas.circle(50).center(1200, 300).attr({fill: '#ffa'})
  290. //
  291. // earth.animate(10000).loop().ease('-')
  292. // .transform({rotate: 360, origin: [500, 300]}, true)
  293. // .transform({rotate: 720, origin: 'center'}, true)
  294. // .on('step', (e) => {
  295. // // console.log(e)
  296. // })
  297. //
  298. // moon.animate(10000).loop().ease('-')
  299. // .transform({rotate: 360, origin: [500, 300]}, true)
  300. // .transform({rotate: 3600, origin: [1000, 300]}, true)
  301. /**
  302. * FUZZYS EXAMPLE
  303. */
  304. // let a = canvas.rect(200, 400).move(500, 400)
  305. // .attr('opacity', 0.3)
  306. // .addClass('pink')
  307. // .transform({ tx: 300, ty: 500, origin: 'top-left' })
  308. //
  309. // let obj = { rotate: 100, origin: 'top-left'}
  310. // let obj2 = { rotate: 280, origin: 'center' }
  311. // let obj3 = { rotate: 1000, origin: 'center', translate: [300, 200]}
  312. //
  313. //
  314. // var c = a.clone()
  315. //
  316. // c.animate(3000)
  317. // .transform(obj)
  318. // .transform(obj2, true) // animation
  319. //
  320. // a.clone().attr('fill', 'blue')
  321. // .transform(obj)
  322. // .transform(obj2, true) // endPosition
  323. // SAIVANS EXAMPLE
  324. // canvas.ellipse(20, 20).center(100, 100)
  325. // let r = canvas.rect(200, 400).move(100, 100)
  326. // .attr('opacity', 0.3)
  327. // //.transform({ tx: 300, ty: 500, origin: 'top-left' })
  328. //
  329. // // Normal usage
  330. // let wait = 3000
  331. // let rAnim = r.clone().attr('fill', '#f00').animate(wait).attr('fill', '#0f0')
  332. // let rDecl = r.clone().attr('fill', 'blue').animate(new SVG.Spring(wait, 15))
  333. // //let rDecl = r.clone().attr('fill', 'blue').animate(new SVG.PID(0.01, 0.001, 1, 10))
  334. //
  335. // // var timer = 0
  336. // // rDecl.timeline().source(() => {
  337. // // timer += 100
  338. // // return timer
  339. // // })
  340. //
  341. // let runTransformation = (transform) => {
  342. // return () => {
  343. // //transform = new SVG.Matrix(transform)
  344. // let relative = true
  345. // let affine = true
  346. // r.transform(transform, relative)
  347. // rAnim.animate(wait).transform(transform, relative, affine)
  348. // rDecl.transform(transform, relative, affine)
  349. // }
  350. // }
  351. //
  352. // setTimeout(runTransformation({
  353. // origin: 'top-left',
  354. // translate: [530, 250],
  355. // rotate: 300,
  356. // scale: 2,
  357. // shear: 1,
  358. // }), 0.1 * wait )
  359. //
  360. //
  361. //
  362. // setTimeout(runTransformation({
  363. // origin: 'top-left',
  364. // translate: [530, 250],
  365. // rotate: 100,
  366. // scale: 2,
  367. // shear: 1,
  368. // }), 0.4 * wait)
  369. //
  370. // setTimeout(runTransformation({
  371. // origin: 'top-left',
  372. // translate: [530, 250],
  373. // rotate: 100,
  374. // scale: 2,
  375. // shear: 1,
  376. // }), 0.6 * wait)
  377. // canvas.circle(50).center(100, 0).attr('fill', 'gray')
  378. //
  379. // setTimeout(runTransformation({
  380. // rotate: 360,
  381. // origin: [100, 0]
  382. // }), 0.1 * wait )
  383. //
  384. //
  385. // setTimeout(runTransformation({
  386. // rotate: 360,
  387. // }), 0.4 * wait)
  388. // const getConsole = (time) => {
  389. // return () => {
  390. // console.group(time)
  391. // console.log(0, rAnim.element()._transformationRunners[0] && rAnim.element()._transformationRunners[0].transforms.decompose().rotate)
  392. // console.log(1, rAnim.element()._transformationRunners[1] && rAnim.element()._transformationRunners[1].transforms.decompose().rotate)
  393. // console.log(2, rAnim.element()._transformationRunners[2] && rAnim.element()._transformationRunners[2].transforms.decompose().rotate)
  394. // console.log(3, rAnim.element()._transformationRunners[3] && rAnim.element()._transformationRunners[3].transforms.decompose().rotate)
  395. // console.log(4, rAnim.element()._transformationRunners[4] && rAnim.element()._transformationRunners[4].transforms.decompose().rotate)
  396. // console.groupEnd(time)
  397. // }
  398. // }
  399. //
  400. // logCall = (time) => {
  401. // setTimeout(getConsole(time), time)
  402. // }
  403. //
  404. // logCall(0.2 * wait)
  405. // logCall(0.3 * wait)
  406. // logCall(0.4 * wait)
  407. // logCall(0.5 * wait)
  408. // logCall(0.6 * wait)
  409. // logCall(0.7 * wait)
  410. // logCall(0.8 * wait)
  411. // logCall(0.9 * wait)
  412. // logCall(1 * wait)
  413. // logCall(1.1 * wait)
  414. // logCall(1.2 * wait)
  415. // logCall(1.3 * wait)
  416. // logCall(1.4 * wait)
  417. // logCall(1.5 * wait)
  418. </script>
  419. </body>
  420. </html>