Пытаясь получить прозрачный фон с Swiffy
Я пытаюсь использовать Google Swiffy, чтобы конвертировать некоторые простые Flash в HTML5. Мне нужен результирующий вывод, чтобы иметь прозрачный фон. Я читал на других сайтах и здесь на SO, что удаление текста ("backgroundColor":-65536,) из HTML должно работать. Однако для меня это просто делает фон черным.
Возможно, конвертер Swiffy изменился, и это решение больше не работает. Есть ли у кого-нибудь другие альтернативы.
(Я использую Safari и Mobile Safari для тестирования)
6 ответов
Для самого простого использования сервиса Swiffy или *.swf.html, который они выводят (при условии, что вы используете jQuery где-то в вашем веб-приложении):
setTimeout(function() {
$('#swiffycontainer *:first-child').css("background", "transparent");
}, 100);
Задержка состоит в том, чтобы подождать, пока Google не запишет их стиль в контейнерный div Это ужасное решение, потому что оно вызовет мерцание, если вы не управляете представлением div; Тем не менее, я полагаю, что большинство разработчиков управляют объектами swiffyobjects и создают свои собственные API для управления ими.
Ответ Google-
Если вам нужно сделать фон прозрачным, как это делается с помощью атрибута wmode="transparent", вы можете вставить следующий фрагмент кода в вывод Swiffy непосредственно перед вызовом stage.start ():
stage.setBackground (нуль);
Вы также можете заменить значение NULL любой допустимой строкой спецификации цвета CSS, чтобы переопределить цвет фона, определенный в преобразовании.
https://www.google.com/doubleclick/studio/swiffy/faq.html
работал на меня удачи
Вот еще один трюк CSS, который сработал для меня во время выполнения 5.2. я добавил class="swiffy-transparent"
к #swiffycontainer
div и применил этот CSS:
.swiffy-transparent svg g > g > rect {
fill: transparent !important;
}
Это проще, чем вы думаете, только определите эту строку в вашем HTML-скрипте:
<script>
var stage = new swiffy.Stage(document.getElementById('swiffycontainer'),
swiffyobject);
stage.start();
stage.setBackground(null); <!--and only have to add this line-->
</script>
Попробуйте установить background-color
в transparent
в вашем CSS с !important
, Это сработало для меня.
#swiffycontainer div {
background-color: transparent !important;
}
Извините, что отвечаю на мой собственный вопрос, но теперь я обнаружил, что метод удаления "backgroundColor: nnnn" в выводе Swiffy был нарушен Google в текущей версии среды выполнения Swiffy. Если вы также вернетесь к предыдущей версии среды выполнения, изменив:
SRC ="https://www.gstatic.com/swiffy/v5.2/runtime.js"
в
SRC ="https://www.gstatic.com/swiffy/v5.1/runtime.js"
вверху файла вы должны увидеть, что прозрачный фон работает правильно.
РЕДАКТИРОВАТЬ: Майкл Прескотт указал, что это решение не будет работать надежно из-за несоответствия между версией конвертера Swiffy и временем выполнения. Альтернативное решение, которое не зависит от присутствия экспортера 5.1, - это использовать другие решения, предложенные здесь. Попробуйте добавить следующую функцию в скрипт. Он опрашивает, чтобы увидеть, когда объект Swiffy установил свой предпочитаемый цвет фона, а затем он его заменяет.
(function() {
var firstNode=document.getElementById('swiffycontainer').childNodes[1];
//firstNode.style.visibility = "hidden";
if (firstNode.style.background=="") {
setTimeout(arguments.callee, 10);
} else {
firstNode.style.background = "none";
//firstNode.style.visibility = "visible";
}
})();
Это, кажется, не показывает сбой, когда Swiffy сначала устанавливает сплошной фон, а затем его заменяют. Однако для большей уверенности вы можете разрешить закомментированным строкам скрывать первый узел, пока не будет установлена правильная прозрачность.
с уважением