У меня есть шанс на успех и неудачу с колбэками JS. Иногда я могу в течение нескольких недель собирать довольно сложные объекты и элементы управления, а затем BHAM один глаз дергается, и я нажимаю кнопки с моим лучшим впечатлением от шимпанзе. Те, кто обладает знаниями, укажут на очевидное, чего я никогда не знал, поэтому я до сих пор являюсь прекрасным примером эффекта Даннинга-Крюгера
Я учусь намного лучше на примере, поэтому в коде под Неправильный подход все значения принимают последнее назначенное значение, и вы попадаете в режим twitch . Второй фрагмент Наивный подход назначил разные метки, чтобы избежать проблемы с первым фрагментом.
В первом фрагменте первые 3x строки извлекают значения и присваивают их элементу.
var x = $(".slider-x").slider("value"),
y = $(".slider-y").slider("value");
$('.svg-position').attr("transform", "translate(" + x + "," + y + ")");
Без обратных вызовов назначенные значения перезаписываются более поздними строками.
Как переписать с помощью обратных вызовов, чтобы устранить необходимость в отдельных метках переменных?
Неправильный подход
$('.svg-icon').click(function () {
var x = $(".slider-x").slider("value"),
y = $(".slider-y").slider("value");
$('.svg-position').attr("transform", "translate(" + x + "," + y + ")");
var scale = $(".slider-svglogo-scale").slider("value");
$('.svg-size').attr("transform", "scale(" + scale / 100 + ")");
var scale = $(".slider-title-text-scale").slider("value");
$('.svg-business-title').css("font-size", scale1 + "px");
var x = $(".slider-title-text-x").slider("value"),
y = $(".slider-title-text-y").slider("value");
$('.title-text').attr("x", x);
$('.title-text').attr("y", y);
var strap = $('.text-strap').val();
$('.svg-strap-line').text(strap);
var x = $(".slider-strapline-text-x").slider("value"),
y = $(".slider-strapline-text-y").slider("value");
$('.strapline-text').attr("x", x);
$('.strapline-text').attr("y", y);
var scale = $(".slider-strapline-text-scale").slider("value");
$('.svg-strap-line').css("font-size", scale + "px");
//some code that builds html and sets values
});
Наивный подход
$('.svg-icon').click(function () {
var x = $(".slider-x").slider("value"),
y = $(".slider-y").slider("value");
$('.svg-position').attr("transform", "translate(" + x + "," + y + ")");
var scale = $(".slider-svglogo-scale").slider("value");
$('.svg-size').attr("transform", "scale(" + scale / 100 + ")");
var scale1 = $(".slider-title-text-scale").slider("value");
$('.svg-business-title').css("font-size", scale1 + "px");
var x1 = $(".slider-title-text-x").slider("value"),
y1 = $(".slider-title-text-y").slider("value");
$('.title-text').attr("x", x1);
$('.title-text').attr("y", y1);
var strap = $('.text-strap').val();
$('.svg-strap-line').text(strap);
var x2 = $(".slider-strapline-text-x").slider("value"),
y2 = $(".slider-strapline-text-y").slider("value");
$('.strapline-text').attr("x", x2);
$('.strapline-text').attr("y", y2);
var scale2 = $(".slider-strapline-text-scale").slider("value");
$('.svg-strap-line').css("font-size", scale2 + "px");
//some code that builds html and sets values
});