Доступ к переменной из функции
У меня есть функция, которая имеет значения, вставленные в переменные в другой функции.
Инициализация:
Когда окно изменяет размеры, оно запускает функцию resizeImage ().
$(window).resize(function () {
resizeImage();
});
Функция изменения размера:
Эта функция проверяет каждый элемент с классом изменения размера изображения и добавляет перенастройку SRC для изображения, изменяя значение ширины (динамически от scene7).
Проблема в том, что element.attr('src', newSrc); newSrc не существует, поскольку он хранится в sizingMethod().
Есть ли способ получить переменную из функции sizingMethod() и поместить ее в element.attr('src', newSrc);,
function resizeImage() {
$('.image-resize').each(function () {
var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc;
var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;
if ($(window).width() > 1824) {
sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000');
} else if ($(window).width() <= 1824 && $(window).width() > 1366) {
sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824');
}
element.attr('src', newSrc);
});
};
Функция определения размера:
function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){
sCurrentW = sSrc.match(sRegex);
sNewW = 'wid=' + sNewWidth;
sNewSrc = sSrc.replace(sCurrentW, sNewW);
textWidth = sNewW.replace('wid=', '');
$(".dsply-screen-size").text($(window).width());
$(".dsply-image-size").text(textWidth);
}
1 ответ
Когда вы используете примитив, вы отправляете значение, а не ссылку, поэтому sNewSrc!= NewSrc, поэтому любые изменения, которые вы вносите в sNewSrc для этой переменной, не изменят newSrc.
Вы можете исправить свой код, используя:
return: возвращаем значение в функции sizingMethod:
if ($(window).width() > 1824) {
newSrc = sizingMethod(src, regx, currentWidth, newWidth, '2000');
} else if ($(window).width() <= 1824 && $(window).width() > 1366) {
newSrc = sizingMethod(src, regx, currentWidth, newWidth, '1824');
}
Функция определения размера:
function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewWidth){
sCurrentW = sSrc.match(sRegex);
sNewW = 'wid=' + sNewWidth;
var sNewSrc = sSrc.replace(sCurrentW, sNewW);
textWidth = sNewW.replace('wid=', '');
$(".dsply-screen-size").text($(window).width());
$(".dsply-image-size").text(textWidth);
return sNewSrc;
}
закрытие: если объявить sizingMethod внутри анонимной функции, вы получите доступ к переменной newSrc и другим переменным.
function resizeImage() {
$('.image-resize').each(function () {
var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc;
var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;
if ($(window).width() > 1824) {
sizingMethod('2000');
} else if ($(window).width() <= 1824 && $(window).width() > 1366) {
sizingMethod('1824');
}
element.attr('src', newSrc);
function sizingMethod(sNewWidth){
currentWidth = src.match(regx);
var sNewW = 'wid=' + sNewWidth;
newSrc = sSrc.replace(currentWidth, sNewW);
textWidth = sNewW.replace('wid=', '');
$(".dsply-screen-size").text($(window).width());
$(".dsply-image-size").text(textWidth);
}
});
};
объект: если вы используете объект / массив вместо примитива в качестве аргумента
function resizeImage() {
$('.image-resize').each(function () {
var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc = {};
var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc;
if ($(window).width() > 1824) {
sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000');
} else if ($(window).width() <= 1824 && $(window).width() > 1366) {
sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824');
}
element.attr('src', newSrc.src);
});
};
Функция определения размера:
function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){
sCurrentW = sSrc.match(sRegex);
sNewW = 'wid=' + sNewWidth;
sNewSrc.src = sSrc.replace(sCurrentW, sNewW);
textWidth = sNewW.replace('wid=', '');
$(".dsply-screen-size").text($(window).width());
$(".dsply-image-size").text(textWidth);
}