Разделы презентаций


Основы JavaScript

Содержание

Комментарии в JavaScript

Слайды и текст этой презентации

Слайд 1Основы JavaScript
Поляруш Александр Юрьевич
polyarush@yandex.ru
http://vk.com/polyarush_a


Основы JavaScriptПоляруш Александр Юрьевичpolyarush@yandex.ruhttp://vk.com/polyarush_a

Слайд 2Комментарии в JavaScript


document.write("Hello, world"); // Однострочный комментарий

/*
Многострочный комментарий
*/

Комментарии в JavaScript

Слайд 3Первая программа


Первая программа








Первая программаПервая программа

Слайд 4Разбиение сообщения на строки


Первая программа







Разбиение сообщения на строкиПервая программа

Слайд 5Первая программа


Первая программа






Ваш Web-браузер не поддерживает

JavaScript.




Первая программаПервая программа  Ваш Web-браузер не поддерживает JavaScript.

Слайд 6Конкатенация строк

var name = prompt('What is your name?', '');



type="text/javascript">
document.write('Welcome ' + name + '');


Script 2.1

Конкатенация строкvar name = prompt('What is your name?', '');document.write('Welcome ' + name + '');Script 2.1

Слайд 7

Первая программа



document.write("Вы нажали Cancel");
}
else {
document.write("Привет " + m_str1);
}

//Метод prompt()
//-->




Первая программа

Слайд 8Типы данных


Типы данных



m_Str2;

Типы данныхТипы данных

