1. Trang chủ
  2. » Công Nghệ Thông Tin

JavaScript Bible, Gold Edition part 209 pdf

10 65 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 645,66 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chapter 31 Examples The following sections contain examples from Chapter 31, “Positioned Objects.” NN4 Layer Object Properties above below siblingAbove siblingBelow NN2 NN3 NN4 NN6 IE3/J

Trang 1

following statement into the top text box:

document.styleSheets[0].disabled = false The first rule is for the myPelement on the page Change the rule’s font-sizestyle: document.styleSheets[0].rules[0].style.fontSize = “20pt”

Look over the styleobject properties in the discussion of the styleobject later in this chapter and have fun experimenting with different style properties After you are finished, reload the page to restore the styles to their default states.

Chapter 31 Examples

The following sections contain examples from Chapter 31, “Positioned Objects.”

NN4 Layer Object

Properties above

below siblingAbove siblingBelow

NN2 NN3 NN4 NN6 IE3/J1 IE3/J2 IE4 IE5 IE5.5

Example

Listing 31-1 enables you to experiment with just one set of these properties:

layerObject.aboveand layerObject.below The page is almost in the form of a laboratory/quiz that enables you to query yourself about the values of these prop-erties for two swappable layers.

document.layerObject.above

Trang 2

Listing 31-1: A Layer Quiz

<HTML>

<HEAD>

<SCRIPT LANGUAGE=”JavaScript”>

function checkAbove(oneLayer) {

document.forms[0].errors.value = “”

document.forms[0].output.value = oneLayer.above.name

}

function checkBelow(oneLayer) {

document.forms[0].errors.value = “”

document.forms[0].output.value = oneLayer.below.name

}

function swapLayers() {

if (document.yeller.above) {

document.yeller.moveAbove(document.greeny)

} else {

document.greeny.moveAbove(document.yeller)

}

}

function onerror(msg) {

document.forms[0].output.value = “”

document.forms[0].errors.value = msg

return true

}

</SCRIPT>

</HEAD>

<BODY>

<H1>Layer Ordering</H1>

<HR>

<FORM>

Results:<INPUT TYPE=”text” NAME=”output”><P>

<INPUT TYPE=”button” VALUE=”Who’s ABOVE the Yellow layer?”

onClick=”checkAbove(document.yeller)”><BR>

<INPUT TYPE=”button” VALUE=”Who’s BELOW the Yellow layer?”

onClick=”checkBelow(document.yeller)”><P>

<INPUT TYPE=”button” VALUE=”Who’s ABOVE the Green layer?”

onClick=”checkAbove(document.greeny)”><BR>

<INPUT TYPE=”button” VALUE=”Who’s BELOW the Green layer?”

onClick=”checkBelow(document.greeny)”><P>

<INPUT TYPE=”button” VALUE=”Swap Layers” onCLick=”swapLayers()”><P>

If there are any errors caused by missing <BR>

properties, they will appear below:<BR>

<TEXTAREA NAME=”errors” COLS=30 ROWS=3 WRAP=”virtual”></TEXTAREA>

</FORM>

<LAYER NAME=”yeller” BGCOLOR=”yellow” TOP=110 LEFT=300 WIDTH=200 HEIGHT=200>

<B>This is just a yellow layer.</B>

</LAYER>

Continued

document.layerObject.above

Trang 3

Listing 31-1 (continued)

<LAYER NAME=”greeny” BGCOLOR=”lightgreen” TOP=150 LEFT=340 WIDTH=200 HEIGHT=200>

<B>This is just a green layer.</B>

</LAYER>

</BODY>

</HTML>

The page contains two layers: one colored yellow and the other light green.

Legends on four buttons ask you to guess whether one layer is above or below the other For example, if you click the button labeled “Who’s ABOVE the Yellow layer?” and the green layer is above it, the name of that green layer appears in the Results field But if layers are oriented such that the returned value is null, the error mes-sage (indicating that the nonexistent object doesn’t have a nameproperty) appears

in the error field at the bottom Another button enables you to swap the order of the layers so you can try your hand at predicting the results based on your knowl-edge of layers and the aboveand belowproperties.

Positioned objects in IE4+ and NN6 have no comparable properties to the four described in this section.

background

NN2 NN3 NN4 NN6 IE3/J1 IE3/J2 IE4 IE5 IE5.5

Example

A simple example (Listing 31-2) defines one layer that features five buttons to change the background image of a second layer I put the buttons in a layer because

I want to make sure the buttons and background layer rectangles align themselves along their top edges on all platforms.

As the second layer loads, I merely assign a gray background color to it and write some reverse (white) text Most of the images are of the small variety that repeat in the layer One is a large photograph to demonstrate how images are clipped to the layer’s rectangle Along the way, I hope you also heed the lesson of readability demonstrated by the difficulty of reading text on a wild-looking background For an example compatible with IE5+ and NN6+, see Listing 31-13.

document.layerObject.background

Trang 4

Listing 31-2: Setting Layer Backgrounds

<HTML>

<HEAD>

<SCRIPT LANGUAGE=”JavaScript”>

function setBg(URL) {

document.bgExpo.background.src = URL

}

