Это для Chrome, после ответа user800583 answer ...
Я потратил несколько часов на эту проблему и не нашел лучшего подхода, но:
window.outerWidth/window.innerWidth
, а когда это не так, это соотношение представляется (window.outerWidth-16)/window.innerWidth
, однако к 1-му случаю может быть применен второй. Итак, я пришел к следующему ...
Но этот подход имеет ограничения: например если вы играете аккордеон с окном приложения (быстро увеличивайте и уменьшайте ширину окна), вы получите промежутки между уровнями масштабирования, хотя масштаб не изменился (может быть, внешняя ширина и внутренняя ширина не точно обновляются в одно и то же время).
var snap = function (r, snaps)
{
var i;
for (i=0; i < 16; i++) { if ( r < snaps[i] ) return i; }
};
var w, l, r;
w = window.outerWidth, l = window.innerWidth;
return snap((w - 16) / l,
[ 0.29, 0.42, 0.58, 0.71, 0.83, 0.95, 1.05, 1.18, 1.38, 1.63, 1.88, 2.25, 2.75, 3.5, 4.5, 100 ],
);
И если вам нужен коэффициент:
var snap = function (r, snaps, ratios)
{
var i;
for (i=0; i < 16; i++) { if ( r < snaps[i] ) return eval(ratios[i]); }
};
var w, l, r;
w = window.outerWidth, l = window.innerWidth;
return snap((w - 16) / l,
[ 0.29, 0.42, 0.58, 0.71, 0.83, 0.95, 1.05, 1.18, 1.38, 1.63, 1.88, 2.25, 2.75, 3.5, 4.5, 100 ],
[ 0.25, '1/3', 0.5, '2/3', 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5 ]
);
Подумайте о рабочих процессах как близоруких элементах программирования.
Рабочий процесс не может видеть за пределами того, что сразу доступно в области. Таким образом, вложенные функции не работают с одним рабочим процессом, потому что не могут их видеть.
Исправление состоит в том, чтобы встраивать рабочие процессы вместе с вложенными функциями. Например:
workflow workflow1
{
function func1
{
"in func1"
workflow workflow2
{
function func2
{
"in func2"
}
func2
}
"in workflow2"
workflow2
}
"in workflow1"
func1
}
workflow1
Затем он видит вложенные функции:
in workflow1
in func1
in workflow2
in func2
Подробнее об этом здесь
На самом деле не ответ на ваш вопрос, а больше следа.
Из здесь :
Когда вы запускаете рабочий процесс сценария, Windows PowerShell анализирует сценарий в абстрактное синтаксическое дерево (AST). Наличие ключевого слова «workflow» заставляет компилятор script-to-workflow использовать этот AST для генерации XAML, формат, необходимый для среды выполнения Windows Workflow Foundation. Чтобы создать пользовательский интерфейс для взаимодействия с этим рабочим процессом, мы создаем функцию-обертку с теми же параметрами, но вместо этого координируем выполнение рабочего процесса в исполнительном редакторе PowerShell Workflow. Вы можете увидеть как функцию обертки, так и сгенерированную XAML, выполнив:
blockquote>Get-Command workflow1 |Format-List *
. Я сделал это для вашего конкретного рабочего процесса (см. Рабочий процесс1 в приведенной выше команде) и сгенерированы как XAML, так и PowerShell код ... интересный. Код XAML не содержит ссылок на func2, но содержит ссылку на func1.
Get-ChildItem function:func*
в рабочий процесс, он вообще не отображает func1
или func2
. Кажется, что существует много кажущихся произвольными ограничений для рабочих процессов , но, похоже, это не очень хорошо документировано. Я имею в виду, что есть тонна примеров , но это не объясняет, как все работает, только то, что они делают. Этот - лучший ресурс, который я могу найти.
– Bacon Bits
8 December 2014 в 17:11
Чтобы смутно суммировать все ответы, не задавайте вопросов, почему они ведут себя таким образом, просто согласитесь с тем, что он делает и справляется с этим. Достаточно справедливо.
Я написал целый конвейер развертывания в Powershell без обработки, и я бы хотел его оптимизировать, используя «foreach -parallel» рабочего процесса, однако, похоже, налогом на это является то, что я «Мне нужно вернуться и переписать все это в рабочий процесс. Это слишком большой налог, чтобы заплатить, к сожалению, только для того, чтобы получить параллельный цикл foreach.
Извлеченный урок - используйте рабочий процесс Powershell из get-go.
Вы можете обернуть функции и их вызовы внутри InlineScript - это может быть скрипт для каждой системы. Затем запустите этот inlinescript внутри цикла foreach -Parallel, работающего через системы, которые вы хотите запросить.