2016-12-20 5 views
1

Ich habe ein Problem mit einer Formel in JavaScript.Formel berechnet nicht korrekt in JavaScript

var animMoveX = $(this).attr('data-start') + (animPercentage/100) * ($(this).attr('data-finish') - $(this).attr('data-start')); 

In meinen Augen ist es ein ziemlich einfaches Stück Mathematik, aber die Konsole Ausgänge 120- [Variable nicht in Bezug auf animPercentage, zum Beispiel. 126.49681528662421].

Ich habe alle Variablen überprüft, und sie sind korrekt, und wenn ich eine der Variablen $ (this) .attr ('data-start') in einer der Positionen mit einer festen Zahl ersetzen, dann Die Berechnung läuft einwandfrei. Kann jemand etwas Licht darüber werfen, warum dies so ist und wie ich möglicherweise daran arbeiten könnte?

+4

Sie können '$ (this) .data (" start ")' anstelle von '$ (this) .attr verwenden (" data-start ")' – Pointy

+4

Precedence bedeutet, dass es eine Zahl berechnet rechts und füge es zum * string * von data-start hinzu (dh mit String-Verkettung). Das muss auch in eine Zahl umgewandelt werden. @ Pointys Vorschlag wird das tun, während "Daten" Strings in geeignete Datentypen konvertiert (wenn es möglich ist). –

+0

Danke an euch beide! – SorenRomer

Antwort

2

Von meinem Kommentar: Precedence bedeutet, dass es eine Zahl auf der rechten Seite berechnet und es zu der Zeichenfolge von Data-Start hinzufügen (d. H. Mithilfe von Zeichenfolge Verkettung). Das muss auch in eine Zahl umgewandelt werden. @ Pointy's Vorschlag wird das tun, wenn data Zeichenketten in geeignete Datentypen konvertiert (wenn es möglich ist).

Also im Grunde alle attr ändern() ruft zu Daten() Anrufe und „Zahlen“ (in Attributen gespeichert) werden Zahlen werden:

var animMoveX = $(this).data('start') + (animPercentage/100) * ($(this).data('finish') - $(this).data('start')); 

Als zusätzlichen Bonus, mit data statt attr kürzer ist code too :)

Verwandte Themen