Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Анимация без использования JQuery

Как сделать функцию JQuery animate без JQuery? С CSS свойствами всё понятно: их можно через transition и animation нарисовать, но как мне плавно изменить HTML?
Как мне плавно в течении 3-ёх секунд изменить значение прогресс бара и цифру возле него? Т.е. как плавно изменить ширину и значение возле бара с 10% до 80% за 3 секунды?
.progress { display: inline-block; width: 200px; height: 12px; border: 1px solid black; border-radius: 6px; overflow: hidden; } .progress_bar { display: inline-block; width: 10%; height: 14px; background-color: #3f51b5; } .progress_val { display: inline-block; }

10%


Ответ

В JS есть специальная функция requestAnimFrame, которая позволяет создать анимационные эффекты.
// Указываем начальное время анимации var start = performance.now(); requestAnimationFrame(function animate(time) { // Высчитываем процент завершённости: высчитываем сколько прошло времени и делим на нужную продолжительность var timeFraction = (time - start) / 3000; if (timeFraction > 1) timeFraction = 1; // Получаем элементы var Bar = document.querySelector('.progress_bar'), Val = document.querySelector('.progress_val'); // Указываем начальное значение var oldVal = 10, // Указываем новое значение newVal = 80; // Применяем Bar.style.width = (oldVal + ((newVal - oldVal) * timeFraction)) + '%'; Val.innerHTML = (oldVal + ((newVal - oldVal) * timeFraction)) + '%'; // Если анимация незаконченна, запускаем новый шаг if (timeFraction < 1) { requestAnimationFrame(animate); }; }); .progress { display: inline-block; width: 200px; height: 12px; border: 1px solid black; border-radius: 6px; overflow: hidden; } .progress_bar { display: inline-block; width: 10%; height: 14px; background-color: #3f51b5; } .progress_val { display: inline-block; }

10%

Подробнее про создание анимаций с помощью этой функции: https://learn.javascript.ru/js-animation
Так же следует использовать полифиллы, т.к. эта функция начинает работать только в IE10. Полифилл:
window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function( callback ){ window.setTimeout(callback, 1000 / 60); }; })();
Или же можно воспользоваться готовым плагином. К вашему вопросу подойдёт и самый простой плагин. К примеру, можно использовать мой: https://github.com/yuri-spivak/animations-in-javascript
new Animate({ duration: 3000, step: function (p) { // Получаем элементы var Bar = document.querySelector('.progress_bar'), Val = document.querySelector('.progress_val'); // Указываем начальное значение var oldVal = 10, // Указываем новое значение newVal = 80; // Применяем Bar.style.width = (oldVal + ((newVal - oldVal) * p)) + '%'; Val.innerHTML = Math.round(oldVal + ((newVal - oldVal) * p)) + '%'; } }); .progress { display: inline-block; width: 200px; height: 12px; border: 1px solid black; border-radius: 6px; overflow: hidden; } .progress_bar { display: inline-block; width: 10%; height: 14px; background-color: #3f51b5; } .progress_val { display: inline-block; }
10%

step – вызывается при каждом шаге анимации и возвращает процент завершённости анимации

Динамическое создание градиента вдоль пути SVG

Я динамически создаю путь, используя SVG. Далее я хочу добавить градиент к своему пути, но я застрял.
Как я пытался сделать, показано на изображении 2. Мой градиент идет вдоль пути, но мне нужно, чтобы градиент имел вид, как на изображении 1.

Изображение 1

Изображение 2
Мои определения gradient и stroke следующие:

скрипт
svgPath.setAttribute("stroke", "url(#grad1");` svgPath.setAttribute("fill", "none"); svgPath.setAttribute("stroke-linejoin", "round");` svgPath.setAttribute("stroke-width", "10"); });


Ответ

Решил привести пример анимации появления polyline, пришлось заключить animate в каждый polyline, чтобы получить нужный результат, а далее можно кастомизировать анимацию, как душа пожелает(имею ввиду изменение местоположения(from="N,N etc."):
polyline { stroke-linejoin: round; fill: none; animation: opac 3s 1; } @keyframes opac { from { opacity: 0; } to { opacity: 1; } }

Как парсить html в java?

Нужно пропарсить вебстраницу и извлечь из нее путь к картинке. Никак не могу разобраться с классом HTML Parser. Нужен пример - не могу найти в нете.


Ответ

А что сложного то?
У них самая обыкновенная документация в JavaDoc. Но даже там можно найти почти все, что нужно. Например
Typical usage of the parser is:
Parser parser = new Parser ("http://whatever"); NodeList list = parser.parse (null); // do something with your list of nodes.
А потом еще немного посмотреть:
NodeList parse(NodeFilter filter)
NodeFilter -> вот тут
Все, по-моему, слишком просто.
Не говоря уже об этом
bin/parser http://website_url [tag_name] where tag_name is an optional tag name to be used as a filter, i.e. A - Show only the link tags extracted from the document IMG - Show only the image tags extracted from the document TITLE - Extract the title from the document NOTE: this is also the default program for the htmlparser.jar, so the above could be: java -jar lib/htmlparser.jar http://website_url [tag_name]
UPD:
public static void main(String[] args) { try { Parser parser = new Parser("http://www.alliance-bags.ru/catalog.php?tov=576"); parser.setEncoding("windows-1251");
NodeFilter atrb1 = new TagNameFilter("IMG"); NodeList nodeList = parser.parse(atrb1);
for(int i=0; i } catch (ParserException e) { e.printStackTrace(); } }

Формальный язык, близкий к универсальному

Подскажите, пожалуйста, есть ли сабж в природе? Интересуют языки для описания (возможно, виртуальной) реальности, как можно более универсальные и компактные, позволяющие описывать объекты, явления, понятия и пр. Грубо говоря, позволяющие запихнуть в БД описание небольшого мирка/карты/локации с мобами-реками-озерами-деревьями и проч., достаточное для его построения игровым движком при условии наличия соответствующих методов в нем.
Если таковых нет, подойдут всякие исследования-эксперименты на эту тему.
UPDATE
Так как меня не понимают, уточняю: метка разработка-игр здесь потому, что люди из этой сферы вероятнее всего этим тоже интересовались, мне сабж нужен не для разработки игры (пока, по крайней мере). Совсем крутым был бы формализованный аналог википедии. Условие: текстовый, понятный человеку формат.
Не нужны размеры/модели объектов (т.к. какому-нибудь двумерному движку а-ля супермарио эти ваши три-дэ, градиенты и альфа-каналы побоку). Просто общие свойства:
искажения/координаты/цвет для ландшафта; размер/хитпойнты/макс. скорость/модель поведения (вида "спокойный"/"агрессивный"/"труп")` для мобов; какие-то характеристики игрока(-ов).


Ответ

Их очень много т.к. у каждой системы он свой, но "универсального" пока нет. Зато есть куча редакторов карт и локаций)
Погуглите "игровые движки" и посмотрите gamedev.ru
Язык программирования для разработки игр.

Android: Кодировка в WebView

Проблемка такая: есть готовый HTML-код (таблица в основном своём). Я его записываю в переменную и вывожу через WebView. И фишка в том,что у меня текст нормальный, русский в эмуляторе и на смартфоне. А у друга крякозяблы - что-то с кодировкой не то. В чём может быть проблема. Пробовал текст хранить и просто как переменная и в файле - одна малина. webView = (WebView) findViewById(R.id.webView); webView.loadData(text,"text/html","utf-8"); Строка примерного плана: Не найдено.


Ответ

Попробуй вот это :
webView.loadDataWithBaseURL(null, text,"text/html", "UTF-8", null);

Отследить запуск другого процесса c#

Можно ли как-то отследить запуск другого процесса(cmd.exe) средствами C#? Может быть есть какие-то библиотеки для работы с системными событиями?


Ответ

Так как вопрос для которого я написал данный ответ оказался "дубликатом", выкладываю решение здесь, тем более просили решение на C#, а принятый ответ на VB.
using System; using System.Management; // =>Project => Add Reference => System.Managemen
namespace ProcessMonitor { class Program { static void Main(string[] args) { ManagementEventWatcher startWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")); startWatch.EventArrived += startWatch_EventArrived; startWatch.Start(); ManagementEventWatcher stopWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace")); stopWatch.EventArrived += stopWatch_EventArrived; stopWatch.Start(); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); startWatch.Stop(); stopWatch.Stop(); }
static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value); }
static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value); } } }
Для отслеживания конкретного процесса можно записать так:
ManagementEventWatcher startWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = \"notepad.exe\""));
Важно! Использование ManagementEventWatcher требует привилегий администратора.
Возможные параметры которые можно использовать в представленном WQL запросе можно посмотреть тут.

Что означает слово SNAPSHOT в версии библиотеки?

Очень часто при подключении библиотек можно встретить после номера версии слово SNAPSHOT.
Пример:
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
Что оно означает?


Ответ

SNAPSHOT означает, что исходники будут дорабатываться в пределах данной версии. Условно говоря, если твоё приложение использует некую библиотеку, помеченную как SNAPSHOT, то её автор, найдя баг или просто внеся дополнительный функционал, а может и удалив что-то, может залить новый jar'ник библиотеки (артефакта), при этом не поменяв версию. Совесть автора будет чиста, а вот твоё приложение, заново потянув библиотеку из репозитория может уже не собраться.