| 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: 11 let
|
|||
0