Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

lt;!-- скрывает код от старых браузеров

Читайте также:
  1. Война раскрывает возможности человеческого духа, истинную сущность человека.
  2. Война раскрывает возможности человеческого духа, истинную сущность человека.
  3. Война раскрывает возможности человеческого духа, истинную сущность человека.
  4. Война раскрывает возможности человеческого духа, истинную сущность человека.
  5. Синтетико-аналитический абзац начинается с обобщающей, стержневой фразы, смысл которой раскрывается в последующих сообщениях.
  6. Эти болезни не делят людей на молодых и старых, богатых и бедных, они поражают одинаково и малышей и глубоких стариков, юных женщин и зрелых мужчин.

При данных выше определениях, метод Мартингейла может легко трансформировать убыточную систему в выигрышную.

Рассмотрим систему со следующими характеристиками:

Средний убыток = $1000

Средний выигрыш = $2000

Частота выигрышей: 1 из 3

Данные характеристики могут появиться у системы медленной скользящей средней. Данная система является крайне неэффективной, так как она компенсирует $50 за каждые проигранные $50 без учёта выплат комиссионных (за три сделки был один выигрыш, равный $2000, и два убытка, составившие $2000).

 
 

Очевидно, что это показатели очень плохой системы. Например, играя по системе, которая выигрывает только 45% сделок, трейдер может изменить направление, чтобы выигрывать 55% - роскошь, которую картёжник себе позволить не может.

 
 

Если вы открываете серию одним контрактом, проигрываете первые две сделки и выигрываете третью со средним преобладанием выигрышей или проигрышей (соответствует шансам в один выигрыш из трёх сделок), карточка вашего счёта будет выглядеть следующим образом:

 

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

За вторую игру вы ставите только один контракт, а не два, потому что, если за данную сделку будет выиграно $2000, тогда серия будет закрыта с прибылью в $1000.

Когда начинается третья серия, вы имеете $2000 в убытке; следовательно, вы увеличиваете контракты до двух, и выигрываете, получая в итоге $2000 ($2000 x 2 контракта = $4000 минус $2000 предыдущих убытков).

Таким образом, метод Мартингейла превратил убыточную систему в выигрышную. Убыток стал существенной прибылью.

Это экстремальный пример, единственный с несколькими выигрышами. Метод Мартингейла работает лучше, когда прибыли и убытки примерно равны. Следовательно, в реальности, вам будет необходима большая сумма капитала, чтобы защититься от последовательных убытков, и часто данная система может породить от 4 до 7 серий, направленных против вас. (Она выигрывает только раз за три удачных шага.) Но даже по данной системе хорошо финансируемый опытный игрок может оперировать методом Мартингейла.

Теперь рассмотрим более реальный пример, используя стратегию, применённую к фьючерсам S&P 500. Система, основанная на циклах, обнаруживает следующие характеристики:

Средний убыток: $1150,

Средний выигрыш: $1550,

Прибыльные сделки: 58%.

Система извлекает примерно $65 из всех обменных $100. Серия открывается двумя убытками, первый в $1150, а второй - $1650. Затем система обеспечивает три выигрыша, один в $1100, а два других - $1575.



Ваша карточка отражает данную игру. (И опять, вы пытаетесь выиграть средний убыток – поэтому риску подвергается $1150.)

 

Обычно, такая серия закрывается после четвёртой сделки, когда достигается цель в $1150. Результаты будут следующими:

Закрытие: Прибыль=$2000

Выигрыши=$6450; убытки=$4450.

Пятая сделка начнёт новую серию. Она записана здесь с первыми четырьмя сделками, чтобы облегчить сравнение. В завершение четвёртой удачной сделки спекулянт с одним контрактом, не использующий метод Мартингейла, будет иметь убыток в $125; в конце пятой сделки он получит прибыль в $1450. Но спекулянт, использовавший метод Мартингейла и начинающий новую серию одним контрактом, получит $3575 – приблизительно на 250% больше.

Однако, метод Мартингейла может быть ограничен, чтобы удовлетворить психологические и финансовые потребности каждого трейдера.

Будучи скептически настроенным ко всем системам, я бы играл данную серию по-другому:



Сохранив как можно более низкое количество контрактов, я попытался выиграть “ставку” за несколько небольших шагов: следовательно, я играл бы только одним контрактом, а не двумя, во вторую удачную сделку, а также двумя, а не тремя контрактами, в третью.

Прибыль данной серии, $2550, на 175% превышает прибыль трейдера, не использующего метод Мартингейла.

