Страницы

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

четверг, 10 января 2019 г.

График на CSS. Возможно ли?

Добрый день! Подскажите, пожалуйста, возможно ли выполнить такой график на css?


Ответ

Если все же на CSS
*{ box-sizing: border-box; } .graph { position: relative; width: 200px; height: 400px; } .circle { position: relative; width: 200px; height: 400px; overflow: hidden; } .box { position: absolute; transform-origin: 50% 50%; } .item { height: inherit; border: 20px solid; } .count-list { list-style-type: none; padding: 0; margin: 0; } .count-list li { position: absolute; top: 0; right: -20px; font-family: sans-serif; } .count-list li:nth-of-type(1){ top: 0; color: gold; } .count-list li:nth-of-type(2){ top: 30px; color: orangered; } .count-list li:nth-of-type(3){ top: 60px; color: darkturquoise; } /* ------ 1 ------- */ .b-1 { top: 0; left: 0; width: 400px; height: 400px; transform: rotate(0deg); } .b-1 .item { width: 200px; border-color: gold; border-right: none; border-bottom-left-radius: 200px; border-top-left-radius: 200px; } /* ------ 2 ------- */ .b-2 { top: 30px; left: 30px; width: 340px; height: 340px; transform: rotate(30deg); } .b-2 .item { width: 170px; border-color: orangered; border-right: none; border-bottom-left-radius: 170px; border-top-left-radius: 170px; } /* ------ 3 ------- */ .b-3 { top: 60px; left: 60px; width: 280px; height: 280px; transform: rotate(60deg); } .b-3 .item { width: 140px; border-color: darkturquoise; border-right: none; border-bottom-left-radius: 140px; border-top-left-radius: 140px; }

  • 1
  • 2
  • 3

Но уже лучше тогда использовать для такого препроцессоры. Мой код на CODEPEN
А еще лучше не мудрить, а рисовать все это svg.

Сглаживание анимации фона

