Сделай Сам Свою Работу на 5

Теоретическое обоснование





Создадим два контейнера, в один из которых (источник) поместим три элемента, элементы можно будет свободно перемещать из контейнера – источника, в целевой контейнер и обратно.

Для этого необходимо:

- создать контейнеры и элементы для перемещения;

- стилизовать элементы Web-страницы;

- создать функции для обработки следующих событий: перетаскивание объекта внутрь границ элемента; прохождение курсора "над" элементом во время осуществления операции перемещения; "освобождение" перетаскиваемого элемента в пределах элемента – цели; начало операции перемещения; окончание операции перетаскивания.

Создание элементов страницы для перемещения

Для того, чтобы можно было перемещать элемент в рамках страницы, достаточно просто добавить атрибут draggable = true. Создадим контейнеры для размещения элементов и элементы для последующего перемещения:

<div id="source" class="conteiner" >

<div id="firstDragElement" class="element" draggable="true">Text 1</div>

<div id="secondDragElement" class="element" draggable="true">Text 2</div>

<div id="thirdDragElement" class="element" draggable="true">Text 3</div>

</div>



<div id="target" class="conteiner"></div>

Стилизация элементов

Для простоты восприятия примера, создадим следующие стили для элементов:

.element {

border: 2px solid black;

height: 50px;

width: 50px;

margin-left:20px;

margin-bottom: 10px;

text-align:center;

}

.conteiner {

border: 2px solid red;

height: 200px;

width: 100px;

float:left;

margin: 50px;

Создание JavaScript-функции

Отслеживать процесс Drag and drop позволяют следующие события: dragstart; drag; dragenter; dragleave; dragover; drop; dragend.

События dragenter, dragover и dragleave можно использовать для того, чтобы сделать процесс переноса более наглядным.

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

Объект DataTransfer хранит данные отсылаемые в процессе перетаскивания. DataTransfer задается в событии dragset и используется в событии drop. Вызов e.dataTransfer.setData(format, data) устанавливает mimetype и данные нужные для перетаскивания.

Свойство dataTransfer имеет функцию getData(format) для получения сохраненных данных.

Свойство dataTransfer предоставляет возможность тонкой настройки отображения процесса переноса:



- dataTransfer.effectAllowed – эффект, поддерживаемый целевым элементом перетаскивания. Как правило, это значение задается обработчиком события dragstart. Может принимать следующие значения: none, copy, copyLink, copyMove, link, linkMove, move, all и uninitialized;

- dataTransfer.dropEffect – эффект, выбранный пользователем или целевым элементом. Может принимать следующие значение: none, copy, link, move;

- dataTransfer.setDragImage(i, x, y). Вместо того чтобы использовать при перетаскивании полупрозрачную картинку по умолчанию

Алгоритм создания функций:

function dragStart(ev)

{

ev.dataTransfer.effectAllowed='link';

ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));

ev.dataTransfer.setDragImage(ev.target,0,0);

return true;

}

function dragEnter(ev)

{

var idelt = ev.dataTransfer.getData("Text");

return true;

}

function dragOver(ev)

{

var idelt = ev.dataTransfer.getData("Text");

var id = ev.target.getAttribute('id');

return false;

}

function dragEnd(ev)

{

ev.dataTransfer.clearData("Text");

return true

}

function dragDrop(ev)

{

var idelt = ev.dataTransfer.getData("Text");

ev.target.appendChild(document.getElementById(idelt));

ev.stopPropagation();

return false;

}

Ниже приведен программный код для вызова соответствующих функций при возникновении событий:

<div id="source" class="conteiner" ondragenter="return dragEnter(event)"

ondrop="return dragDrop(event)" ondragover="return dragOver(event)">

<div id="firstDragElement" class="element" ondragstart="return dragStart(event)"

ondragend="return dragEnd(event)" draggable="true">Text 1</div>

<div id="secondDragElement" class="element" ondragstart="return dragStart(event)

" ondragend="return dragEnd(event)" draggable="true">Text 2</div>

<div id="thirdDragElement" class="element" ondragstart="return dragStart(event)"

ondragend="return dragEnd(event)" draggable="true">Text 3</div>

</div>

<div id="target" class="conteiner" ondragenter="return dragEnter(event)"

ondrop="return dragDrop(event)" ondragover="return dragOver(event)"></div>



Вставка элементов мультимедиа

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

Таким образом, для выполнения задания, необходимо сделать следующее:

- создать страницы альбомов и главную страницу;

- стилизовать страницы;