Критики, выдвигающие аргументы против использования метода Мартингейла в качестве инструмента торговли фьючерсами, утверждают, что, так как для поддержки метода Мартингейл в резерве должно быть много капитала, и, так как спекулянт торгует при шансах на выигрыш за него, а не против него, как при игре в рулетку, было бы мудро упростить торговлю до двух или трёх контрактов – какой бы ни был максимум по методу Мартингейла – чтобы достичь большей прибыли. Данный аргумент кажется значимым, но он игнорирует важный момент. Метод Мартингейла пытается ограничить убытки, снизить риск разорения. Спекулянт, который всегда торгует максимальным количеством контрактов, и, который терпит пять или шесть убытков подряд, может не дожить до того, чтобы осознать выигрыши, которые были теоретически обещаны системой.

Сравните карточку метода агрессивного Мартингейла, который использует максимум три контракта и выигрывает $3575, с карточкой критика метода Мартингейла, который использует три контракта в каждом цикле.

Критик выигрывает $4350 в конце пятой сделки, на $775 больше, чем игрок по агрессивному методу Мартингейла.

Однако, перенеся только два убытка, после окончания второй сделки он уступил только $8400 и до пятой сделки не извлёк прибыли. Для сравнения заметим, максимальный убыток игрока по методу Мартингейл составил $4450; и за четвёртую сделку он получил $2000. Далее отметим, что критик делал только $290 на контракт; а игрок по методу Мартингейл (исполнил вообще только 9 контрактов) – приблизительно $400 на каждый.

Метод Мартингейла не предпринимает крупные, дорогостоящие “атаки”; оберегая свои силы, он ведёт партизанскую войну.

Таким образом, методом проб и ошибок я пришёл к выводу, что сила метода Мартингейл может быть направлена на фьючерсные рынки. Очевидные препятствия – маржа, изменение выигрышей и убытков, а также трудности при оценке шансов на выигрыш – могут быть преодолены, и метод Мартингейла может быть согласован с потребностями индивидуальных трейдеров.

Но меня всё ещё беспокоили неодобрения, высказанные в адрес метода Мартингейла: Почему система, созданная для применения в “мире” всегда неблагоприятных шансов, часто используется тогда, когда шансы крайне благоприятны?

Конечно, метод прямого Мартингейла принесёт прибыль только тому трейдеру, чья система уловит три сделки из пяти, выиграв только $51 на каждые $100. Но что же делать трейдеру, который охватит три сделки из пяти, получив $60 на каждые $100?

Такие шансы были, действительно, принудительными; хотя метод прямого Мартингейла даже здесь минимизировал риск, я бы хотел, чтобы этот момент контролировался лучше. К тому же, остаётся проблема скрытого рыночного риска, факта, что “природа” рынков постоянно меняется. Пока я рассматривал только избыточный риск, присущий системе торговли.

Я понял интуитивно, что две данных проблемы могут быть объединены; кроме того, не происходит ли моё сомнение в системах, особенно со слишком богатыми обещаниями из осведомлённости относительно непредсказуемой “природы” рынков?

Вероятно, обе проблемы могли бы быть разрешены одновременно.

Прибыль данной серии, $2550, на 175% превышает прибыль трейдера, не использующего метод Мартингейла.

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

Однако, необходимо принимать во внимание движение, “отлив и прилив” рынка.

Мне кажется, что с другой вариацией метода Мартингейл - скажем, методом обратного Мартингейла – мы могли бы охватить даже сиюминутное и меняющееся движение.

Я решил попробовать это.

 

lt;!-- скрывает код от старых браузеров

document.write("А это JavaScript!")

// -->

</script>

<br>

Вновь документ HTML.

</body>

</html>

 

 

События

События и обработчики событий являются очень важной частью для программирования на языке JavaScript. События, главным образом, инициируются теми или иными действиями пользователя. Если он щелкает по некоторой кнопке, происходит событие "Click". Если указатель мыши пересекает какую-либо ссылку гипертекста - происходит событие MouseOver. Существует несколько различных типов событий. Мы можем заставить нашу JavaScript-программу реагировать на некоторые из них. И это может быть выполнено с помощью специальных программ обработки событий. Так, в результате щелчка по кнопке может создаваться выпадающее окно. Это означает, что создание окна должно быть реакцией на событие щелка - Click. Программа - обработчик событий, которую мы должны использовать в данном случае, называется onClick. И она сообщает компьютеру, что нужно делать, если произойдет данное событие. Приведенный ниже код представляет простой пример программы обработки события onClick:

 

<form>

<input type="button" value="Click me" onClick="alert('Yo')">

</form>

 

