js анимация и css анимация_как добавить HTML в js файл
js анимация и css анимация_как добавить HTML в js файл

Работаем над страницей,В большинстве случаев вы столкнетесь с проблемой сделать это на странице.анимацияЭффект,Большую часть времени мы делаем анимацию, используя фреймворки (например, jquery).,Здесь я расскажу, как добиться эффекта кадровой анимации с помощью встроенного js!

1. Объяснение эффекта анимации с одинаковой скоростью: Анимация с равномерной скоростью означает, что эффект анимации выполняется с одинаковой скоростью от начала до конца.

Равномерная анимация

html,body{margin:0;padding:0;}

div{margin:0;padding:0;}

.odiv{width:200px; height:200px; background:#f00; position:relative; left:-200px; top:100px;}

.sdiv{width:20px; height:60px; background:#00f; position:absolute; top:70px; right:-20px;}

window.onload = function(){

var odiv = document.getElementById(‘odiv’);

odiv.onmouseover = function(){

startMover(0);

}

odiv.onmouseout = function(){

startMover(-200);

}

}

var timer = null;

функция startMover(itarget){//целевое значение

ClearInterval(timer);//Выполняем текущую анимацию и очищаем предыдущую анимацию

var odiv = document.getElementById(‘odiv’);

timer = setInterval(function(){

var speed = 0;

if(odiv.offsetLeft > itarget){

speed = -1;

}

else{

speed = 1;

}

if(odiv.offsetLeft == itarget){

clearInterval(timer);

}

else{

odiv.style.left = odiv.offsetLeft+speed+’px’;

}

},30);

}

//указывать:offsetWidth = ширина+отступ+граница

//offsetHeight = height+padding+border

//offsetWidth=(border-width)*2+(padding-left)+(width)+(padding-right)

//offsetHeight=(border-width)*2+(padding-top)+(height)+(padding-bottom)

/*

offsetLeft=(отступ смещения влево)+(смещение ширины среднего элемента)+(левое поле текущего элемента).

offsetTop=(верхняя часть отступа OffsetParent)+(смещение высоты среднего элемента)+(верхняя граница текущего элемента).

Ситуация особенная, когда offsetParent является телом:

В IE8/9/10 и Chrome offsetLeft = (левое поле тела)+(ширина границы тела)+(левое отступы тела)+(левое поле текущего элемента).

В FireFox offsetLeft = (поле слева от тела)+(отступ слева от тела)+(поле слева от текущего элемента).

Свойство offsetParent возвращает ссылку на объект, который находится ближе всего к элементу, вызывающему offsetParent (ближайший в содержащей его иерархии), и является элементом-контейнером, позиционированным с помощью CSS. Если этот элемент контейнера не позиционирован CSS, значение атрибута offsetParent является ссылкой на корневой элемент.

В общем, два правила:

1. Если родительский элемент текущего элемента не позиционируется CSS (позиция является абсолютной или относительной), offsetParent является телом.

2. Если родительский элемент текущего элемента имеет позиционирование CSS (позиция абсолютная или относительная), offsetParent принимает ближайший родительский элемент.

*/

2. Описание буферной анимации. Буферная анимация — это когда анимация заканчивается или начинается, а скорость динамически изменяется по мере выполнения анимации.

буферная анимация

html,body{margin:0;padding:0;}

div{margin:0;padding:0;}

.odiv{width:200px; height:200px; background:#f00; position:relative; left:-200px; top:100px;}

.sdiv{width:20px; height:60px; background:#00f; position:absolute; top:70px; right:-20px;}

window.onload = function(){

var odiv = document.getElementById(‘odiv’);

odiv.onmouseover = function(){

startMover(0);

}

odiv.onmouseout = function(){

startMover(-200);

}

}

var timer = null;

функция startMover(itarget){//Скорость и целевое значение

ClearInterval(timer);//Выполняем текущую анимацию и очищаем предыдущую анимацию

var odiv = document.getElementById(‘odiv’);

timer = setInterval(function(){

var Speed ​​= (itarget-odiv.offsetLeft)/10 //Значение изменения параметра скорости анимации буфера

//Если скорость больше 0, значит идти вправо, округляем в большую сторону

speed = speed>0?Math.ceil(speed):Math.floor(speed);

//Math.floor(); округляем вниз

if(odiv.offsetLeft == itarget){

clearInterval(timer);

}

else{

//clientLeft возвращает расстояние между значением свойства offsetLeft объекта и реальным значением в левой части текущего окна

odiv.style.left = odiv.offsetLeft+speed+’px’;

}

},30);

}

3. Анимация прозрачности

Описание: Анимация, которая обрабатывает эффекты прозрачности элементов.

анимация прозрачности

html,body{margin:0;padding:0;}

div{margin:0;padding:0;}

.odiv{width:200px; height:200px; background:#f00; position:relative; left:0px; top:100px;opacity:0.3; filter:alpha(opacity:30); float:left; margin:10px;}

window.onload = function(){

var odiv = document.getElementsByTagName(‘div’);

for(var i=0;i

{

odiv[i].onmouseover = function(){

startOP(this,100);

}

odiv[i].onmouseout = function(){

startOP(this,30);

}

odiv[i].timer = null;//Определено заранее

odiv[i].alpha = null;//Определено заранее

//Здесь обнаружена проблема. Свойство анимации объекта определять не нужно, но необходимо определить свойство прозрачности, иначе будет сообщено об ошибке.

}

}

function startOP(obj,utarget){

ClearInterval(obj.timer);//Сначала закрываем таймер

obj.timer = setInterval(function(){

var speed = 0;

if(obj.alpha>utarget){

speed = -10;

}

else{

speed = 10;

}

obj.alpha = obj.alpha+speed;

if(obj.alpha == utarget){

clearInterval(obj.timer);

}

obj.style.filter = ‘alpha(opacity:’+obj.alpha+’)’;//на основе IE

obj.style.opacity = parseInt(obj.alpha)/100;

},30);

}

4. Многообъектная анимация

Описание: Анимационные эффекты, выполняемые несколькими объектами вместе.

Анимация нескольких объектов

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;}

.odiv ul li{width:200px; height:100px; background:yellow; margin-bottom:20px;}

window.onload = function(){

var olist = document.getElementsByTagName(‘li’);

for(var i=0; i

{

olist[i].onmouseover = function(){

startmov(this,400);

};

olist[i].onmouseleave = function(){

startmov(this,200);

};

olist[i].timer = null;

}

function startmov(obj,itarget){

ClearInterval(obj.timer);//Очистить анимацию перед выполнением анимации

obj.timer = setInterval(function(){

var speed =0;

speed = (itarget – obj.offsetWidth)/8;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

if(obj.offsetWidth == itarget){

clearInterval(obj.timer);

}

else{

obj.style.width = obj.offsetWidth+speed+’px’;

}

},30);

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

5. Получите анимацию стиля

Примечание. Полученный здесь стиль предназначен для расчета стиля элемента, а затем управления элементом с помощью вычисленного результата.

стиль анимации

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;width:200px; height:200px; border:2px solid #000; background:red; font-size:20px;}

hjshfjdfsdfhsdj

/*

currentStyle: получить рассчитанный стиль, также называемый текущим стилем и окончательным стилем.

Преимущества: вы можете получить окончательный стиль элемента, включая значение по умолчанию браузера, в отличие от стиля, который может получить только встроенный стиль, поэтому он используется чаще.

Примечание. Составные стили, такие как значения атрибута фона, получить невозможно, можно получить только отдельные стили, такие как фоновый цвет и т. д.

alert (oAbc.currentStyle);

Жаль, что эта полезная вещь не совсем поддерживается крупными браузерами. Точнее, в протестированных мной браузерах «объект CSSStyleDeclaration» появлялся в IE8 и Opera 11; «неопределенный» появлялся в FF 12, chrome 14 и Safari 5.

Хотя currentStyle не может быть применен ко всем браузерам, вы можете отличить поддерживаемые и неподдерживаемые браузеры на основе приведенных выше результатов тестирования, а затем найти совместимый метод записи.

var oAbc = document.getElementById(“abc”);

if(oAbc.currentStyle) {

//IE、Opera

alert("Я поддерживаю currentStyle");

} else {

//FF、chrome、safari

alert("Я не поддерживаю currentStyle");

}

Фактически, в браузере FF мы можем использовать getComputedStyle(obj, false) для достижения того же эффекта, что и currentStyle в IE.

getComputedStyle(obj,false): В новой версии FF требуется только первый параметр, который является объектом операции. Запись «false» в качестве второго параметра также является распространенным способом его записи. Цель — обеспечить совместимость. со старой версией браузера Firefox.

Совместимое написание:

var oAbc = document.getElementById(“abc”);

if(oAbc.currentStyle) {

//IE、Opera

//alert("Я поддерживаю currentStyle");

alert(oAbc.currentStyle.width);

} else {

//FF、chrome、safari

//alert("Я не поддерживаю currentStyle");

alert(getComputedStyle(oAbc,false).width);

}

На пустой странице проверяется id="abc" тела. При тестировании приведенного выше кода в IE и Opera появляется сообщение «auto», а в трех других браузерах — «***px». Хотя результаты разные, можно обнаружить, что Chrome и Safari могут успешно читать значения атрибутов так же, как Firefox. Все три браузера (FF, Chrome и Safari), не поддерживающие currentStyle, поддерживают getComputedStyle.

Результаты показывают, что если судить о том, поддерживает ли браузер currentStyle + getComputedStyle, он может быть совместим со всеми основными браузерами. И метод совместимого письма не сложный. Вы его освоили? ^_^

Поддержка текущего стиля: IE, Opera

Поддержка getComputedStyle: FireFox, Chrome, Safari.

Обратите внимание на содержимое последнего всплывающего окна. currentStyle возвращает значение браузера по умолчанию «auto», а getComputedStyle возвращает конкретное значение «**px». Это должна быть небольшая разница между ними. Заинтересованная детская обувь может общаться и учиться вместе.

*/

window.onload = function(){

var odiv = document.getElementById(‘odiv’);

odiv.onmouseover = function(){

startMov(this);

};

function startMov(obj){

setInterval(function(){

obj.style.width = parseInt(getStyle(obj,’width’))+1+’px’;

obj.style.fontSize = parseInt(getStyle(obj,’fontSize’))+1+’px’;

},30);

}

function getStyle(obj,attr)

{

if(obj.currentStyle){

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];

}

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

6. Описание сложной многообъектной анимации: Сложная многообъектная анимация может управлять изменениями различных атрибутов элементов для достижения анимационных эффектов.

Сложная анимация нескольких объектов

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;}

.odiv ul li{width:200px; height:100px; background:yellow; margin-bottom:20px; border:2px solid #000;}

window.onload = function(){

var li1 = document.getElementById(‘li1’);

var li2 = document.getElementById(‘li2’);

li1.onmouseover = function(){

startMov(this,400,’width’);

};

li1.onmouseout = function(){

startMov(this,200,’width’);

};

li2.onmouseover = function(){

startMov(this,200,’height’);

};

li2.onmouseout = function(){

startMov(this,100,’height’);

};

function startMov(obj,itarget,attr){

ClearInterval(obj.timer);//Очистить анимацию перед выполнением анимации

obj.timer = setInterval(function(){

var icur = parseInt(getStyle(obj,attr));

var speed =0;

speed = (itarget – icur)/8;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

if(icur == itarget){

clearInterval(obj.timer);

}

else{

obj.style[attr] = icur+speed+’px’;

}

},30);

}

function getStyle(obj,attr)

{

if(obj.currentStyle){

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];

}

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

7. Сложная анимация нескольких объектов (с прозрачностью)

Сложная анимация нескольких объектов (с прозрачностью)

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;}

.odiv ul li{width:200px; height:100px; background:yellow; margin-bottom:20px; border:2px solid #000;}

#li1{opacity:0.3;filter:alpha(opacity:30);}

window.onload = function(){

var li1 = document.getElementById(‘li1’);

var li2 = document.getElementById(‘li2’);

li1.onmouseover = function(){

startMov(this,100,’opacity’);

};

li1.onmouseout = function(){

startMov(this,30,’opacity’);

};

li2.onmouseover = function(){

startMov(this,200,’height’);

};

li2.onmouseout = function(){

startMov(this,100,’height’);

}

li1.timer = null;

li2.timer = null;

function startMov(obj,itarget,attr){

ClearInterval(obj.timer);//Очистить анимацию перед выполнением анимации

obj.timer = setInterval(function(){

var icur = 0;

if(attr == ‘opacity’){

icur = Math.round(parseFloat(getStyle(obj,attr))*100 //Преобразуем в целое число и округление;

//Компьютеры часто ошибаются при вычислении десятичных дробей!

}

else{

icur = parseInt(getStyle(obj,attr));

}

var speed =0;

speed = (itarget – icur)/8;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

if(icur == itarget){

clearInterval(obj.timer);

}

else{

if(attr == ‘opacity’){

obj.style.filter = ‘alpha(opacity:’+(icur+speed)+’)’;

obj.style.opacity = (icur+speed)/100;

}

else{

obj.style[attr] = icur+speed+’px’;

}

}

},30);

}

function getStyle(obj,attr)

{

if(obj.currentStyle){

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];

}

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

8. Описание цепной анимации: Цепная анимация предназначена для выполнения следующего эффекта анимации после завершения текущей анимации.

цепная анимация

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;}

.odiv ul li{width:200px; height:100px; background:yellow; margin-bottom:20px; border:2px solid #000;}

#li1{opacity:0.3;filter:alpha(opacity:30);}

window.onload = function(){

var li1 = document.getElementById(‘li1’);

li1.onmouseover = function(){

startMov(li1,400,’width’,function(){

startMov(li1,200,’height’,function(){

startMov(li1,100,’opacity’);

});

});

};

li1.onmouseout = function(){

startMov(li1,30,’opacity’,function(){

startMov(li1,100,’height’,function(){

startMov(li1,100,’width’);

});

});

};

li1.timer = null;

функция startMov(obj,itarget,attr,fn){//fn функция обратного вызова

ClearInterval(obj.timer);//Очистить анимацию перед выполнением анимации

obj.timer = setInterval(function(){

var icur = 0;

if(attr == ‘opacity’){

icur = Math.round(parseFloat(getStyle(obj,attr))*100 //Преобразуем в целое число и округление;

//Компьютеры часто ошибаются при вычислении десятичных дробей!

}

else{

icur = parseInt(getStyle(obj,attr));

}

var speed =0;

speed = (itarget – icur)/8;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

if(icur == itarget){

clearInterval(obj.timer);

if(fn){

fn();

}

}

else{

if(attr == ‘opacity’){

obj.style.filter = ‘alpha(opacity:’+(icur+speed)+’)’;

obj.style.opacity = (icur+speed)/100;

}

else{

obj.style[attr] = icur+speed+’px’;

}

}

},30);

}

function getStyle(obj,attr)

{

if(obj.currentStyle){

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];

}

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

9. Одновременная анимация движения нескольких объектов (поддерживается цепная анимация)

Одновременная анимация движения нескольких объектов

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,tr,td {margin:0;padding:0; font-size:12px;}

table {border-collapse:collapse;border-spacing:0;}

fieldset,img {border:0}

address,caption,cite,code,dfn,em,strong,th,var {font-style:normal;font-weight:normal}

ol,ul {list-style:none}

caption,th,td{text-align:center}

h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal}

q:before,q:after {content:”}

abbr,acronym { border:0}

.odiv{position:relative;}

.odiv ul li{width:200px; height:100px; background:yellow; margin-bottom:20px; border:2px solid #000;}

#li1{opacity:0.3;filter:alpha(opacity:30);}

window.onload = function(){

var li1 = document.getElementById(‘li1’);

li1.onmouseover = function(){

startMov(li1,{width:201,height:200,opacity:100});

};

li1.onmouseout = function(){

startMov(li1,{width:200,height:100,opacity:30});

};

li1.timer = null;

функция startMov(obj,json,fn){//fn функция обратного вызова

ClearInterval(obj.timer);//Очистить анимацию перед выполнением анимации

var flag = true;//Завершилась ли анимация

obj.timer = setInterval(function(){

for(var attr in json){

var icur = 0;

if(attr == ‘opacity’){

icur = Math.round(parseFloat(getStyle(obj,attr))*100 //Преобразуем в целое число и округление;

//Компьютеры часто ошибаются при вычислении десятичных дробей!

}

else{

icur = parseInt(getStyle(obj,attr));

}

var speed =0;

speed = (json[attr] – icur)/8;

speed = speed>0?Math.ceil(speed):Math.floor(speed);

if(icur != json[attr]){

flag = false;

}

if(attr == ‘opacity’){

obj.style.filter = ‘alpha(opacity:’+(icur+speed)+’)’;

obj.style.opacity = (icur+speed)/100;

}

else{

obj.style[attr] = icur+speed+’px’;

}

if(flag){

clearInterval(obj.timer);

if(fn){

fn();

}

}

}

},30);

}

function getStyle(obj,attr)

{

if(obj.currentStyle){

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];

}

}

}

//offsetWidth получает фактическую ширину элемента (включая границы и отступы)

//Пока движется несколько объектов, все атрибуты не могут быть общими.

Последний анимационный эффект дополняет коды всех вышеперечисленных анимаций, и вы можете расширить его согласно приведенным выше кодам!

Фактически, эти девять собственных эффектов анимации JS обладают уникальными особенностями. Каждый исходный код можно напрямую скопировать и запустить. Я надеюсь, что это будет полезно каждому при освоении анимации JS.

Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.

Издатель: Full stack программист и руководитель стека, укажите источник для перепечатки: https://javaforall.cn/181635.html Исходная ссылка: https://javaforall.cn

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose