Autor | Zpráva | ||
---|---|---|---|
návštěvník Profil * |
#1 · Zasláno: 17. 5. 2015, 19:07:15
Do knihovny Springy jsem přidal funkci RGBMix:
(function (root, factory) { if (typeof define === 'function' && define.amd) { define(function () { return (root.returnExportsGlobal = factory()); }); } else if (typeof exports === 'object') { module.exports = factory(); } else { root.Springy = factory(); } }(this, function() { var Springy = {}; Springy.RGBMix = function (color1, color2, alpha) { color1 = Color(color1); color2 = Color(color2); var r = color1.red() * alpha + color2.red() * (1-alpha); var g = color1.green() * alpha + color2.green() * (1-alpha); var b = color1.blue() * alpha + color2.blue() * (1-alpha); return Color().rgb([r, g, b]).hexString(); } return Springy; })); V druhé knihovně potřebuju použít tu funkci tak zkouším: (function() { jQuery.fn.springy = function(params) { var RGBMix = new Springy.RGBMix(); var fadeColors = { f1:RGBMix('black',fadeColor,0.45), f2:RGBMix('black',fadeColor,0.18), f3:RGBMix('black',fadeColor,0.15) } var layout = this.layout = new Springy.Layout.ForceDirected(params); return this; } })(); var fadeColors = { f1:"", f2:"" , f3:"" }; tak to jede. |
||
Joker Profil |
#2 · Zasláno: 17. 5. 2015, 19:19:58
návštěvník:
Když budu předpokládat existenci funkce Color a příslušného objektu, není definovaná proměnná fadeColor. |
||
návštěvník Profil * |
#3 · Zasláno: 17. 5. 2015, 20:07:48
Jsem to zkrátil ta deklarace tam někde je. Rozjel jsem to voláním Springy.RGBMix
|
||
Časová prodleva: 13 dní
|
|||
návštěvník Profil * |
#4 · Zasláno: 30. 5. 2015, 15:38:16
Opět potřebuji poradit jak rozjet funkce v knihovně springy.js (http://getspringy.com/demo.html). Přidal jsem tam tyto funkce:
/* FUNCTIONS TO CALCULATE DISTANCE BETWEEN MOUSE CURSOR AND NODE. UNITS: PIXELS. */ Layout.ForceDirected.prototype.setMouseVector = function(x,y) { this.mousepoint.x = x; this.mousepoint.y = y; console.log(this); return this; }; Layout.ForceDirected.prototype.mpSubtract = function(v2) { this.mousepoint.x = this.mousepoint.x - v2.mousepoint.x; this.mousepoint.y = this.mousepoint.y - v2.mousepoint.y; return this; }; Layout.ForceDirected.prototype.mpMagnitude = function() { return Math.sqrt(this.mousepoint.x*this.mousepoint.x + this.mousepoint.y*this.mousepoint.y);; }; funkce má být volána ze souboru springyui.js jQuery(canvas).mousemove(function(e) { if (dragged == null) { if ( (new Date().getTime()) - timer >= wait ) timer = new Date().getTime(); else return false; } var canvasPosition = jQuery(this).offset(); nearest = layout.getNode( canvasPosition, e.pageX - canvasPosition.left, // x e.pageY - canvasPosition.top // y ); p = layout.getMousePoint(); // @TODO: VYPOČÍTAT magnitude (délku přepony) var coords = layout.setMouseVector(e.pageX, e.pageY); console.log(coords); var sizes = coords.subtract(nearest); var distance = sizes.magnitude(); } |
||
návštěvník Profil * |
#5 · Zasláno: 31. 5. 2015, 17:55:29
Tak změna. Chtěl bych pod
jQuery.fn.springy http://getspringy.com/springyui.js umístit tyto funkce, ale aby byly prototyp: /* FUNCTIONS TO CALCULATE DISTANCE BETWEEN MOUSE CURSOR AND NODE. UNITS: PIXELS. */ this.prototype.setMouseVector = function(x,y) { this.track.x = x; this.track.y = y; return this; }; this.prototype.subtract = function(v2) { this.track.x = this.track.x - v2.track.x; this.track.y = this.track.y - v2.track.y; return this; }; this.prototype.magnitude = function() { return Math.sqrt(this.coords.x*this.coords.x + this.coords.y*this.coords.y);; }; Já už to jaksi zkoušel jako prototyp, ale nešlo to. Zkoušel jsem to dát dodatečně za jQuery.fn.springy a taky dovnitř. Problémem je, že na začátku jQuery.fn.springy je nastavení proměnných, ty by každopádně měly zůstat tam na začátku. Tam se nejdříve má nadefinovat this.track, který se v těch funkcích využívá. Uvnitř jQuery.fn.springy je definovaná událost jQuery(canvas).mousemove(function(e) { // a zevnitř se má spouštět: var distance = this.setMouseVector(e.pageX, e.pageY).subtract(nearest).magnitude(); } Takže bych potřeboval poradit kam přesně umístit ty funkce a jak to napsat, aby to fungovalo. Tzn. aby this obsahovalo this.track . Ještě jednou k té struktuře: jQuery.fn.springy = function(params) { // nastavení proměnných this.track = {x:null, y:null}; // ... var layout = this.layout = new Springy.Layout.ForceDirected(params, canvas); // .. Springy.requestAnimationFrame(function adjust() { // ... } // další nastavení // události jQuery(canvas).mousedown(function(e) { // ... } jQuery(canvas).mousemove(function(e) { // volání setMouseVector() odsud } jQuery(window).bind('mouseup',function(e){ //... další funkce. } } Čili jak udělat ten design aby to mělo hlavu a patu? |
||
Kubo2 Profil |
#6 · Zasláno: 31. 5. 2015, 23:50:19
návštěvník:
this nebude obsahovať this.track, ale výsledok volania konštruktora jQuery(canvas) tj. objekt jQuery. A navyše je v tom celom strašný zmätok. this.track je objekt { number x, number y }, ako nad ním chceš volať .setMouseVector()? A čo je v tom prvom kóde na prvom riadku this resp. this.prototype? |
||
návštěvník Profil * |
#7 · Zasláno: 1. 6. 2015, 08:58:49 · Upravil/a: návštěvník
Aha tak jsem to špatně napsal. Nejdříve musím znát souřadnice uzlu. Uzel získám pomocí nearest = getNode(...); Ale nearest je typu Node a ten je definován v jiném souboru v jiné knihovně (viz předchozí příspěvek). Nejdříve jsem zkoušel to volat z
Layout.ForceDirected.prototype.setMouseVector(); ale jelo to moc pomalu a nefungovalo zcela správně. Tak jsem to začal dělat znova a zkouším to přesunout do druhého souboru. Jenže to bych teda musel vytvořit objekt s vektorem pod jQuery.fn.springy ... a na něj namontovat ten prototyp. Pak by to mělo vypadat takto: jQuery(canvas).mousemove(function(e) { // ... var distance = nearest.setMouseVector(e.pageX, e.pageY).subtract(nearest).magnitude(); } Když to tam namontuju (do jQuery.fn.springy) tak mám hlášku TypeError: this.prototype is undefined this.prototype.subtract = function(v2) { this.track.x = this.track.x - v2.track.x; this.track.y = this.track.y - v2.track.y; return this; }; this.prototype.magnitude = function() { return Math.sqrt(this.coords.x*this.coords.x + this.coords.y*this.coords.y);; }; return this; |
||
návštěvník Profil * |
#8 · Zasláno: 1. 6. 2015, 12:15:08 · Upravil/a: návštěvník
Nebo jsem to zkoušel tímto stylem:
this.track.prototype.setMouseVector = function(x,y) { this.track.x = x; this.track.y = y; console.log(this); return this; }; A taky chyba TypeError: this.track.prototype is undefined Tak proč do toho this.track nejde ten prototyp namontovat? To musím udělat z this.track funkci? Prosím poraď jak to mám udělat. |
||
_es Profil |
#9 · Zasláno: 1. 6. 2015, 14:07:09
návštěvník:
Prototyp sa nastavuje funkcii - konštruktoru, volanému s operátorm new . Ak ti to hlási, že niečo.prototype je undefined , tak niečo nie je funkcia. Prečo skúšaš prototyp meniť cez this ? Nastav ho priamo tým funkciám.
|
||
návštěvník Profil * |
#10 · Zasláno: 1. 6. 2015, 23:00:12
_es:
díky, už se mi to povedlo zrealizovat. |
||
Časová prodleva: 10 let
|
0