Данный пример имеет несколько новых особенностей - рассмотрим их по порядку. Вы можете здесь видеть, что мы создаем некую форму с кнопкой (как это делать - проблема языка HTML, так что рассматривать это здесь я не буду). Первая новая особенность - onClick="alert('Yo')" в тэге <input>. Как мы уже говорили, этот атрибут определяет, что происходит, когда нажимают на кнопку. Таким образом, если имеет место событие Click, компьютере должен выполнить вызов alert('Yo'). Это и есть пример кода на языке JavaScript (Обратите внимание, что в этом случае мы даже не пользуемся тэгом <script>). Функция alert() позволяет Вам создавать выпадающие окна. При ее вызове Вы должны в скобках задать некую строку. В нашем случае это 'Yo'. И это как раз будет тот текст, что появится в выпадающем окне. Таким образом, когда читатель когда щелкает на кнопке, наш скрипт создает окно, содержащее текст 'Yo'.

 

Некоторое замешательство может вызвать еще одна особенность данного примера: в команде document.write () мы использовали двойные кавычки ("), а в конструкции alert() - только одинарные. Почему? В большинстве случаев Вы можете использовать оба типа кавычек. Однако в последнем примере мы написали onClick="alert('Yo')" - то есть мы использовали и двойные, и одинарные кавычки. Если бы мы написали onClick="alert("Yo")", то компьютер не смог бы разобраться в нашем скрипте, поскольку становится неясно, к которой из частей конструкции имеет отношение функция обработки событий onClick, а к которой - нет. Поэтому Вы и вынуждены в данном случае перемежать оба типа кавычек. Не имеет значения, в каком порядке Вы использовали кавычки - сперва двойные, а затем одинарные или наоборот. То есть Вы можете точно так же написать и onClick='alert("Yo")'.

 

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

 

Функции

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

 

<html>

<script language="JavaScript">

<!-- hide

document.write("Добро пожаловать на мою страницу!<br>");

document.write("Это JavaScript!<br>");

document.write("Добро пожаловать на мою страницу!<br>");

document.write(Это JavaScript!<br>");

document.write("Добро пожаловать на мою страницу!<br>");

document.write("Это JavaScript!<br>");

// -->

</script>

</html>

 

И такой скрипт напишет следующий текст три раза. Если посмотреть на исходный код скрипта, то видно, что для получения необходимого результата определенная часть его кода была повторена три раза. Разве это эффективно? Нет, мы можем решить ту же задачу еще лучше. Как насчет такого скрипта для решения той же самой задачи?:

 

<html>

<script language="JavaScript">

<!-- hide

function myFunction() {

document.write("Добро пожаловать на мою страницу!<br>");

document.write("Это JavaScript!<br>");

}

myFunction();

myFunction();

myFunction();

// -->

</script>

</html>

 

В этом скрипте мы определили некую функцию, состоящую из следующих строк:

 

function myFunction() {

document.write("Добро пожаловать на мою страницу!<br>");

document.write("Это JavaScript!<br>");

}

 

Все команды скрипта, что находятся внутри фигурных скобок - {} - принадлежат функции myFunction (). Это означает, что обе команды document.write() теперь связаны воедино и могут быть выполнены при вызове указанной функции. И действительно, нашем примере есть три вызова этой функции - Можно увидеть, что мы написали строку myFunction() три раза сразу после того, как дали определение самой функции. То естькак раз и сделали три вызова. В свою очередь, это означает, что содержимое этой функции (команды, указанные в фигурных скобках) было выполнено трижды. Поскольку это довольно простой пример использования функции, то у Вас мог возникнуть вопрос, а почему собственно эти функции столь важны в JavaScript. По прочтении данного описания Вы конечно же поймете их пользу. Именно возможность передачи переменных при вызове функции придает нашим скриптам подлинную гибкость - что это такое, мы увидим позже.

 

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

 

<html>

<head>

<script language="JavaScript">

<!-- hide

function calculation() {

var x= 12;

var y= 5;

var result= x + y;

alert(result);

}

// -->

</script>

</head>

<body>

<form>

<input type="button" value="Calculate" onClick="calculation()">

</form>

</body>

</html>

 

Здесь при нажатии на кнопку осуществляется вызов функции calculation(). Как можно заметить, эта функция выполняет некие вычисления, пользуясь переменными x, y и result. Переменную мы можем определить с помощью ключевого слова var. Переменные могут использоваться для хранения различных величин - чисел, строк текста и т.д. Так строка скрипта var result= x + y; сообщает браузеру о том, что необходимо создать переменную result и поместить туда результат выполнения арифметической операции x + y (т.е. 5 + 12). После этого в переменный result будет размещено число 17. В данном случае команда alert(result) выполняет то же самое, что и alert(17). Иными словами, мы получаем выпадающее окно, в котором написано число 17.

 

 

Иерархия объектов в JavaScript

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

 

<html>

<head>

</head>

<body bgcolor=#ffffff>

<center>

<img src="home.gif" name="pic1" width=200 height=100>

</center>

<p>

<form name="myForm">

Name:

<input type="text" name="name" value=""><br>

e-Mail:

<input type="text" name="email" value=""><br><br>

<input type="button" value="Push me" name="myButton" onClick="alert('Yo')">

</form>

<p>

<center>

<img src="ruler.gif" name="pic4" width=300 height=15>

<p>

<a href="http://rummelplatz.uni-mannheim.de/~skoch/">My homepage</a>

</center>

</body>

</html>

 

Итак, мы имеем два рисунка, одну ссылку и некую форму с двумя полями для ввода текста и одной кнопкой. С точки зрения языка JavaScript окно браузера - это некий объект window. Этот объект также содержит в свою очередь некоторые элементы оформления, такие как строка состоятия. Внутри окна мы можем разместить документ HTML (или файл какого-либо другого типа - однако пока мы все же ограничимся файлами HTML). Такая страница является ни чем иным, как объектом document. Это означает, что объект document представляет в языке JavaScript загруженный на настоящий момент документ HTML. Объект document является очень важным объектом в языке JavaScript и Вы будете пользоваться им многократно. К свойствам объекта document относятся, например, цвет фона для web-страницы. Однако для нас гораздо важнее то, что все без исключения объекты HTML являются свойствами объекта document. Примерами объекта HTML являются, к примеру, ссылка или заполняемая форма. На следующем рисунке иллюстрируется иерархия объектов, создаемая HTML-страницей из нашего примера:

Разумеется, мы должны иметь возможность получать информацию о различных объектах в этой иерархии и управлять ею. Для этого мы должны знать, как в языке JavaScript организован доступ к различным объектам. Как видно, каждый объект иерархической структуры имеет свое имя. Следовательно, если Вы хотите узнать, как можно обратиться к первому рисунку на нашей HTML-странице, то обязаны сориентироваться в иерархии объектов. И начать нужно с самой вершины. Первый объект такой структуры называется document. Первый рисунок на странице представлен как объект images[0]. Это означает, что отныне мы можем получать доступ к этому объекту, записав в JavaScript document.images[0]. Если же, например, Вы хотите знать, какой текст ввел читатель в первый элемент формы, то сперва должны выяснить, как получить доступ к этому объекту. И снова начинаем мы с вершины нашей иерархии объектов. Затем прослеживаем путь к объекту с именем elements[0] и последовательно записываем названия всех объектов, которые минуем. В итоге выясняется, что доступ к первому полю для ввода текста можно получить, записав:

 

document.forms[0].elements[0]

 

А теперь как узнать текст, введенный читателем? Чтобы выяснять, которое из свойств и методов объекта позволят получить доступ к этой информации, необходимо обратиться к какому-либо справочнику по JavaScript (например, это может быть документация, предоставляемая фирмой Netscape, либо моя книга). Там Вы найдете, что элемент, соответствующий полю для ввода текста, имеет свойство value, которое как раз и соответствует введенному тексту. Итак, теперь мы имеем все необходимое, чтобы прочитать искомое значение. Для этого нужно написать на языке JavaScript строку:

 

name= document.forms[0].elements[0].value;

 

Полученная строка заносится в переменную name. Следовательно, теперь мы можем работать с этой переменной, как нам необходимо. Например, мы можем создать выпадающее окно, воспользовавшись командой alert("Hi " + name). В результате, если читатель введет в это поле слово 'Stefan', то по команде alert("Hi " + name) будет открыто выпадающее окно с приветствием ' Hi Stefan '.

 

Если Вы имеете дело с большими страницами, то процедура адресации к различным объектам по номеру может стать весьма запутынной. Например, придется решать, как следует обратиться к объекту document.forms[3].elements[17] document.forms[2].elements[18]? Во избежание подобной проблемы, Вы можете сами присваивать различным объектам уникальные имена. Как это делается, Вы можете увидеть опять же в нашем примере:

 

<form name="myForm">

Name:

<input type="text" name="name" value=""><br>

...

 

Эта запись означает, что объект forms[0] получает теперь еще и второе имя - myForm. Точно так же вместо elements[0] Вы можете писать name (последнее было указано в атрибуте name тэга <input>). Таким образом, вместо

 

name= document.forms[0].elements[0].value;

 

Вы можете записать

 

name= document.myForm.name.value;

 

Это значительно упрощает программирование на JavaScript, особенно в случае с большими web-страницами, содержащими множество объектов. (Обратите внимание, что при написании имен Вы должны еще следить и за положением регистра - то есть Вы не имеете права написать myform вместо myForm). В JavaScript многие свойства объектов достпуны не только для чтения. Вы также имеете возможность записывать в них новые значения. Например, посредством JavaScript Вы можете записать в упоминавшееся поле новую строку.

 

(online-версия руководства позволит Вам проверить этот скрипт немедленно)

 

Пример кода на JavaScript, иллюстрирующего такую возможность - интересующий нас

фрагмент записан как свойство onClick второго тэга <input>:

 

<form name="myForm">

<input type="text" name="input" value="bla bla bla">

<input type="button" value="Write"

onClick="document.myForm.input.value= 'Yo!'; ">

 

Исходный код скрипта:

 

<html>

<head>

<title>Objects</title>

<script language="JavaScript">

<!-- hide

function first() {

// создает выпадающее окно, где размещается

// текст, введенный в поле формы

alert("The value of the textelement is: " +

document.myForm.myText.value);

}

function second() {

// данна\я функци\я провер\яет состо\яние переключателей

var myString= "The checkbox is ";

// переключатель включен, или нет?

if (document.myForm.myCheckbox.checked) myString+= "checked"

else myString+= "not checked";

// вывод строки на экран

alert(myString);

}

// -->

</script>

</head>

<body bgcolor=lightblue>

<form name="myForm">

<input type="text" name="myText" value="bla bla bla">

<input type="button" name="button1" value="Button 1"

onClick="first()">

<br>

<input type="checkbox" name="myCheckbox" CHECKED>

<input type="button" name="button2" value="Button 2"

onClick="second()">

</form>

<p><br><br>

<script language="JavaScript">

<!-- hide

document.write("The background color is: ");

document.write(document.bgColor + "<br>");

document.write("The text on the second button is: ");

document.write(document.myForm.button2.value);

// -->

</script>

</body>

</html>

 

Объект location

Кроме объектов window и document в JavaScript имеется еще один важный объект - location. В этом объекте представлен адрес загруженного HTML-документа. Например, если Вы загрузили страницу http://www.xyz.com/page.html, то значение location.href как раз и будет соответствовать этому адресу. Впрочем, для нас гораздо более важно, что Вы имеете возможность записывать в location.href свои новые значения. Например, в данном примере кнопка загружает в текущее окно новую страницу:

 

<form>

<input type=button value="Yahoo"

onClick="location.href='http://www.yahoo.com'; ">

</form>

 

 

Создание окон

Открытие новых окон в браузере - грандиозная возможность языка JavaScript. Вы можете либо загружать в новое окно новые документы (например, те же документы HTML), либо (динамически) создавать новые материалы. Посмотрим сначала, как можно открыть новое окно, потом как загрузить в это окно HTML-страницу и, наконец, как его закрыть. Приводимый далее скрипт открывает новое окно браузера и загружает в него некую web-страничку:

 

<html>

<head>

<script language="JavaScript">

<!-- hide

function openWin() {

myWin= open("bla.htm");

}

// -->

</script>

</head>

<body>

<form>

<input type="button" value="Открыть новое окно" onClick="openWin()">

</form>

</body>

</html>

 

(online-версия руководства позволит Вам проверить этот скрипт немедленно)

 

В представленном примере в новое окно с помощью метода open() записывается страница bla.htm.

 

Заметим, что Вы имеете возможность управлять самим процессом создания окна. Например, Вы можете указать, должно ли новое окно иметь строку статуса, панель инструментов или меню. Кроме того Вы можете задать размер окна. Например, в следующем скрипте открывается новое окно размером 400x300 пикселов. Оно не имеет ни строки статуса, ни панели инструментов, ни меню.

<html>

<head>

<script language="JavaScript">

<!-- hide

function openWin2() {

myWin= open("bla.htm", "displayWindow",

"width=400,height=300,status=no,toolbar=no,menubar=no");

}

// -->

</script>

</head>

<body>

<form>

<input type="button" value=" Открыть новое окно" onClick="openWin2()">

</form>

</body>

</html>

 

Как видите, свойства окна мы формулируем в строке "width=400,height=300,status=no,toolbar=no,menubar=no". Обратите внимание также и на то, что Вам не следует помещать в этой строке символы пробела!

 

Список свойств окна, которыми Вы можете управлять:

 

directories yes|no
height количество пикселов
location yes|no
menubar yes|no
resizable yes|no
scrollbars yes|no
status yes|no
toolbar yes|no
width количество пикселов

 

В версии 1.2 языка JavaScript были добавлены некоторые новые свойства (то есть в Netscape Navigator 4.0). Вам не следует пользоваться этими свойствами, готовя материалы для Netscape 2.x, 3.x или Microsoft Internet Explorer 3.x, поскольку эти браузеры не понимают языка 1.2 JavaScript. Новые свойства окон:

 

alwaysLowered yes|no
alwaysRaised yes|no
dependent yes|no
hotkeys yes|no
innerWidth количество пикселов (заменяет width)
innerHeight количество пикселов (заменяет height)
outerWidth количество пикселов
outerHeight количество пикселов
screenX количество пикселов
screenY количество пикселов
titlebar yes|no
z-lock yes|no

 

Вы можете найти толкование этих свойств в описании языка JavaScript 1.2. В дальнейшем я для некоторых из них дам разъяснение и примеры использования.

Например, теперь с помощью этих свойств Вы можете определить, в каком месте экрана должно находиться вновь открываемое окно. Работая со старой версией языка JavaScript, Вы не смогли бы этого сделать.

 

Имя окна

Как видите, открывая окна, мы должны использовать три аргумента:

 

myWin= open("bla.htm", "displayWindow",

"width=400,height=300,status=no,toolbar=no,menubar=no");

 

А для чего нужен второй аргумент? Это имя окна. Ранее мы видели, как оно использовалось в параметре target. Так, если Вы знаете имя окна, то можете загрузить туда новую страницу с помощью записи

<a href="bla.html" target="displayWindow">

 

При этом Вам необходимо указать имя соответствующего окна (если же такого окна не существует, то с этим именем будет создано новое). Обратите внимание, что myWin - это вовсе не имя окна. Но только с помощью этой переменной Вы можете получить доступ к окну. И поскольку это обычная переменная, то область ее действия - лишь тот скрипт, в котором она определена. А между тем, имя окна (в данном случае это displayWindow) - уникальный идентификатор, которым можно пользоваться с любого из окон браузера.

 

Создание окон

Вы можете также закрывать окна с помощью языка JavaScript. Чтобы сделать это, Вам понадобится метод close(). Давайте, как было показано ранее, откроем новое окно. И загрузим туда очередную страницу:

<html>

<script language="JavaScript">

<!-- hide

function closeIt() {

close();

}

// -->

</script>

<center>

<form>

<input type=button value="Close it" onClick="closeIt()">

</form>

</center>

</html>

 

Если теперь в новом окне Вы нажмете кнопку, то оно будет закрыто. open() и close() - это методы объекта window. Мы должны помнить, что следует писать не просто open() и close(), а window.open() и window.close(). Однако в нашем случае объект window можно опустить - Вам нет необходимости писать префикс window, если Вы хотите всего лишь вызвать один из методов этого объекта (и такое возможно только для этого объекта).

 

Динамическое создание документов

Теперь мы готовы к рассмотрению такой замечательной возможности JavaScript, как динамическое создание документов. То есть Вы можете разрешить Вашему скрипту на языке JavaScript самому создавать новые HTML-страницы. Более того, Вы можете таким же образом создавать и другие документы Web, такие как VRML-сцены и т.д. Для удобства Вы можете размещать эти документы в отдельном окне или фрейме.

Для начала мы создадим простой HTML-документ, который покажем в новом окне. Рассмотрим следующий скрипт.

 

<html>

<head>

<script language="JavaScript">

<!-- hide

function openWin3() {

myWin= open("", "displayWindow",

"width=500,height=400,status=yes,toolbar=yes,menubar=yes");

// открыть объект document для последующей печати

myWin.document.open();

// генерировать новый документ

myWin.document.write("<html><head><title>On-the-fly");

myWin.document.write("</title></head><body>");

myWin.document.write("<center><font size=+3>");

myWin.document.write("Данный документ HTML был создан ");

myWin.document.write("с помощью JavaScript!");

myWin.document.write("</font></center>");

myWin.document.write("</body></html>");

// закрыть документ - (но не окно!)

myWin.document.close();

}

// -->

</script>

</head>

<body>

<form>

<input type=button value="On-the-fly" onClick="openWin3()">

</form>

</body>

</html>

 

(online-версия руководства позволит Вам проверить этот скрипт немедленно)

 

Давайте рассмотрим функцию winOpen3 (). Очевидно, мы сначала открываем новое окно браузера. Поскольку первый аргумент функции open() - пустая строка (""), то это значит, что мы не желаем в данном случае указывать конкретный адрес URL. Браузер должен только не обработать имеющийся документ - JavaScript обязан создать дополнительно новый документ.

В скрипте мы определяем переменную myWin. И с ее помощью можем получать доступ к новому окну. Обратите пожалуйста внимание, что в данном случае мы не можем воспользоваться для этой цели именем окна (displayWindow). После того, как мы открыли окно, наступает очередь открыть для записи объект document. Делается это с помощью команды:

 

// открыть объект document для последующей печати

myWin.document.open();

 

Здесь мы обращаемся к open() - методу объекта document. Однако это совсем не то же самое, что метод open() объекта window! Эта команда не открывает нового окна - она лишь готовит document к предстоящей печати. Кроме того, мы должны поставить перед document.open() приставку myWin, чтобы получить возможность писать в новом окне.

В последующих строках скрипта с помощью вызова document.write() формируется текст нового документа:

 

// генерировать новый документ

myWin.document.write("<html><head><title>On-the-fly");

myWin.document.write("</title></head><body>");

myWin.document.write("<center><font size=+3>");

myWin.document.write("This HTML-document has been created ");

myWin.document.write("with the help of JavaScript!");

myWin.document.write("</font></center>");

myWin.document.write("</body></html>");

 

Как видно, здесь мы записываем в документ обычные тэги языка HTML. То есть мы фактически генерируем разметку HTML! При этом Вы можете использовать абсолютно любые тэги HTML.

По завершении этого мы обязаны вновь закрыть документ. Это делается следующей командой:

 

// закрыть документ - (но не окно!)

myWin.document.close();

 

Как я уже говорил, Вы можете не только динамически создавать документы, но и по своему выбору размещать их в в том или ином фрейме. Например, если Вы получили два фрейма с именами frame1 и frame2, а теперь во frame2 хотите сгенерировать новый документ, то для этого в frame1 Вам достаточно будет написать следующее:

parent.frame2.document.open();

parent.frame2.document.write("Here goes your HTML-code");

parent.frame2.document.close();

 

Строка состояния

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

 

(online-версия руководства позволит Вам проверить этот скрипт немедленно)

 

<html>

<head>

<script language="JavaScript">

<!-- hide

function statbar(txt) {

window.status = txt;

}

// -->

</script>

</head>

<body>

<form>

<input type="button" name="look" value="Писать!"

onClick="statbar('Привет! Это окно состо\яни\я!');">

<input type="button" name="erase" value="Стереть!"

onClick="statbar('');">

</form>

</body>

</html>

 

Итак, мы создаем форму с двумя кнопками. Обе эти кнопки вызывают функцию statbar(). Вызов от клавиши Писать! выглядит следующим образом:

 

statbar('Привет! Это окно состо\яни\я!');

 

В скобках мы написали строку: 'Привет! Это окно состо\яни\я!' Это как раз и будет текст, передаваемый функции statbar(). В свою очередь, можно видеть, что функция statbar() определена следующим образом:

 

function statbar(txt) {

window.status = txt;

}

 

В заголовке функции в скобках мы поместили слово txt. Это означает, что строка, которую мы передали этой функции, помещается в переменную txt. Передача функциям переменных - прием, часто применяемый для придания функциям большей гибкости. Вы можете передать функции несколько таких аргументов - необходимо лишь отделить их друг от друга запятыми. Строка txt заносится в строку состояния посредством команды window.status = txt. Соответственно, удаление текста из строки состояния выполняется как запись в window.status пустой строки.

 

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

 

<a href="dontclck.htm"

onMouseOver="window.status= 'Don\'t click me!'; return true;"

onMouseOut="window.status='';">link</a>

 

Здесь мы пользуемся процедурами onMouseOver и onMouseOut, чтобы отслеживать моменты, когда указатель мыши проходит над данной ссылкой. Вы можете спросить, а почему в onMouseOver мы обязаны возвращать результат true. На самом деле это означает, что браузер не должен вслед за этим выполнять свой собственный код обработки события MouseOver. Как правило, в строке состояния браузер показывает URL соответствующей ссылки. Если же мы не возвратим значение true, то сразу же после того, как наш код был выполнен, браузер перепишет строку состояния на свой лад - то есть наш текст будет тут же затерт и читатель не сможет его увидеть. В общем случае, мы всегда можем отменить дальнейшую обработку события браузером, возвращая true в своей собственной процедуре обработки события.

 

в JavaScript 1.0 процедура OnMouseOut еще не была представлена. И если Вы пользуетесь Netscape Navigator 2.x, то возможно на различных платформах Вы можете получить различные результаты. Например, на платформах Unix текст исчезает даже несмостря на то, что браузер не знает о существовании процедуры onMouseOut. В Windows текст не исчезает. И если Вы хотите, чтобы ваш скрипт был совместим с Netscape 2.x для Windows, то можете, к примеру, написать функцию, которая записывает текст в окно состояния, а потом стирает его через некоторый промежуток времени. Программируется это с помощью таймера timeout. Подробнее работу с таймерами мы рассмотрим в одном из следующих параграфов.

 

В этом скрипте Вы можете видеть еще одну вещь - в некоторых случаях Вам понадобится печатать символы кавычек. Например, мы хотим напечатать текст Don't click me - однако поскольку мы передаем эту строку в процедуру обработки события onMouseOver, то мы используем для этого одинарные кавычки. Между тем, как слово Don't тоже содержит символ одинарной кавычки! И в результате если Вы просто впишете ' 'Don't...', браузер запутается в этих символах '. Чтобы разрешить эту проблему, Вам достаточно лишь поставить обратный слэш \ перед символом кавычки - это означает, что данный символ предназначен именно для печати. (То же самое Вы можете делать и с двойными кавычками - ").

 

Таймеры

С помощью функции Timeout (или таймера) Вы можете запрограммировать компьютер на выполнение некоторых команд по истечении некоторого времени. В следующем скрипте демострируется кнопка, которая открывает выпадающее окно не сразу, а по истечении 3 секунд.

 

Скрипт выглядит следующим образом:

 

<script language="JavaScript">

<!-- hide

function timer() {

setTimeout("alert('Врем\я истекло!')", 3000);

}

// -->

</script>

...

<form>

<input type="button" value="Timer" onClick="timer()">

</form>

 

Здесь setTimeout() - это метод объекта window. Он устанавливает интервал времени - я полагаю, Вы догадываетесь, как это происходит. Первый аргумент при вызове - это код JavaScript, который следует выполнить по истечении указанного времени. В нашем случае это вызов - alert('Врем\я истекло!'). Обратите пожалуйста внимание, что код на JavaScript должен быть заключен в кавычки. Во втором аргументе компьютеру сообщается, когда этот код следует выполнять. При этом время Вы должны указывать в миллисекундах (3000 миллисекунд = 3 секунда).

 

Прокрутка

Теперь, когда Вы знаете, как делать записи в строке состояния и как работать с таймерами, мы можем перейти к управлению прокруткой. Вы уже могли видеть, как текст перемещается строке состояния. В Интернет этим приемом пользуются повсеместно. Теперь же мы рассмотрим, как можно запрограммировать прокрутку в основной линейке. Рассмотрим также и всевозможные усовершенствования этой линейки. Создать бегущую строку довольно просто. Для начала давайте задумаемся, как вообще можно создать в строке состояния перемещающийся текст - бегущую строку. Очевидно, сперва мы должны записать в строку состояния некий текст. Затем по истечении короткого интервала времени мы должны записать туда тот же самый текст, но при этом немного переместив его влево. Если мы это сделаем несколько раз, то у пользователя создастся впечатление, что он имеет дело с бегущей строкой. Однако при этом мы должны помнить еще и о том, что обязаны каждый раз вычеслять, какую часть текста следует показывать в строке состояния (как правило, объем текстового материала превышает размер строки состояния).

 

Итак, исходный код скрипта - я добавил к нему еще некоторые комментарии:

 

<html>

<head>

<script language="JavaScript">

<!-- hide

// выбор текста дл\я прокрутки

var scrtxt = "Это JavaScript! " +

"Это JavaScript! " +

"Это JavaScript!";

var len = scrtxt.length;

var width = 100;

var pos = -(width + 2);

function scroll() {

// напечатать заданный текст справа и установить таймер

// перейти на исходную позицию для следующего шага

pos++;

// вычленить видимую часть текста

var scroller = "";

if (pos == len) {

pos = -(width + 2);

}

// если текст еще не дошел до левой границы, то мы должны

// добавить перед ним несколько пробелов. В противном случае мы должны

// вырезать начало текста (ту часть, что уже ушла за левую границу

if (pos < 0) {

for (var i = 1; i <= Math.abs(pos); i++) {

scroller = scroller + " ";}

scroller = scroller + scrtxt.substring(0, width - i + 1);

}

else {

scroller = scroller + scrtxt.substring(pos, width + pos);

}

// разместить текст в строке состо\яни\я

window.status = scroller;

// вызвать эту функцию вновь через 100 миллисекунд

setTimeout("scroll()", 100);

}

// -->

</script>

</head>

<body onLoad="scroll()">

Наша HTML-страница.

</body>

</html>

 

Большая часть функции scroll() нужна для вычленения той части текста, которая будет показана пользователю. Я не буду объяснять этот код подробно - Вам необходимо лишь понять, как вообще осуществляется эта прокрутка. Чтобы запустить этот процесс, мы используемся процедурой обработки события onLoad, описанной в тэге <body>. То есть функция scroll() будет вызвана сразу же после загрузки HTML-страницы. Через посредство процедуры onLoad мы вызываем функцию scroll(). Первым делом в функции scroll() мы устанавливаем таймер. Этим гарантируется, что функция scroll() будет повторно вызвана через 100 миллисекунд. При этом текст будет перемещен еще на один шаг и запущен другой таймер. Так будет продолжаться без конца.

 




Дата добавления: 2014-12-18; просмотров: 143 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (2.498 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав