Перемещение графических объектов — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Перемещение графических объектов

2017-09-30 427
Перемещение графических объектов 0.00 из 5.00 0 оценок
Заказать работу

Перемещать мышью изображения можно различными способами. Изучим один из них: пользователь пытается перетащить мышью изображение; затем он должен отпустить кнопку мыши и переместить указатель в нужное место; остановившись в нужном месте, пользователь отпускает кнопку мыши или щелкает ею, чтобы прекратить перемещение изображения. Код перемещения изображения мышью:

 

<НТМL>

<НЕАD><TITLE>Перемещаемое изображение</TITLE></НЕАD>

<BODY id = "mybody">

<IMG ID="myimg" SRC = "pict.gif ondragstart = "drag()" style = "position:absolute; top:10; left:10">

</BODY>

<SCRIPT>

flag = false // нельзя перемещать

var id_img = ""

function drag() {

flag = mag

id_img = event.srcElement.id

}

function mybody.onmousemove(){

if (flag){ // если можно перемещать

document.all[id_img].style.top = event.clientY

document.all[id_img].style.left = event.clientX } }

function mybody.onmouseup(){

flag = false // нельзя перемещать

}

</SCRIPT>

</HTML>

 

Здесь функция drag(), обрабатывающая событие ondragstart (попытка перетаскивания), устанавливает переменную-триггер flag и выясняет, кто инициатор события. Значение переменной flag позволяет определить, можно или нельзя перемещать элемент. В данном примере инициатором события может быть только один элемент. События onmousemove (перемещение указателя мыши) и onmouseup (кнопка мыши отпущена) получает не изображение, а объект тела документа mybody.

Перемещение текстовых областей

Рассмотрим пример HTML-документа, в котором можно переме­щать текстовые области, созданные с помощью тегов <TEXTAREA>. Размеры области и шрифта текста определяются в ней в зависимости от значения вертикальной координаты.

 

<HTML>

<НЕАD><ТITLE>Перемещаемые текстовые облас-ти</ТITLE></НЕАD>

<BODY id = "mybody" background = "blue.gif">

<TEXTAREA ID="tl" ondblclick=""drag()" STYLE = "position:absolute;

top:10; left: 10; fon-size: large"> Это – первый текст</TEXTAREA>

<TEXTAREA ID="t2" ondblclick=""drag()" STYLE = "position:absolute;

top:100; left:150"> Это – второй текст </TEXTAREA>

<TEXTAREA ID="t3" ondblclick=""drag()" STYLE = "position:absolute; top:150; left:250"> Это - третий текст </ТЕXTAREA>

</BODY>

<SCRIPT>

resizetext() { // установка размеров текстовых областей

var flag = false }

var id_img = ""

function drag() {

flag =!flag

id_img = event.srcElement.id //id элемента, который надо перемещать

function mybody.onmousemove() {

if (flag){

document.all[id_img].style.top = event.clientY

document.all[id_img].style.left = event.clientX

resizetext() }} // установка размеров текстовых областей

function mybody.onmouseup() {

flag = false }

function resizetext () { // установка размеров областей

var у, size, idimg, idtext

for (i =0; i < document.all.length; i++) {

if (document.all[i].tagName=='TEXTAREA') {

idtext = document.all[i].id

у = parseInt(document.all[idtext].style.top)

size = Math.min(y, 800)

size = Math.max(size, 60)

document.all[idtext].style.width = size

document.all[idtext].style.height = 0.8*size

document.all[idtext].style.zIndex = у

document.all[idtext].style.fontSize = Math.max(2, y/10)

</SCRIPT>

</HTML>

 

Схема сценария, осуществляющего непрерывное перемещение видимого элемента документа, имеет следующий вид:

 

Function init_move() { // инициализация движения

... // подготовка к запуску функции move()

setInterval("move()", задержка)

function move(){

.../* изменение координат top и left стиля перемещаемого элемента */

// вызов функции для перемещения элемента

 

Cоздаются две функции: init_move(), которая осуществляет подготовку исходных данных и вызывает метод setInterval() с указанием в качестве первого параметра имени второй функции move() в кавычках, и move(), которая изменяет координаты элемента. Поскольку метод setInterval() вызывает функцию move() периодически через заданное количество миллисекунд, то координаты элемента изменяются постоянно. При этом создается эффект движения. Скорость и плавность движения зависят от величин приращения координат (в функции move()) и временной задержки (второго параметра метода setInterval()). Чтобы начать перемещение элемента надо вызвать первую функцию init_move().

Остановка движения

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

 

function init_move(xid, dx, dy) {

var prmstr = "'"+xid+","+dx+","+dy // строка параметров для move()

prmstr = "move(" +prmstr+ ")"

idjnove = setInterval (prmstr, 200) /* сохраняем идентификатор движения */

}

function move(xid, dx, dy) {

у = parseInt(document.all[xid].style.top)

x = parseInt(document.all[xid].style.left)

document.all.myimg.style.top = у+dy

document.all.myimg.style.left = x+dx

if (parseInt(document.all[xid].style.left) > 350) /* остановка по условию */

}

clearInterval(id move)

init_move(“myimg”, 10, 5) // начинаем движение

 

В этом примере движение остановится, как только горизонтальная координата элемента превысит 350 пикселов.

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.014 с.