</SCRIPT>

</HEAD>

<BODY>

<H1>Layer Backgrounds</H1>

<HR>

<LAYER NAME=”buttons” TOP=100>

<FORM>

<INPUT TYPE=”button” VALUE=”The Usual”

onClick=”setBg(‘cr_kraft.gif’)”><BR>

<INPUT TYPE=”button” VALUE=”A Big One” onClick=”setBg(‘arch.gif’)”><BR>

<INPUT TYPE=”button” VALUE=”Not So Usual”

onClick=”setBg(‘wh86.gif’)”><BR>

<INPUT TYPE=”button” VALUE=”Decidedly Unusual”

onClick=”setBg(‘sb23.gif’)”><BR>

<INPUT TYPE=”button” VALUE=”Quick as ”

onClick=”setBg(‘lightnin.gif’)”><BR>

</FORM>

</LAYER>

<LAYER NAME=”bgExpo” BGCOLOR=”gray” TOP=100 LEFT=250 WIDTH=300 HEIGHT=260>

<B><FONT COLOR=”white”>Some text, which may or may not read well with the

various backgrounds.</FONT></B>

</LAYER>

</BODY>

</HTML>

bgColor

NN2 NN3 NN4 NN6 IE3/J1 IE3/J2 IE4 IE5 IE5.5

Example

You can have some fun with Listing 31-3, which uses a number of layer scripting

techniques The page presents a kind of palette of eight colors, each one created as

document.layerObject.bgColor

Trang 5

you roll the mouse over any color in the palette.

Figure 31-1: Drag the mouse across the palette to change the layer’s background color.

To save HTML lines to create those eight color palette layers, I use a script to estab-lish an array of colors and then document.write()the <LAYER>tags with appro-priate attribute settings so the layers all line up in a contiguous row By predefining

a number of variable values for the size of the color layers, I can make all of them larger or smaller with the change of only a few script characters.

The documentobject handles the job of capturing the mouseOverevents I turn on the document’s captureEvents()method such that it traps all mouseOverevents and hands them to the setColor()function The setColor()function reads the target object’s bgColorand sets the larger layer’s bgColorproperty to the same If this page had other objects that could receive mouseOverevents for other pur-poses, I would use routeEvents()to let those events pass on to their intended tar-gets For the purposes of this example, however, the events need to go no further Listing 31-14 shows the same functionality working in IE5+ and NN6+.

Listing 31-3: Layer Background Colors

<HTML>

<HEAD>

<SCRIPT LANGUAGE=”JavaScript”>

document.layerObject.bgColor

Trang 6

function setColor(e) {

document.display.bgColor = e.target.bgColor

}

document.captureEvents(Event.MOUSEOVER)

document.onmouseover = setColor

</SCRIPT>

</HEAD>

<BODY>

<H1>Layer Background Colors</H1>

<HR>

<SCRIPT LANGUAGE=”JavaScript”>

var oneLayer

var colorTop = 100

var colorLeft = 20

var colorWidth = 40

var colorHeight = 40

var colorPalette = new

Array(“aquamarine”,”coral”,”forestgreen”,”goldenrod”,”red”,

“magenta”,”navy”,”teal”) for (var i = 0; i < colorPalette.length; i++) {

oneLayer = “<LAYER NAME=swatch” + i + “ TOP=” + colorTop

oneLayer += “ LEFT=” + ((colorWidth * i) + colorLeft)

oneLayer += “ WIDTH=” + colorWidth + “ HEIGHT=” + colorHeight

oneLayer += “ BGCOLOR=” + colorPalette[i] + “></LAYER>\n”

document.write(oneLayer)

}

</SCRIPT>

<LAYER NAME=”display” BGCOLOR=”gray” TOP=150 LEFT=80 WIDTH=200 HEIGHT=200>

<B><FONT COLOR=”white”><CENTER>Some reversed text to test against background

colors.</CENTER></FONT></B>

</LAYER>

</BODY>

</HTML>

clip

NN2 NN3 NN4 NN6 IE3/J1 IE3/J2 IE4 IE5 IE5.5

Example

Because of the edge movement behavior of adjustments to layerObject.clip

properties, Listing 31-4 enables you to experiment with adjustments to each of the

document.layerObject.clip

Trang 7

native values into six text fields — one per property Figure 31-2 shows the page.

Figure 31-2: Experiment with layer.clip properties.

As you enter values, all properties are updated to show their current values (via the showValues()function) Pay particular attention to the apparent motion of the edge and the effect the change has on at least one other property For example, a change to the layerObject.clip.leftvalue also affects the layerObject clip.widthproperty value.

Listing 31-4: Adjusting layer.clip Properties

<HTML>

<HEAD>

<TITLE>Layer Clip</TITLE>

<SCRIPT LANGUAGE=”JavaScript”>

var origLayerWidth = 0 var origLayerHeight = 0 function initializeXY() { origLayerWidth = document.display.clip.width origLayerHeight = document.display.clip.height showValues()

}

document.layerObject.clip

Trang 8

function setClip(field) {

var clipVal = parseInt(field.value)

document.display.clip[field.name] = clipVal

showValues()

}