- создать JavaScript функции для: добавления трека в очередь воспроизведения, предварительного прослушивания трека, перехода между альбомами и воспроизведения трека из очереди.

Для того, чтобы пользователю не пришлось каждый раз заново создавать свой список воспроизведения, будем использовать localStorage.

Рассмотрим по шагам выполнение задания.

Шаг 1.

<body>

<div id=”tracks”>

<form id=”albumtracks”>

<fieldset>

<legend id=”albumname”>The Genius Hits The Road</legend>

<img id=”poster” src=”audio\Ray Charles\The Genius Hits The Road\AlbumArtSmall.jpg”/>

<table>

<tr>

<td>01-Alabamy Bound</td>

<td><a class=”addtoPLlink” onclick=”addtoPL(‘Ray Charles-Alabamy Bound’,’

audio/Ray Charles/The Genius Hits The Road/01-Alabamy Bound.mp3’);

“>Add to playlist</a></td>

<td><a class=”listenlink” onclick=”testListen

(‘audio/Ray Charles/The Genius Hits The Road/01-Alabamy Bound.mp3’);

“>Listen</a></td>

</tr>

<tr>

<td>02-Georgia On My Mind</td>

<td><a class=”addtoPLlink” onclick=”addtoPL(‘Ray Charles-Georgia On My Mind’,

‘audio/Ray Charles/The Genius Hits The Road/02-Georgia On My Mind.mp3’);

“>Add to playlist</a></td>

<td><a class=”listenlink” onclick=”testListen

(‘audio/Ray Charles/The Genius Hits The Road/02-Georgia On My Mind.mp3’);

“>Listen</a></td>

</tr>

<tr>

<td>03-Basin Street Blues</td>

<td><a class=”addtoPLlink” onclick=”addtoPL(‘Ray Charles-Basin Street Blues’,

‘audio/Ray Charles/The Genius Hits The Road/03-Basin Street Blues.mp3’);

“>Add to playlist</a></td>

<td><a class=”listenlink” onclick=”testListen

(‘audio/Ray Charles/The Genius Hits The Road/03-Basin Street Blues.mp3’);

“>Listen</a></td>

</tr>

<tr>

<td>04-Mississippi Mud</td>

<td><a class=”addtoPLlink” onclick=”addtoPL(‘Ray Charles-Mississippi Mud’,

‘audio/Ray Charles/The Genius Hits The Road/04-Mississippi Mud.mp3’);

“>Add to playlist</a></td>

<td><a class=”listenlink” onclick=”testListen

(‘audio/Ray Charles/The Genius Hits The Road/04-Mississippi Mud.mp3’);

“>Listen</a></td>

</tr>

.........................................

</body>

Обратите внимание, что сразу же заданы все атрибуты для дальнейшей стилизации, а также вызова JavaScript, а именно:

- addtoPL() – функция для добавления указанного трека в пользовательскую очередь воспроизведения;

- testListen() – функция для предварительного прослушивания трека (в течении 10 секунд, например).

Шаг 2.Создание HTML- документа для главной страницы:

<body onload=”load();”>

<div id=”header”>

<h1>Audio example</h1>

</div>

<div id=”albums”>

<form id=”albumform”>

<fieldset>

<legend class=”singer”>Ray Charles</legend>

<ul class=”albumname”>

<li><a class=”albumlink” onclick=”loadAlbum(‘RC_hitstheroad.html’);

“> The Genius Hits The Road</a></li>

