Javascript 定义不变的值

Javascript 定义不变的值,javascript,Javascript,我意识到这个标题可能有误导性,但不知道如何用其他方式表达它 我面临的问题是,我从一个JSON对象中绘制了一个SVG面板,在该对象中有一个移动部件,由一个向我们发送值的服务器控制。我让运动部件处于正确的位置,但过了一段时间,它不断地向自身添加X位置,以至于超出了边界,这是不应该的。基本上,它是从初始位置重复添加x+x+x,但我希望它在计算一个新位置时首先考虑初始位置。 这是它背后的函数,我尝试使用if语句检查变量standardX和standardY,当它们被设置为未定义时,它会将obj.tran

我意识到这个标题可能有误导性,但不知道如何用其他方式表达它

我面临的问题是,我从一个JSON对象中绘制了一个SVG面板,在该对象中有一个移动部件,由一个向我们发送值的服务器控制。我让运动部件处于正确的位置,但过了一段时间,它不断地向自身添加X位置,以至于超出了边界,这是不应该的。基本上,它是从初始位置重复添加x+x+x,但我希望它在计算一个新位置时首先考虑初始位置。

这是它背后的函数,我尝试使用if语句检查变量standardX和standardY,当它们被设置为未定义时,它会将obj.transform.baseVal.getItem(length.matrix.e)设置为它的值,但这不起作用

关于解决方法有什么建议吗? 提前谢谢

var moveX = function(elem, i) {
return function () {
    var stepvalue = 6.25;
    var step = "0";
    var x1 = "0";
    var y1 = "0";
    var obj = elem.dyn[i].obj;
    var standardX = obj.transform.baseVal.getItem(length).matrix.e;
    var standardY = obj.transform.baseVal.getItem(length).matrix.f;
    console.log(elem.value);

    if (elem.value <= elem.dyn[i].rlow) {
        step = 0;
        x1 = standardY;
        y1 = standardX;
        obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


    } else if (elem.value > elem.dyn[i].rlow && elem.value <= elem.dyn[i].rhigh) {
        step = stepvalue * elem.value;
        x1 = step -25;
        y1 = standardY;
        x1 += standardX;
        obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


    } else {
        step = stepvalue * elem.dyn[i].rhigh;
        x1 = step -25;
        y1 = standardY;
        x1 += standardX;
        obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");

    }

}};
var moveX=函数(elem,i){
返回函数(){
var阶跃值=6.25;
var step=“0”;
var x1=“0”;
var y1=“0”;
var obj=elem.dyn[i].obj;
var standardX=obj.transform.baseVal.getItem(length).matrix.e;
var standardY=obj.transform.baseVal.getItem(length).matrix.f;
控制台日志(元素值);

if(elem.value elem.dyn[i].rlow&&elem.value不太确定,因为我们无法访问整个代码。
据我所知,您遇到的问题是,每次调用函数时都要初始化standardX和standardY

您可能希望在声明函数时初始化它们,如下所示:

var moveX = function(elem, i) {
    return function () {
        var stepvalue = 6.25;
        var step = "0";
        var x1 = "0";
        var y1 = "0";
        var obj = elem.dyn[i].obj;

        console.log(elem.value);

        if (elem.value <= elem.dyn[i].rlow) {
            step = 0;
            x1 = moveX.standardY;
            y1 = moveX.standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


        } else if (elem.value > elem.dyn[i].rlow && elem.value <= elem.dyn[i].rhigh) {
            step = stepvalue * elem.value;
            x1 = step -25;
            y1 = moveX.standardY;
            x1 += moveX.standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


        } else {
            step = stepvalue * elem.dyn[i].rhigh;
            x1 = step -25;
            y1 = moveX.standardY;
            x1 += moveX.standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");

        }

    };
};
moveX.standardX = obj.transform.baseVal.getItem(length).matrix.e;
moveX.standardY = obj.transform.baseVal.getItem(length).matrix.f;
var moveX=函数(elem,i){
返回函数(){
var阶跃值=6.25;
var step=“0”;
var x1=“0”;
var y1=“0”;
var obj=elem.dyn[i].obj;
控制台日志(元素值);

if(元素值元素动态[i].rlow&&elem.value您正在执行x1=step-25;然后x1+=standardX;这意味着您的x1一直在增加…我想问题就出在那里…您应该在那里给出一个示例:这将更容易理解您想要什么,并提供帮助!我从未使用过小提琴,所以不确定我是否知道如何设置它,但我在代码中更改为x1=(步骤-25)+standardX;但它仍然移动得太多。中间非常简单,只需将html(svg)代码粘贴在左上角(html),css样式粘贴在右上角(css),javascript/jquery粘贴在左下角。然后单击保存并…魔术。。。
var moveX = function(elem, i) {
    var standardX = obj.transform.baseVal.getItem(length).matrix.e;
    var standardY = obj.transform.baseVal.getItem(length).matrix.f;

    return function () {
        var stepvalue = 6.25;
        var step = "0";
        var x1 = "0";
        var y1 = "0";
        var obj = elem.dyn[i].obj;

        console.log(elem.value);

        if (elem.value <= elem.dyn[i].rlow) {
            step = 0;
            x1 = standardY;
            y1 = standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


        } else if (elem.value > elem.dyn[i].rlow && elem.value <= elem.dyn[i].rhigh) {
            step = stepvalue * elem.value;
            x1 = step -25;
            y1 = standardY;
            x1 += standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");


        } else {
            step = stepvalue * elem.dyn[i].rhigh;
            x1 = step -25;
            y1 = standardY;
            x1 += standardX;
            obj.setAttribute("transform", "translate("+ x1 + "," + y1 +")");

        }

    };
};