function showValues() {

var form = document.layers[0].document.forms[0]

var propName

for (var i = 0; i < form.elements.length; i++) {

propName = form.elements[i].name

if (form.elements[i].type == “text”) {

form.elements[i].value = document.display.clip[propName]

}

}

}

var intervalID

function revealClip() {

var midWidth = Math.round(origLayerWidth /2)

var midHeight = Math.round(origLayerHeight /2)

document.display.clip.left = midWidth

document.display.clip.top = midHeight

document.display.clip.right = midWidth

document.display.clip.bottom = midHeight

intervalID = setInterval(“stepClip()”,1)

}

function stepClip() {

var widthDone = false

var heightDone = false

if (document.display.clip.left > 0) {

document.display.clip.left += -2

document.display.clip.right += 2

} else {

widthDone = true

}

if (document.display.clip.top > 0) {

document.display.clip.top += -1

document.display.clip.bottom += 1

} else {

heightDone = true

}

showValues()

if (widthDone && heightDone) {

clearInterval(intervalID)

}

}

</SCRIPT>

</HEAD>

<BODY onLoad=”initializeXY()”>

<H1>Layer Clipping Properties</H1>

Continued

document.layerObject.clip

Trang 9

Listing 31-4 (continued)

<HR>

Enter new clipping values to adjust the visible area of the layer.<P>

<LAYER TOP=130>

<FORM>

<TABLE>

<TR>

<TD ALIGN=”right”>layer.clip.left:</TD>

<TD><INPUT TYPE=”text” NAME=”left” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

<TR>

<TD ALIGN=”right”>layer.clip.top:</TD>

<TD><INPUT TYPE=”text” NAME=”top” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

<TR>

<TD ALIGN=”right”>layer.clip.right:</TD>

<TD><INPUT TYPE=”text” NAME=”right” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

<TR>

<TD ALIGN=”right”>layer.clip.bottom:</TD>

<TD><INPUT TYPE=”text” NAME=”bottom” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

<TR>

<TD ALIGN=”right”>layer.clip.width:</TD>

<TD><INPUT TYPE=”text” NAME=”width” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

<TR>

<TD ALIGN=”right”>layer.clip.height:</TD>

<TD><INPUT TYPE=”text” NAME=”height” SIZE=3 onChange=”setClip(this)”></TD>

</TR>

</TABLE>

<INPUT TYPE=”button” VALUE=”Reveal Original Layer” onClick=”revealClip()”>

</FORM>

</LAYER>

<LAYER NAME=”display” BGCOLOR=”coral” TOP=130 LEFT=200 WIDTH=360 HEIGHT=180>

<H2>ARTICLE I</H2>

<P>

Congress shall make no law respecting an establishment of religion, or prohibiting the free exercise thereof; or abridging the freedom of speech, or of the press; or the right of the people peaceably to assemble, and to petition the government for a redress of grievances

</P>

</LAYER>

</BODY>

</HTML>

document.layerObject.clip

Trang 10

Listing 31-4 has a lot of other scripting in it to demonstrate a couple of other clip

area techniques After the document loads, the onLoadevent handler initializes

two global variables that represent the starting height and width of the layer as

determined by the clip.heightand clip.widthproperties Because the <LAYER>

tag does not specify any CLIPattributes, the layerObject.clipregion is ensured

of being the same as the layer’s dimensions at load time.

I preserve the initial values for a somewhat advanced set of functions that act in

response to the Reveal Original Layer button The goal of this button is to

temporar-ily shrink the clipping area to nothing and then expand the clip rectangle gradually

from the very center of the layer The effect is analogous to a zoom-out visual effect.

The clip region shrinks to practically nothing by setting all four edges to the same

point midway along the height and width of the layer The script then uses

setInterval()to control the animation in setClip() To make the zoom even on

both axes, I first make sure that the initial size of the layer is an even ratio: twice as

wide as it is tall Each time through the setClip()function, the clip.leftand

clip.rightvalues are adjusted in their respective directions by two pixels and

clip.topand clip.bottomare adjusted by one pixel.

To make sure the animation stops when the layer is at its original size, I check

whether the clip.topand clip.leftvalues are their original zero values If they

are, I set a Boolean variable for each side When both variables indicate that the

clip rectangle is its original size, the script cancels the setInterval()action.

Listing 31-15 demonstrates how to adjust clipping in IE5+ and NN6+ syntax.

left

top

NN2 NN3 NN4 NN6 IE3/J1 IE3/J2 IE4 IE5 IE5.5

Example

To enable you to experiment with manually setting layerObject.topand

layerObject.leftproperties, Listing 31-5 is a modified version of the

layer.clipexample (Listing 31-4) The current example again has the one

modifi-able layer, but it has only four text fields in which you can enter values Two fields

are for the layerObject.leftand layerObject.topproperties; the other two

are for the layerObject.clip.leftand layerObject.clip.topproperties I

present both sets of values here to help reinforce the lack of connection between

layer and clip location properties in the same layer object.

document.layerObject.left

Ngày đăng: 06/07/2014, 06:20

TỪ KHÓA LIÊN QUAN