JavaScript - How To Create Absolute, And Then Fixed Div?
Hello everyone!
I just thought this might require some javascript, so I posted this here. Anyway, how do I create an element that is absolutely positioned first, and then, when it goes to the top of the page, it becomes fixed? Thanks Lucas Similar TutorialsI have created a lightbox for user display on my site. The lightbox is triggered by an onclick link. Works great but I would like to make one switch to it. I would like the lightbox to appear position:fixed; top:10px; onclick. Then if the user scrolls I would like the lightbox to appear position:absolute; top:10px; You can see an example of this here on ESPN's website http://search.espn.go.com/first-take/videos/6. If you click any video it appears position fixed onclick but then position absolute on scroll. This is what I have so far. It shows it all position fixed onclick as I desire, but stays that way on scroll. PHP Code: <a href = "javascript:void(0)" onclick = "document.getElementById('light<?php echo $count;?>').style.display='block'; document.getElementById('light<?php echo $count;?>').style.position = 'fixed'; document.getElementById('light<?php echo $count;?>').style.top = '10px'; document.getElementById('fade<?php echo $count;?>').style.display='block'"> ... [link] ... </a> PHP Code: <div id="light<?php echo $count;?>" class="log-lightbox-content-wrapper"> ... [lightbox content] ... </div> PHP Code: <style> .log-lightbox-content-wrapper {display: none; position:absolute; top: -45px; left: 50%; margin-left: -456px; width: 900px; padding: 16px;background-color: white;z-index:1002; overflow: auto; border-color:#666; border-radius:5px; border-style:solid; border-width:5px; min-height:600px; height: auto !important; height:600px;} </style> Progress: http://instride.info/admin - Click tab that says log - Then click any log post to view light box I'm new to javascript and am not sure why this works in firefox and not chrome. I am trying to create a script that keeps an object fixed horizontally while bing positioned absolute vertically. if I replace the toPP variable in document.getElementById('fire').style.top = toPP; with say '50px' it will move the element down 50 pxs, but how I have it currently it doesn't do anything in chrome Code: <script type="text/javascript" > window.onscroll = function() { if( window.XMLHttpRequest ) { var x = 0 -document.documentElement.scrollTop; var toP = String(x); var toPP = toP + "px"; document.getElementById('fire').style.position = 'fixed'; document.getElementById('fire').style.top = toPP; } } </script> I need to convert a position:fixed element to position:absolute when the user resize their browser window below 1000px. Right now it does nothing. The element always keeps the fixed positioning even after resizing the window. Here's what I have right now: Code: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <base href="http://www.area51entertainment.co/" /> <title>Emoto <?php echo "$section"; ?></title> <meta charset="UTF-8" /> <meta name="verify-v1" content="" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <meta name="author" content="Andrew McCarrick" /> <meta name="robots" content="index, follow" /> <style type="text/css"> body,html { background: #FFFFFF; /* Old browsers */ color: #000000; font-family: Verdana; margin-right:auto; margin-left:auto; max-width:1000px; padding: 0px; margin-top: 0px; margin-bottom: 0px; } </style> <link rel="stylesheet" href="emoto/style.css" media="screen" /> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <link rel="apple-touch-icon" href="http://www.area51entertainment.co/TouchIcon.png" /> <link rel="apple-touch-icon-precomposed" href="http://www.area51entertainment.co/TouchIcon.png" /> <link rel="image_src" href="./logo.png" /> <script language="javascript" src="emoto/float.js"></script> </head> <body> <div class="wrapper"> <div id="header_float"> <div class="header_wrapper"> <div class="logo"> Picture </div> <div class="links"> Home | Settings | Notifications | Requests | Messages | Search Bar </div> <div class="links_right"> Profile Link/Sign-Out </div> </div> </div> <div class="content_wrapper"> Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 T est2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2Test2Test2 Test2 </div> </div> </body> </html> style.css Code: a:link {color: #FFFFFF; text-decoration: none;} a:visited {color: #FFFFFF; text-decoration: none;} a:active {color: #FFFFFF; text-decoration: none;} a:hover {color: #3399FF; text-decoration: none;} .wrapper{ min-height: 2000px; min-width: 1000px; } #header_float{ width: 100%; min-width: 1000px; height: 35px; left:0; right:0; top:0; position: fixed; background: #49963A; z-index: 1000; } .header_wrapper{ width: 1000px; height: 35px; margin-right:auto; margin-left:auto; padding: 0px; margin-top: 0px; margin-bottom: 0px; color: #FFFFFF; } .logo{ float: left; width: 150px; height: 25px; font-size: 26px; position: relative; top: -1px; left: 8px; } .links{ float: left; width: 670px; height: 25px; position: relative; top: 7px; } .links_right{ float: right; width: 180px; height: 25px; position: relative; top: 7px; } .content_wrapper{ position: relative; top: 35px; width: 995px; min-height: 450px; } img{ border: 0px; } float.js Code: if (screen.availWidth<=999) document.getElementById('header_float').style.position = 'absolute'; else document.getElementById('header_float').style.position = 'fixed'; Hi there, am working on an assignment to replicate the caesar cipher. i've written a function to move the cipher text one postion to the right and it works. i'm now trying to write another function that calls on the first where the signal character and index character do not match. The function then returns a new array. Here is the first function and it's test call: Code: function right(letterArray) { var lowerArray = new Array(letterArray.length); for (var letter = 0; letter < letterArray.length; letter = letter + 1) { lowerArray[letter] = letterArray[letter - 1]; if(letter == letterArray.length - 1) { lowerArray[0] = letterArray[letterArray.length - 1]; } } return lowerArray; } function testTask02() { right(cipherArray) window.alert(right(cipherArray)); // calls the right() function with cipherArray, an array of lower case // characters as an argument. // displays the return value in a dialogue box. } And here is the bit i'm having trouble with: Code: function rotateToPosition(signalCharacter, indexCharacter, plainAlphabet, cipherAlphabet) { var resultArray = new Array(cipherAlphabet.length); for (var copy = 0; copy < cipherAlphabet.length; copy = copy + 1) { resultArray[copy] = cipherAlphabet[copy]; resultArray[indexCharacter] = resultArray[copy]; } var signalPosition = signalCharacter; for (var position = 1; position < plainAlphabet.length; position = position + 1) { if (plainAlphabet[position] == plainAlphabet[signalPosition]) { signalPosition = position; } } while (resultArray[indexCharacter] != plainAlphabet[signalPosition]) { right(resultArray); } return resultArray; } function testTask03() { rotateToPosition('A', 'g', plainArray, cipherArray) window.alert(rotateToPosition('A', 'g', plainArray, cipherArray)); // calls the rotateToPosition() function with signal character, // index character, an array of upper case letters and an // array of locwer case letters as arguments. // displays the return value in a dialogue box //TO DO TASK 3 (iii) } Been working on this for hours and my brain is fried! If anyone can point me in the right direction that would be awesome. Many thanks Hi, i've been searching this for a while now. I need to make a website for a school exercise and i'm looking for the next thing: i have 2 rows of 4 iframes on my site, which shows an image. u can combine these images by scrolling the iframes. but what i want is that it scrolls fixed. i have a preview of this right he http://toliademidov.ru/p/ i just need to know how to make it not scroll, but 'switch' to a next piece of image by scrolling. Thanks!! Mathieu This is compound. Code: //compound interest function checkNumber2(input, min, max, msg) { msg = msg + " field has invalid data: " + input.value; var str = input.value; for (var i = 0; i < str.length; i++) { var ch = str.substring(i, i + 1) if ((ch < "0" || "9" < ch) && ch != '.') { alert(msg); return false; } } var num = parseFloat(str) if (num < min || max < num) { alert(msg + " not in range [" + min + ".." + max + "]"); return false; } input.value = str; return true; } function computeField2(input) { if (input.value != null && input.value.length != 0) input.value = "" + eval(input.value); computeForm(input.form); } function computeForm2(form) { if ((form.payments.value == null || form.payments.value.length == 0) || (form.interest.value == null || form.interest.value.length == 0) || (form.principal.value == null || form.principal.value.length == 0)) { return; } if (!checkNumber(form.payments, 1, 480, "# of payments") || !checkNumber(form.interest, .001, 99, "Interest") || !checkNumber(form.principal, 0, 10000000, "Principal")) { form.payment.value = "Invalid"; return; } var i = form.interest.value; if (i > 1.0) { i = i / 100.0; form.interest.value = i; } i /=12; var pow=1; for (var j=0; j < form.payments.value; j++) pow=pow * (1 + i); money="" + .01* Math.round(100*(form.principal.value * pow * i) / (pow - 1)); dec=money.indexOf("."); dollars = money.substring(0,dec); cents=money.substring(dec+1,dec+3); cents=(cents.length < 2) ? cents + "0" : cents; money=dollars + "." + cents; form.payment.value = money; } function clearForm2(form) { form.payments.value = ""; form.interest.value = ""; form.principal.value = ""; } //STOP compound interest I'm not a mathmatician (or english major). what do I need to change to make this for fixed interest? Thanks in advance and I didn't know she was your sister in advance. First off by let me stating that I am not a great web devloper nor am I a good with css / javascript. I am creating this website for a friend of mines company and I have one problem. The problem is that the navigation menu on the right side will not remain fixed how i want it to be. I spoke with many people and they all said that this cannot be done with css considering your layout and because it needs to dodge the headers and the footer. I basically want this div (sidenav on the right) to scroll along the page as users scroll up or down but it can not interfere with the header or footer. Could someone please post an example or if anyone has the time please tell me exactly what code I need to add to get this to work? keep in mind that i do not want the right side navigation to go over the content or out of the wrapper. I want it to stay in the same position in all aspects - left / right / top / bottom. Here is a link to the site http://www.collisionbodyworks.com/Pl...tic/index.html Any help would be greatly appreciated. Thank you in advance fixed it.
i wanted the absolute div to be within the relative and not relative to page. when i do this without the js it works fine so something in it is making this happen. is there any way around this PLEASE HELP and THANKS! Code: <div style="position:relative"> <script type="text/javascript"> if (ie4||DOM2) document.write('<div style="position:relative"><div id="fscroller" style="position:absolute;top:0;left:0;border:0px solid black;width:'+fwidth+';height:'+fheight+'"></div></div>'); if (window.addEventListener) window.addEventListener("load", changecontent, false) else if (window.attachEvent) window.attachEvent("onload", changecontent) else if (document.getElementById) window.onload=changecontent </script> </div> Code: function changecontent(){ var index = Math.floor ( Math.random() * fcontent.length ); if (index>=fcontent.length) index=0 if (DOM2){ document.getElementById("fscroller").style.color="rgb("+startcolor[0]+", "+startcolor[1]+", "+startcolor[2]+")" document.getElementById("fscroller").innerHTML=begintag+fcontent[index]+closetag if (fadelinks) linkcolorchange(1); colorfade(1, 15); } else if (ie4) document.all.fscroller.innerHTML=begintag+fcontent[index]+closetag; index++ } I am working on a puzzle that produces a container div. Within that div are produced a grid of 9.16. or 25 tiles. The tiles are positioned absolutely so I can be sure of their relative placement. The container div width and height is calculated according to a preset tile width and height (square actually). So the width of the container should adjust to either 3,4 or 5 tile widths and heights. The trouble is that the offset position of the top left tile is different relative to the container for each different set of tiles (even though it is supposed to be the same position relative to the container for each). I do this so I can apply dragging to the container div. The tiles will follow the container when it is moved and the game will not loose its place when tiles swap locations. (one tile is elected as blank, and tiles, one to left, right, top or bottm, with game content, will swap location with blank when clicked) Sample posted at http://www.jekillen.com/jekillen/con...e_dev_ALT.html Hi, Im having a weird issue... I am using position absolute to stick a table header to the top of a div. In the screenshot, under the menu is a div, the buttons and drop downs are at the "top" and grid starts from half way down, now when user scrolls till header is out of view i show the header at the "top" with position absolute. then when user scrolls back down and onto original position the buttons and drop downs are now again at the top exactly at the position where the header was shown, once the header has been shown all the buttons and the drop down are no longer clickable, i.e. there is no reaction, no dropdown shown and no click... whats happening is that IE is thinking that that area at the top where the header was is now invalid, or still occupied by the header or something like that? Its like the buttons and drop downs are kind of "behind" the area where the header was therefore nothing is clickable... And proof of this is that i gave some <BR> spacing to the buttons and drop downs so that they are not at the up most, but halfway down... and things work fine... whats IE up to? or is there some coding i need to do... below is the code for the header to float [it may be coz when the header is not to be shown i set the position to ' ', but i have tried with relative, fixed and static as well to no avail...] Code: <script language="javascript" type="text/javascript"> var floating_header = function() { this.header = document.getElementsByTagName('THEAD')[0].getElementsByTagName('TR')[0]; this.getXY = function(o) { var y = 0; var x = 0; while (o != null) { y += o.offsetTop; x += o.offsetLeft; o = o.offsetParent; } return { "x": x, "y": y }; } this.setheader = function() { if (window.header == undefined) { floating_header(); } var screenpos = this.scrollTop; var theady_max = window.getXY(window.table_obj.getElementsByTagName('THEAD')[0]).y + window.table_obj.offsetHeight; if (screenpos > window.theady - 100 && screenpos < theady_max) { window.header.style.position = 'absolute'; window.header.style.top = this.offsetTop; window.header.style.display = 'block'; window.headerOffsetTop = this.offsetTop; } else { if (screenpos != undefined && window.header != undefined) { window.header.style.position = ''; window.header.style.top = ''; window.headerOffsetTop = undefined; window.header = undefined; } else { if (window.headerOffsetTop) { window.header.style.position = 'absolute'; window.header.style.top = window.headerOffsetTop; window.header.style.display = 'block'; } } } } document.getElementById("divcn").onscroll = this.setheader; this.table_obj = document.getElementsByTagName('THEAD')[0].parentNode; this.theady = this.getXY(this.table_obj.getElementsByTagName('THEAD')[0]).y; }; floating_header(); </script> Need a little help with the final code on my project. I'm multiplying 3 drop downs to give me a total sq ft. I then want to take that variable and multiply it by a fixed number. i.e. qty*width*length equals a total of 8 sq ft, then take that 8 and multiply it by a fixed number (8*1.75), I want it to calculate without any submit buttons and show the total sq ft and the final value. thanks in advance for any assistance. Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=unicode"> <form> <meta content="MSHTML 6.00.2900.5921" name="GENERATOR"></head> <body><strong>Quantity:</strong> <select id="qty" onchange="Calculate();" size="1" name=qty><option value="1" selected>1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value=5>5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value=10>10</option> <\SELECT></select> <strong>Banner Width:</strong> <select id="height" onchange="Calculate();" size="1" name=height><option value="2" selected>2</option> <option value="3">3</option> <option value="4">4</option> <\SELECT></select> <strong>Banner Length:</strong> <select id="length" onchange="Calculate();" size="1" name="length"><option value="4" selected>4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <\SELECT></select> <strong>Total sq ft: <font size=4><label id="lblRes"><!-- a Label to locate result in it -->8 </label></form></font></span></span></font> <p></p></span></span></font></font></strong> <div></div> <script language="javascript"> function Calculate() { var h = document.getElementById('height').value; var l = document.getElementById('length').value; var q = document.getElementById('qty').value; var result = h * l * q; document.getElementById('lblRes').innerHTML = result; } </script> </font></strong></body></html> First I would like to thank you for taking the time out to help me out with my problem, I really appreciate it. I am trying to make my fixed div scroll on the top right of the page at all times BUT it needs to stay below the menu/header. Here is what I have so far ( no javascript ) http://www.dead-game.com/pom/test.html I want it to function exactly like http://www.dead-game.com/pom/index.html Any help would be GREATLY appreciated Thank you very much! Background on my task: My page accepts a url with various parameters passed in querystring. One of the parameter is the URL of the Image I wish to display on the page. I save this URL in a variable "imagesource" To ensure the image is not bigger than the size permitted, I use image object to get the height and width of the image. Now here's my code: function foo(){ ...... var imagesource = URL of the image; .... var newImg = new Image(); newImg.src = imagesource; var height = newImg.height; var width = newImg.width; .... } Now, say if, imagesource = http://www.yourwebsite.com/yourimage.jpg I expect newimage.src to be http://www.yourwebsite.com/yourimage.jpg But I get newimage.src = http://www.mywebsite.com/http://www.yourwebsite.com/yourimage.jpg Browser in use : IE 8 (if it matters in this case) Am I wrong in my assumption to begin with? Hi, So here is my ordeal. I have an image that when a user clicks, a textarea should show up at the click. I specify textarea style top and left in javascript. On Firefox this works fine, but in Internet Explorer (IE) the textarea is created right before the image instead of on top of the image. It is like that it just ignored the top and left positions. Also, users can query the database to show all the (mouse clicked) textareas that were created on the image. I coded this using PHP and a bunch of echo's. For some reason, the PHP code works with the CSS styles top and left specified meaning the textareas show up fine on top of the image. But creating a brand new textarea with a mouse click in javascript is not working. Can someone help me figure out what I'm doing wrong for IE? Thanks! Here is the javascript (does not work in IE, works in FF): Code: function createTextArea(e){ getMouseCoords(e);//sets posy, posx var newDiv= document.createElement("textarea"); newDiv.setAttribute("name","comment[]"); newDiv.style.visibility="visible"; newDiv.style.top= (posy) +'px'; newDiv.style.left= (posx) +'px'; newDiv.style.overflow="hidden"; // append to the document FORM var form=getTagFromArray("form","commentform"); form.appendChild(newDiv); } HTML that calls javascript: Code: <img id="theImage" src="random.gif" border=1 onclick="createTextarea(event);"> Here is the php when I load the textareas from the database (works in both IE & FF): Code: //get data from database //forloop for each textarea saved in database echo "<textarea name=\"comment[]\" style=\"top:".($locy)."px;left:" .($locx)."px;overflow:hidden;visibility:hidden;\" >".$row['comment']."</textarea>"; //end forloop I have an essoteric question about javascript and how DOM/javascript stores divs that are created and displayed in succession by absolute positioning. I have a series of divs that are assigned absolute top and left values to form a grid. The grid tiles are programmed to swap coordinates in pairs when one of the pairs is clicked. Then if I do a sampling of the divs by: Code: //returns the same string on every call. //regardless of the coordinate values. which change var GM = document.getElementById('TP'); if(GM.hasChildNodes) { var GMC = GM.getElementsByTagName('div'); var str = ''; for(i = 0; i < GMC.length; i++) { if(GMC[i].hasChildNodes) { for(var j = 0; j < GMC[i].childNodes.length; j++) { var gmc = GMC[i].childNodes[j]; var gmcTxt = gmc.childNodes[0].data; str += gmcTxt; } } } } alert(str); The list does not represent the positions of the divs as they appear in the browser, but in a sequence that is saved in another array when the divs are created. The same is true for document.getElementById('[id assigned each div]') The only way to detect the sequence is to do a long drawn out loop looking for coordinate values, and comparing them to a prestablish template set of values, then looping back through to compare the contents of each div and decide if they are in the right place (visually). The problem is that some divs may have the same content. If the same content appears to be in the right place, the coordinates can be wrong. So I need to detect the content and decide if it is right, regard- less of the coordinates. This has to be done by the program (of course). So the question is: What is javascript doing when it is asked to Code: document.getElementByTagName('[elem]'); In this case are the divs children of the document? (in the case of my project, children of a container div) And why would they not be detected in the order apparent in the browser window? I will post the current version and return and post a reply with the url. http://www.jekillen.com/jekillen/con..._wise_dev.html There are 2 images, and 2 locations, lets named it img1, img2, loc1, and loc2. What im trying to do is drag and drop img1 to loc1, which mean i don't want img1 to be drop in loc2, i want the specific image drop on specific location. Code: function dropIn(evt) { var root = document.getElementsByTagName("body")[0]; evt.preventDefault(); var id = evt.dataTransfer.getData("text"); if(ev.target.getAttribute('data-drop') == id) ev.target.appendChild(document.getElementById(id)); } <div id="box1" style="position: absolute; top: 220px; left: 220px;" ondragover="dragIn();" ondrop="dropIn();" > <img id="img1" class="resize" src="wreck.jpg" ondragstart="dragBegin()" draggable="true" style="cursor:move;"/></div> <div id="loc1" data-drop="img1" style="border:1px solid black; position:absolute; left:400px; top:150px; width:160px; height:200px;"ondragover="dragIn();" ondrop="dropIn();" ></div> <div id="box2" style="position: absolute; top: 220px; left: 300px;" ondragover="dragIn();" ondrop="dropIn();" > <img id="img2" class="resize" src="nah.jpg" ondragstart="dragBegin()" draggable="true" style="cursor:move;"/></div> <div id="loc2" data-drop="img2" style="border:1px solid black; position:absolute; left:560px; top:150px; width:160px; height:200px;"ondragover="dragIn();" ondrop="dropIn();" ></div> so far the code above allow me to achieve what i want, but its not perfect, when i drop img1 to loc2, it did nothing. What i really want is when i drop img1 to loc2, the img1 is still dropped on the loc1. No matter where the img1 will be drop by user, the result of img1 will still be dropped on loc1, and same goes to img2, it will always be dropped on the loc2. I tried this but its not working Code: if(evt.target.getAttribute('data-drop') == id){ evt.target.appendChild(document.getElementById(id)); } else{ evt.target.appendChild(document.getElementsByAttribute('data-drop')); } is there any soloution for me? Thanks alot FIXED Hi, I'm trying to this script: http://www.lukescoates.com/designs/plusimageviewer.js to display an enlarged image when a thumbnail is clicked - the page in question is: http://lukescoates.com/designs/portfolio.php. It seems to be working for the most part, however, when I first load the page, sometimes the "View Full Image" buttons don't align with the images, they bulk up together: http://screencast.com/t/r1cauKx6X When I reload the page, they align properly. The next problem is that when I first click on the "View Full Image", the popup is not centered on the page: http://screencast.com/t/4LYou1WfXXJ If I click it a second time, it centers perfectly. Any suggestions? The CSS also associated with this is: http://lukescoates.com/designs/plusimageviewer.css Really appreciate any help! Luke FIXED |