Есть такой блок с фоном и эффектом:
html, body { margin: 0; padding: 0; width: 100%; height: 100%; } .box { width: 100%; height: 100%; background: url(http://www.nasa.gov/sites/default/files/thumbnails/image/potw1441a.jpg) center no-repeat; -webkit-background-size: 150%; background-size: 150%; transition: all 5.27s ease-in-out; } .box:hover { -webkit-background-size: 100%; background-size: 100%; }


При наведении на блок, фон начинает дергаться и как-то с задержками изменяться.
Это можно как-то исправить (сгладить), если применять transition именно к background-size (со 150% до 100%)?
P.S: С transform: scale; я знаю решение, спасибо!


Ответ

Вы видите «дергание», потому что используете очень большое время анимации. Если поставить 1 секунду, анимация проходит гладко: https://jsfiddle.net/0c4mqLp8/
Экспериментируйте с параметрами: all 5s ease или all 1s ease-in-out, например. У меня оба варианта работают гладко.
Почему происходит скачки: ваша картинка выровнена по-центру блока. Изменяя масштаб, ширина картинки меняется то на четное, то на нечетное значение. Пиксель — самая маленькая единица измерения: центр делит картинку пополам и при четном значении картинка делится поровну, а при нечетном остается 0.5 пикселей, которые и придают дергание фоновому изображению — оно перемещается то влево, то вправо.

Ограничение точками число

Как сделать так, чтобы число ограничивалось каждые 3 цифры точками, например, 123.745.126 и если дробное число то, 123.745.126.74?


Ответ

Это делается так
#include #include #include
struct Facet: std::numpunct { char do_thousands_sep() const { return '.'; }
std::string do_grouping() const { return "\3"; } };
int main() { std::cout.imbue(std::locale(std::locale(), new Facet)); std::cout << 1000000000; }
numpunct locale imbue Если вам нужно это число сохранить в строку, используйте stringstream

Как в java сделать comit в sql если я хочу закомитить много объектов?

Делаю так:
PreparedStatement ps = conn.prepareStatement( "INSERT INTO mydbcall1.Call0 (date,direction,operator,abonentTel,duration,coast1,coast2,corpPhone)" + " VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); try {
ps.setDate(1, new java.sql.Date(call.date.getTime()) ); ps.setString(2, call.direction); ps.setString(3, call.operator); ps.setString(4, call.abonentTel); ps.setInt(5, call.duration); ps.setDouble(6, call.coast1); ps.setDouble(7, call.coast2); ps.setString(8, call.corpPhone); ps.executeUpdate(); // for INSERT, UPDATE & DELETE
} finally { ps.close(); }
метод для 3000 объектов работает больше 1.5 минут.


Ответ

Не создавайте PreparedStatement каждый раз заново. Преимущество PreparedStatement перед обычным Statement именно в том, что можно его заранее отправить на сервер БД для компиляции и переиспользовать повторно. Отправляйте вставки пакетами (batch). Вероятно, вам придется подобрать оптимальный размер пакета. Используйте явное управление транзакцией. По-умолчанию транзакция завершается на каждый запрос к БД (autoCommit = true).
Вот пример с применением этих трех рекомендаций (используется try-with-resources):
private static final String INSERT_STATEMENT = "INSERT INTO mydbcall1.Call0(date,direction,operator,abonentTel,duration,coast1,coast2,corpPhone) VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
// ....
try ( Connection connection = database.getConnection(); PreparedStatement ps = connection.prepareStatement(INSERT_STATEMENT); ) { int i = 0; connection.setAutoCommit(false) for (Call call : calls) { ps.setDate(1, new java.sql.Date(call.date.getTime()) ); ps.setString(2, call.direction); ps.setString(3, call.operator); ps.setString(4, call.abonentTel); ps.setInt(5, call.duration); ps.setDouble(6, call.coast1); ps.setDouble(7, call.coast2); ps.setString(8, call.corpPhone); // ...
ps.addBatch(); i++;
if (i % 1000 == 0 || i == calls.size()) { ps.executeBatch(); // ограничиваем размер одного пакета тысячей вставок } } connection.commit(); } catch(SQLException e) { connection.rollback(); }

Изменить размер массива динамически

Например есть такой массив, как изменить его размер с 4 на другое число?
int[] array = new int[4];


Ответ

Вы подходите неправильно. Если вам нужно менять размер контейнера, вы должны вместо массива использовать List
Вы не сможете изменять размер, добавляя неинициализированные элементы, но вы сможете добавить элемент в конец при помощи Add, в начало или середину при помощи Insert, или удалять по индексу при помощи RemoveAt

MinGW или Cygwin?

Раньше просто компилировал с помощью g++ на Ubuntu, вытягивая компилятор с помощью пакетного менеджера:
$ sudo apt-get install g++ $ g++ -o main.a main.cpp
Или на Windows с помощью различных IDE, внутри которых, как мне говорили, стоит MinGW.
Сейчас хочется просто, используя внутреннюю консоль в Окнах, компилировать нативно под них самих же. Почитал про Cygwin и про MinGW, понял, тащемта, что к чему, но остались пробелы - не совсем ясно что мне нужно.
Можно ли подробно, а лучше очень просто, узнать о каждой возможности скомпилировать под Окна?


Ответ

Cygwin - это попытка перенести UNIX окружение в Windows, а MinGW (или современный вариант MinGW-w64) сосредоточен только на компиляторе GCC
Далее, при компиляции программы с помощью Cygwin, по условиям его лицензии вы будете линковаться с его динамической библиотекой cygwin1.dll и таскать её всюду за собой, в то время, как с MinGW, вы будете зависеть только от стандартных MSVC библиотек (по-умолчанию от msvcrt.dll).
Поскольку MinGW это только компилятор, то есть отдельный проект - MSYS2 который поставляет облегчённую/минимальную версию UNIX окружения в достаточном объёме, чтобы вести разработку почти как в UNIX (там есть bash, git, curl и т.д.). Причём, утилиты для MSYS2 собираются при помощи MinGW.
Про отличия MinGW от Cygwin можно ещё почитать:
в wiki: https://ru.wikipedia.org/wiki/MinGW в английской версии SO: What is the difference between Cygwin and MinGW? ну, и загуглить: Cygwin vs. MinGW

Синтаксис инициализации const членов класса

Есть класс
class object { public: object(); private: const double mass; };
Инициализация const double mass в конструкторе отрабатывает только так:
object::object(): mass(1) { }
Почему не проходит такой вариант?
object::object() { this->mass = 1; }
И как в таком случае инициализировать const члены класса, которые должны предварительно высчитываться относительно входных параметров конструктора?
Какие варианты в C++ удобны для объявления/инициализации const членов класса?


Ответ

Когда выполняется тело конструктора, то все члены данных объекта уже созданы. Поэтому в этом конструкторе
object::object() { this->mass = 1; }
в предложении
this->mass = 1;
применяется оператор присваивания, который нельзя использовать с константными объектами.
Если вам нужно определить значение константного члена данных на основе некоторых вычислений, то в качестве инициализатора используйте некоторую, например, статическую функцию - член класса.
object::object( some_argument ): mass( some_function( some_argument ) ) { }
Аргументами функции не обязательно должны быть аргументы конструктора. Можно использовать статические члены данных класса, не статически члены данных, которые уже были инициализированы в списке инициализации (лги в объявлении класса должны предшествовать, или объекты, которые находятся в области видимости определения конструктора.
Ниже показан пример
#include
class Object { public: Object( double x ) : x ( 2 * x ), mass( init( this->x ) ) { }
double get_mass() const { return mass; }
private: double x; const double mass; static double init( double x ) { return x < 0 ? -x / 2 : x; } };
int main() { Object obj( 10 );
std::cout << obj.get_mass() << std::endl;
return 0; }