Слайд 9document.write("m_Number - " + typeof (m_Number) + "
");
document.write("m_Number2 - "

+ typeof (m_Number2) + "
");
document.write("m_String - " + typeof (m_String)

+ "
");
document.write("m_String2 - " + typeof (m_String2) + "
");
document.write("m_Boolean - " + typeof (m_Boolean) + "
");
document.write("m_Str1 - " + typeof (m_Str1) + "
");
document.write("m_Str2 - " + typeof (m_Str2));
//-->



">document.write(

Слайд 10Массивы
m_Mass1 = [1, 2, 3, 4];

m_Str = m_Mass1[0]; // Переменной

m_Str будет присвоено значение 1

Массивыm_Mass1 = [1, 2, 3, 4];m_Str = m_Mass1[0]; // Переменной m_Str будет присвоено значение 1

Слайд 11Массивы


Массивы



["", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь",

"Октябрь", "Ноябрь", "Декабрь"];
document.write(m_Mass1[1] + " и " + m_Mass2[2]);
//-->




МассивыМассивы

Слайд 12Условные операторы
Условный оператор применяется для ветвления программы по некоторому логическому

условию. Есть два варианта синтаксиса:

if (логическое_выражение) оператор;
if (логическое_выражение) оператор_1;

else оператор_2;

if (navigator.javaEnabled())
alert('Ваш браузер поддерживает Java');
else
alert('Ваш браузер НЕ поддерживает Java');
Условные операторыУсловный оператор применяется для ветвления программы по некоторому логическому условию. Есть два варианта синтаксиса:if (логическое_выражение) оператор;

Слайд 13Окно с сообщением и кнопками OK и Cancel


Первая программа



(window.confirm("Hello, world")) {
window.alert("Нажата кнопка OK");
}
else {

window.alert("Нажата кнопка Cancel");
} // Метод confirm()
//-->




Окно с сообщением и кнопками OK и CancelПервая программа

Слайд 14Условные операторы


Проверка числа на четность



if (m_Var1==null) {
document.write("Вы нажали Отмена");
}

else {
if ((parseInt(m_Var1))%2==0) {
document.write("Четное число");
}
else {
document.write("Нечетное число");
}
}
//-->




Условные операторыПроверка числа на четность

Слайд 15Циклы
Оператор for – это оператор цикла. В общем случае он

имеет вид:

for (инициализация_переменных_цикла;
условие_продолжения_цикла;
модификация_переменных_цикла) тело_цикла;

Цикл

for работает следующим образом:

выполняется инициализация_переменных_цикла ;
проверяется условие_продолжения_цикла:
если оно ложно ( false ), цикл закончен,
если же истинно ( true ), то продолжаем далее;
выполняется тело_цикла ;
выполняется модификация_переменных_цикла ;
переходим к пункту 2.

ЦиклыОператор for – это оператор цикла. В общем случае он имеет вид:for (инициализация_переменных_цикла;   условие_продолжения_цикла;

Слайд 16типичный пример использования этого оператора:

document.write('Кубы чисел от 1 до 100:');
for

(n=1; n

типичный пример использования этого оператора:document.write('Кубы чисел от 1 до 100:');for (n=1; n

Слайд 17Циклы
Оператор while задает цикл. Определяется он в общем случае следующим

образом:

while (условие_продолжения_цикла) тело_цикла;

Тело цикла может быть как простым, так и

составным оператором. Составной оператор, как всегда, заключается в фигурные скобки. Рекомендуется и простой оператор заключать в них, чтобы программу можно было легко модифицировать. Условие_продолжения_цикла является логическим выражением. Тело исполняется до тех пор, пока верно логическое условие. Формально, цикл while работает следующим образом:

проверяется условие_продолжения_цикла:
если оно ложно ( false ), цикл закончен,
если же истинно ( true ), то продолжаем далее;
выполняется тело_цикла ;
переходим к пункту 1.

ЦиклыОператор while задает цикл. Определяется он в общем случае следующим образом:while (условие_продолжения_цикла) тело_цикла;Тело цикла может быть как

Слайд 18Цикл while используется, когда заранее неизвестно количество итераций, например, в

ожидании некоторого события. Пример:

var s='';
while (s.length

менее 6:','');
}
alert('Ваша строка: ' + s + '. Спасибо!');
Цикл while используется, когда заранее неизвестно количество итераций, например, в ожидании некоторого события. Пример:var s='';while (s.length

Слайд 19Функции


Функции

m_y);
}
//-->








ФункцииФункции

Слайд 20Функция вынесена в отдельный файл script.js


Функции





m_Var1=5, m_Var2=3;
m_Var = f_Sum (m_Var1, m_Var2);
document.write(m_Var);
//-->




Функция вынесена в отдельный файл script.jsФункции

Слайд 21Содержимое файла script.js
function f_Sum (m_x, m_y) {
return (m_x

+ m_y);
}

Содержимое файла script.jsfunction f_Sum (m_x, m_y) {  return (m_x + m_y);}

Слайд 22Доступ к объектам документа
Сценарии JavaScript очень часто применяются для создания

динамических веб-страниц, способных получать и обрабатывать произвольную информацию. Для этого

необходимо организовать доступ сценария к определенным элементам веб-страницы.
Доступ к различным объектам HTML-документа в языке JavaScript организован в строгом соответствии с иерархией объектов. Каждый объект иерархической структуры имеет свое имя.
Доступ к объектам документаСценарии JavaScript очень часто применяются для создания динамических веб-страниц, способных получать и обрабатывать произвольную

Слайд 23Например, на веб-странице может находиться несколько изображений с img1, img2

и img3. Если вы хотите обратиться к первому рисунку, то

сориентироваться в иерархии объектов и начать с самой ее вершины, объект на веб-странице называется Document. Все изображения на странице представлены как коллекция images. Причем первый рисунок всегда обозначается как images[0], второй как images[1], третий как images[2] и т. д. Иными словами, отсчет объектов в коллекции начинается не с единицы, а с 0.
Таким образом, вы можете получить доступ к первому изображению img1, записав в сценарии JavaScript document.images[0]. Чтобы получить доступ ко второму изображению img2, запишите в сценарии строку document.images[1]. Соответственно для получения доступа к третьему изображению img3 на веб-странице используйте конструкцию document.images[2].

Например, на веб-странице может находиться несколько изображений с img1, img2 и img3. Если вы хотите обратиться к

Слайд 24Тот же принцип действует по отношению к ссылкам и формам.

Если вы хотите получить доступ к какому-либо элементу формы, снова

необходимо начать с вершины иерархии объектов. Затем прослеживаете путь к объекту и записываете названия всех объектов, которые
Например, чтобы узнать, какой текст ввел посетитель вашей веб-страницы в поле формы, необходимо обратиться к значению (value) данного поля. Для этого в сценарии JavaScript можно записать строку name= document.forms[0].

Тот же принцип действует по отношению к ссылкам и формам. Если вы хотите получить доступ к какому-либо

Слайд 26



Смена картинок через массив


function myimage(pic)

//функция
{
document.images[0].src=pic
}






Просмотр

фотографий

Смена картинок через массивfunction myimage(pic)    //функция{document.images[0].src=pic}Просмотр фотографий

Слайд 27

Природа




картинка1
картинка2
картинка3
картинка4
картинка5

href="javascript:myimage('f.jpg')">картинка6
картинка7



Природакартинка1картинка2картинка3картинка4картинка5картинка6картинка7

Слайд 30Классы
Классы – это тип объекта, включающий в себя переменные и

функции, управляющие этими переменными.
Переменные класса называются свойствами.
Функции класса называют методами.
Для

использования методов и свойств класса чаще всего необходимо создать экземпляр класса.

КлассыКлассы – это тип объекта, включающий в себя переменные и функции, управляющие этими переменными.Переменные класса называются свойствами.Функции

Слайд 31Для создания экземпляра класса используется оператор new.
= new

([]);
При обращении к свойства используется следующий формат:
.;
При

обращении к свойства используется следующий формат:
<Экземпляр класса>.<имя метода>();
В скобках часто указываются параметры метода.


Для создания экземпляра класса используется оператор new. = new ([]);При обращении к свойства используется следующий формат:.;При обращении

Слайд 32Класс Date
c_Date = new Date();
document.write(c_Date.toString());
// Sun Apr 29 10:47:27

UTC+0400 2014

c_Date = new Date();
document.write(c_Date.toLocaleString());
// 19 апреля 2014 г. 10:49:09

Класс Datec_Date = new Date();document.write(c_Date.toString()); // Sun Apr 29 10:47:27 UTC+0400 2014c_Date = new Date();document.write(c_Date.toLocaleString());// 19 апреля

Слайд 33Текущая дата


Текущая дата и время

+= ""; // Преобразуем число в строку

m_Str2 = new String(m_Str);
if (m_Str2.length==1) return ("0" + m_Str2);
else return m_Str2;
}

function f_Year(m_Year) {
m_Year += ""; // Преобразуем число в строку
m_Year2 = new String(m_Year);
return m_Year2.substr(2);
}
//-->




Текущая датаТекущая дата и время

Слайд 34

"понедельник", "вторник", "среда",
"четверг", "пятница", "суббота");
m_Month = new Array("января", "февраля",

"марта", "апреля", "мая",
"июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
m_Date = "Сегодня
" + m_Day[c_Date.getDay()] + " ";
m_Date += c_Date.getDate() + " ";
m_Date += m_Month[c_Date.getMonth()] + " ";
m_Date += c_Date.getFullYear() + " ";
m_Date += c_Date.getHours() + ":";
m_Date += f_Date(c_Date.getMinutes()) + ":";
m_Date += f_Date(c_Date.getSeconds()) + "
";
m_Date += f_Date(c_Date.getDate()) + ".";
m_Date += f_Date(c_Date.getMonth() + 1) + ".";
m_Date += f_Year(c_Date.getFullYear());
document.write(m_Date); //-->




Слайд 35Библиотека jQuery
jQuery — библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и

HTML.
Библиотека jQuery помогает легко получать доступ к любому элементу

DOM, обращаться к атрибутам и содержимому элементов DOM, манипулировать ими.
Также библиотека jQuery предоставляет удобный API для работы с AJAX.
http://jquery-docs.ru/ русская документация.


Библиотека jQueryjQuery — библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML. Библиотека jQuery помогает легко получать доступ

Слайд 36Как получить элемент с помощью jQuery?

$(“#header”) – получение

элемента с id=”header”
$(“h3″) – получить все элементы

$(“div#content .photo”) – получить все элементы с классом =”photo” которые находятся в элементе div с id=”content”
$(“ul li”) – получить все
  • элементы из списка

      $(“ul li:first”) – получить только первый элемент
    • из списка


  • Как получить элемент с помощью jQuery?  $(“#header”) – получение элемента с id=”header”  $(“h3″) – получить

    Слайд 38Таблица с чередующейся фоновой заливкой

    table {border-right: 1px solid #A7A37E;


    border-bottom: 1px solid #A7A37E;}
    td, th {font-size: 1.3em;
    padding: 3px;}
    .even {background-color:

    #E7F7FF;}


    Таблица с чередующейся фоновой заливкойtable {border-right: 1px solid #A7A37E; border-bottom: 1px solid #A7A37E;}td, th {font-size: 1.3em; padding:

    Слайд 39


    $(document).ready(function( )
    { $('table.striped

    tr:even').addClass('even');});

    $(document).ready(function( ) { $('table.striped tr:even').addClass('even');});

    Слайд 40


    Product
    Cost
    Inventory Status
    Weight (in lbs.)




    Ultra-Glow Hair Spray
    $20.00
    in stock
    .5


    Anodyne 3000
    $495.00
    back order
    350


    Big Foot Hair Dryer
    $55.00
    in stock
    2


    Cat Out of The Hat
    $15.00
    back order
    15



    Product

    Слайд 41Таблица с выделенной строкой
    .highlight {
    background-color: #FC6 !important;
    }

    Script 6.1

    Таблица с выделенной строкой.highlight {	background-color: #FC6 !important;}Script 6.1

    Слайд 42

    $(document).ready(function( ) {
    $('table.striped tr:even').addClass('even');
    $('table.striped tbody tr').mouseover(function() {
    $(this).addClass('highlight');
    $(this).css('cursor','pointer');
    }).mouseout(function()

    {
    $(this).removeClass('highlight');
    });
    });



    $(document).ready(function( ) {	$('table.striped tr:even').addClass('even');	$('table.striped tbody tr').mouseover(function() {			$(this).addClass('highlight');			$(this).css('cursor','pointer');	}).mouseout(function() {			$(this).removeClass('highlight');	});});

    Слайд 43Фотогалерея с превьюшками


    $(document).ready(function() {
    $('#gallery img').each(function(i) {
    var imgFile

    = $(this).attr('src');
    var preloadImage = new Image();
    var imgExt = /(\.\w{3,4}$)/;

    preloadImage.src = imgFile.replace(imgExt,'_h$1');

    $(this).hover(
    function() {
    $(this).attr('src', preloadImage.src);
    },
    function () {
    var currentSource=$(this).attr('src');
    $(this).attr('src', imgFile);
    });
    });

    7.2

    Фотогалерея  с превьюшками$(document).ready(function() {$('#gallery img').each(function(i) {	var imgFile = $(this).attr('src');	var preloadImage = new Image(); var imgExt =

    Слайд 44$('#gallery a').click(function(evt) {
    //don't follow link
    evt.preventDefault();
    //get path to new

    image
    var imgPath = $(this).attr('href');
    //get reference to old

    image
    var oldImage = $('#photo img');
    //check to see if they're the same image
    if (imgPath == oldImage.attr('src')) {
    //if they are then you're done
    return;
    } else {
    //remove highglight from previously clicked thumbnail
    $('.selected').removeClass('selected');
    //add highlight to this thumbnail
    $(this).addClass('selected');
    //create HTML for new image
    var newImage = $('');


    $('#gallery a').click(function(evt) {		//don't follow link		 evt.preventDefault();		 //get path to new image	  var imgPath = $(this).attr('href');		 //get

    Слайд 45//make new image invisible
    newImage.hide();
    //add to the #photo div
    $('#photo').prepend(newImage);

    //fade out old image and remove from DOM
    oldImage.fadeOut(1000,function(){
    $(this).remove();
    });

    //fade in new image
    newImage.fadeIn(1000);
    }
    });

    $('#gallery a:eq(0)').click();
    });


    //make new image invisiblenewImage.hide(); //add to the #photo div $('#photo').prepend(newImage); //fade out old image and remove from

    Слайд 46

    height="70" alt="Yellow">

    height="70" alt="Orange">
    Purple
    Red






    Слайд 47Lightbox Gallery



    $(document).ready(function() {

    $('#gallery a').lightBox({
    txtImage:

    'Photo',
    overlayOpacity: .5,
    overlayBgColor: '#003376'
    });


    7.3

    Lightbox Gallery $(document).ready(function() {$('#gallery a').lightBox({	txtImage: 'Photo',	overlayOpacity: .5,	overlayBgColor: '#003376'});7.3

    Слайд 48$('#gallery img').each(function() {
    var imgFile = $(this).attr('src');
    var preloadImage = new Image();

    var imgExt = /(\.\w{3,4}$)/;
    preloadImage.src = imgFile.replace(imgExt,'_h$1');

    $(this).hover(
    function() {
    $(this).attr('src', preloadImage.src);
    },
    function ()

    {
    $(this).attr('src', imgFile);
    }
    ); // end hover
    }); // end each

    }); // end ready()


    $('#gallery img').each(function() {	var imgFile = $(this).attr('src');	var preloadImage = new Image(); var imgExt = /(\.\w{3,4}$)/; preloadImage.src = imgFile.replace(imgExt,'_h$1');			$(this).hover(		function()


    Слайд 50Слайдшоу



    Cycle Slideshow

    type="text/css">



    СлайдшоуCycle Slideshow

    Слайд 51
    $(document).ready(function() {
    $('#gallery').cycle({
    fx: 'scrollRight',
    timeout: 3000,
    speed: 500,
    delay:

    -2000,
    pager: '#pager',
    next: '#next',
    prev: '#prev'
    });

    $(document).ready(function() {$('#gallery').cycle({ fx: 'scrollRight', timeout: 3000, speed: 500, delay: -2000, pager: '#pager', next: '#next', prev: '#prev'});

    Слайд 52$('#playControl').toggle(
    function() {
    $('#gallery').cycle('pause');
    $(this).text('Play');
    },
    function() {
    $('#gallery').cycle('resume');
    $(this).text('Pause');
    });

    }); // end ready()



    $('#playControl').toggle(		function() {			$('#gallery').cycle('pause');			$(this).text('Play');		},		function() {			$('#gallery').cycle('resume');			$(this).text('Pause');		});}); // end ready()

    Слайд 53

    width="760" height="65">



    Cycle

    Slideshow

    Previous

    Next
    Pause


    Cycle Slideshow  Previous    Next  Pause

    Слайд 54

    class="credit">Photo by Alin Nan

    height="432" alt="Milk Fruit Explosion">

    Photo by David Kitchenham


    Fan

    Photo by jeltovski


    Red

    Photos by Alin Nan


    Pink weight

    Photo by David Pattee










    Photo by Alin Nan    Photo by David Kitchenham

    Слайд 55Выпадающее меню




    Quis Nostrud

    rel="stylesheet" type="text/css">


    Выпадающее менюQuis Nostrud

    Слайд 56



    Missing Manual" width="760" height="65">


    Слайд 57

    Drop Down Menu

    class="nav">
    Home
    Our Products

  • Books

  • CDs

  • DVDs



  • About Us




  • Drop Down Menu    Home Our Products

    Слайд 58
    Script 8.3



    “Building Interactive Web

    Sites with JavaScript”




    Script 8.3  “Building Interactive Web Sites with JavaScript”

    Слайд 59Формы с проверкой корректности



    Quis Nostrud

    type="text/css">



    Формы с проверкой корректностиQuis Nostrud

    Слайд 60$(document).ready(function() {
    $('#signup').validate({
    rules: {
    email: {

    required: true,
    email: true

    },
    password: {
    required: true,
    rangelength:[8,16]
    },
    confirm_password: {equalTo:'#password'},
    spam: "required"
    }, //end rules

    $(document).ready(function() { $('#signup').validate({  rules: {   email: {    required: true,

    Слайд 61messages: {
    email: {

    required: "Please supply an e-mail address.",

    email: "This is not a valid email address."
    },
    password: {
    required: 'Please type a password',
    rangelength: 'Password must be between 8 and 16 characters long.'
    },
    confirm_password: {
    equalTo: 'The two passwords do not match.'
    }
    },

    messages: {   email: {     required:

    Слайд 62errorPlacement: function(error, element) {
    if (

    element.is(":radio") || element.is(":checkbox")) {
    error.appendTo( element.parent());


    } else {
    error.insertAfter(element);
    }
    }

    }); // end validate
    }); // end ready()


    ………………………………….
    ………………………………….

    errorPlacement: function(error, element) {    if ( element.is(

    Слайд 63Что такое событие?

    События возникают, когда на web-странице происходит какое-то взаимодействие.

    Это может быть щелчок конечного пользователя на чем-то, перемещение курсора

    мыши над определенным элементом, или нажатие определенных клавиш на клавиатуре. Событие может быть также чем-то, что происходит в web-браузере, таким как завершение загрузки web-страницы, или прокрутка или изменение размера страницы пользователем.

    С помощью JavaScript можно обнаружить, когда происходят определенные события, и вызвать появление определенных реакций в ответ на эти события.
    Что такое событие?События возникают, когда на web-странице происходит какое-то взаимодействие. Это может быть щелчок конечного пользователя на

    Слайд 64При появлении JavaScript обработчики событий использовались непосредственно внутри элемента HTML,

    следующим образом:

    Say hello

    При появлении JavaScript обработчики событий использовались непосредственно внутри элемента HTML, следующим образом: Say hello

    Слайд 65Существует два типа управления событиями: перехват события и всплытие события.

    Перехват

    события начинается с самого внешнего элемента в DOM и двигается

    внутрь до элемента HTML, на котором произошло событие и затем снова наружу. Например, при щелчке на web-странице сначала проверяется элемент HTML на наличие обработчиков событий onclick, затем элемент body, и т.д., пока не будет достигнута цель события.

    Всплытие событий действует точно противоположным образом: оно начинается с проверки цели события на наличие присоединенных обработчиков событий, а затем поднимается через все соответствующие элементы-предки, пока не будет достигнут элемент HTML.
    Существует два типа управления событиями: перехват события и всплытие события.Перехват события начинается с самого внешнего элемента в

    Слайд 66

    Обработчик события





    Щелкните

    мышью
    здесь






    Обработчик событияЩелкните мышью здесь

    Слайд 67Щелкните здесь

    Щелкните здесь

    Слайд 68Выпадающее меню

    function HideAll()
    {
    document.getElementById("main").style.visibility='hidden'
    document.getElementById("movie").style.visibility='hidden'
    document.getElementById("issue").style.visibility='hidden'
    document.getElementById("survey").style.visibility='hidden'
    document.getElementById("forum").style.visibility='hidden'
    }
    function Main()
    {
    document.getElementById("main").style.visibility='visible'
    document.getElementById("movie").style.visibility='hidden'
    document.getElementById("issue").style.visibility='hidden'
    document.getElementById("survey").style.visibility='hidden'
    document.getElementById("forum").style.visibility='hidden'
    }
    function Movie()
    {
    document.getElementById("main").style.visibility='hidden'
    document.getElementById("movie").style.visibility='visible'
    document.getElementById("issue").style.visibility='hidden'
    document.getElementById("survey").style.visibility='hidden'
    document.getElementById("forum").style.visibility='hidden'
    }

    Выпадающее менюfunction HideAll(){document.getElementById(

    Слайд 69function Issue()
    {
    document.getElementById("main").style.visibility='hidden'
    document.getElementById("movie").style.visibility='hidden'
    document.getElementById("issue").style.visibility='visible'
    document.getElementById("survey").style.visibility='hidden'
    document.getElementById("forum").style.visibility='hidden'
    }
    function Survey()
    {
    document.getElementById("main").style.visibility='hidden'
    document.getElementById("movie").style.visibility='hidden'
    document.getElementById("issue").style.visibility='hidden'
    document.getElementById("survey").style.visibility='visible'
    document.getElementById("forum").style.visibility='hidden'
    }
    function Forum()
    {
    document.getElementById("main").style.visibility='hidden'
    document.getElementById("movie").style.visibility='hidden'
    document.getElementById("issue").style.visibility='hidden'
    document.getElementById("survey").style.visibility='hidden'
    document.getElementById("forum").style.visibility='visible'
    }


    function Issue(){document.getElementById(

    Слайд 70

    ID="menu">
    Главная  || 
    Фильмы  || 
    Статьи  || 

    HREF="#" onmouseover="Survey()">Обзоры  || 
    Форум


    Скачать презентацию

    Обратная связь

    Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

    Email: Нажмите что бы посмотреть 

    Что такое TheSlide.ru?

    Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


    Для правообладателей

    Яндекс.Метрика