<li><a class=”albumlink” onclick=”loadAlbum(‘RC_smile.html’>Have

A Smile With Me</a></li>

</ul>

</fieldset>

</form>

</div>

<div id=”tracks”>

<iframe id=”target” src=””></iframe>

</div>

Поясним имена JavaScript – функций:

- load() – загрузка списка воспроизведения;

- loadAlbum() – загрузка внешнего HTML – документа (альбома).

Шаг 3.Создание минимально необходимых стилей:

#albums

{

float:left;

}

#tracks

{

float:left;

}

#audioPanel

{

clear:left;

}

#albumform

{

width:350px;

}

audio

{

width:100%

}

a.albumlink:hover

{

cursor:pointer;

font-style:italic;

font-weight:bolder;

}

#playlistpanel

{

border:3px double black;

}

#target

{

width:800px;

height:600px;

border:0px;

}

a.listenlink

{

margin:10px;

}

a.addtoPLlink:hover, a.listenlink:hover

{

cursor:pointer;

font-style:italic;

font-weight:bolder;

}

#albumtracks

{

width:500px;

}

li.PL:hover

{

background-color:Blue;

cursor:pointer;

color:White;

}

body

{

background-color:#F7F7F7;

}

h1

{

text-align:center;

Шаг 4.СозданиеJavaScript функции

Функция добавления трека в очередь воспроизведения:

function addtoPL(name, path)

{

localStorage[name] = path; /*добавляем в localStorage путь к аудио файлу*/

window.parent.location.href=window.parent.location.href);

/*поскольку iframe подгружает внешнюю html страницу, то после добавления трека в список, необходимо явно перезагрузить основную страницу*/

Функция загрузки внешнего содержимого:

function loadAlbum(path)

{

var iframe = document.getElementById(‘target’);

iframe.setAttribute(‘src’, path);

sessionStorage[“album”] = path; /*чтобы при перезагрузке родителя,

текущая веб – страница альбома не исчезала, используем sessionStorage, для сохранения состояния*/

Функция предварительного прослушивания:

function testListen(path)

{

var audio = document.createElement(‘audio’); /*создаем новый audio element*/

var div = document.getElementById(‘tracks’);

/*получаем доступ к контейнеру с треками*/

audio.src= path; /*задаем источник для воспроизведения*/

audio.controls = false;

/*отключаем элементы управления аудио, фактически элемент не будет отображаться*/

div.appendChild(audio); /*добавляем созданный audio элемент контейнеру*/

audio.addEventListener('timeupdate', function()

/*обработчик событий, вызываемый в течении всего воспроизведения аудио, каждые 250 мс*/

{

if (audio.currentTime > 10) {audio.pause();}

/*прерываем воспроизведение после 10 секунд прослушивания*/

}, false);

audio.play(); /*начало воспроизведения аудио*/

Функция воспроизведения трека из пользовательского списка:

function playtrack(track)

{

var b = false;

for(var I in localStorage)

{

/*в данном цикле мы находм текущий трек и «запоминаем» следующий*/

if (b) {localStorage[‘next’] = localStorage[i]; break; }

if (I == track) { b=true; }

}

var audio = document.getElementById(‘audio’); /*получаем доступ к элементу audio*/

audio.src = localStorage[track]; /*задаем источник воспроизведения*/

audio.controls = true;

audio.play(); /*начинаем воспроизведение*/

Функция загрузки списка воспроизведения:

function load()

{

if (sessionStorage[“album”] != undefined)

/*если документ открывается впервые, либо после долгого перерыва, то sessionStorage

не будет содержать информацию о последнем открытом альбоме*/

{

loadAlbum(sessionStorage[«album»]);

/*открываем последний альбом, к которому обратился пользователь, таким образом

после принудительного обновления главной страницы в функции adtoPL

пользователю не придется делать это самостоятельно*/

}

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

/*получаем доступ к audio элементу*/

audio.addEventListener('ended', function()

/*добавляем обработчик события – окончания текущего воспроизвдения*/

{

playtrack('next');

/*инициируем воспроизведение следующего трека из пользовательского списка*/

}, false);

/*переходим к загрузке пользовательского списка воспроизведения*/

var list = document.getElementById(‘playlist’);

/*получаем доступ к списку воспроизведения*/

for(var i in localStorage) /*добавляем треки, сохраненные пользователем*/

{

var element = document.createElement(‘li’);

element.setAttribute(‘class’,’PL’);

element.setAttribute(‘onclick’,”playtrack(‘”+i+”’)”);

element.innerText = I;

if ( I != ‘next’)

{

list.appendChild(element);

}

}

Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel с тактовой частотой 2000 МГц и выше; оперативная память – не менее 1024 Мбайт; свободное дисковое пространство – не менее 1,2 Гбайт; устройство для чтения компакт-дисков; монитор типа Super VGA (число цветов – 256) с диагональю не менее 17 ². Программное обеспечение – операционная система WINDOWS XP и выше, программы для просмотра Web-страниц.

Указания по технике безопасности. Техника безопасности при выполнении лабораторной работы сопадает с общепринятой для работы с персональным компютером. Самостоятельно не производить ремонт персонального компьютера, установку и удаление программного обеспечения. В случае неисправности персонального компьютера сообщить об этом обслуживающему персоналу лаборатории (оператору, администратору). Соблюдать правила техники безопасности при работе с электрооборудованием. Не касаться электрических розеток металлическими предметами. Рабочее место пользователя персонального компьютера должно содержаться в чистоте. Не разрешается возле персонального компьютера принимать пищу, напитки.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.