Posted: July 9th, 2010 | Author: joey | Filed under: Geeky, Web Development | Tags: apache, server, webdev | No Comments »
The following steps will help you setup a virtual domain on apache 2.2 on Windows. Steps are very similar for OS X, only the location of the files will change.
In these steps I’ve used cowabunga.localhost as a test. The .localhost TLD is reserved for testing, so you can be guaranteed it won’t interfere with any real websites. This is the best practice to follow, if you create a virtual host of cowabunga.com, you will not be able to reach the real version of that site.
- Edit httpd.conf
- Uncomment the line Include conf/extra/httpd-vhosts.conf. Right after # Virtual hosts
- Add the following above # Virtual hosts (replace C:\www with the path to your web root). Close and save it when done.
<Directory "C:/www">
Order Deny,Allow
Allow from all
</Directory>
- We’ll setup the follow virtual host site.
- cowabunga (C:\www\cowabunga). We’ll access this in the browser as cowabunga.localhost.
- Edit httpd-vhosts.conf (located in apache root/conf/etc/)
- Add the following to the bottom of httpd-vhosts.conf. Close and save it when done.
<VirtualHost *:80>
DocumentRoot "C:/www/cowabunga"
ServerName cowagunga.localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/www/"
ServerName localhost
</VirtualHost>
- That’s it for apache configuration. It’s now ready to host the virtual domain. We just need to tell Windows to go to our virtual host, rather than looking up the DNS.
- Edit your “hosts” file. Available in one of the following places
- Windows 95, 98, ME: Windows directory
- NT, 2000, XP, 2003, Vista, 7: Windows folder\system32\drivers\etc\
- Mac OS X, iOS: /private/etc/hosts or /etc/hosts
- Add the following line to the end of hosts. Close and save it when done.
127.0.0.1 burgess.localhost
127.0.0.1 localhost
- Restart apache from the GUI or the command prompt using:
apache -w -n "Apache" -k restart
Posted: July 8th, 2010 | Author: joey | Filed under: Web Development | Tags: code, javascript, webdev | No Comments »
Usually, I’m a big fan of UI libraries like jQuery and YUI. Don’t really like to re-invent the wheel. This is a function that’s quite easy to do in either of those libraries.
Unfortunately, I’m working on a project right now with very strict guidelines on it’s code, so it turns out I am unable to use any JavaScript UI Libraries. So, I set forth on putting this together.
There were a few resources I used that came in handy to create this, and I’ve given credit to those folk at the end of this post.
Part one: setInternalLinks
Run this function on page load. I use Simon Willison’s addLoadEvent to do this. It will search for all internal links on your page, and add a click listener to the animation function scrollToYOffset.
/**
* setInternalLinks
* Searches the page for any internal links and converts them to animated automatic scrolls
*/
function setInternalLinks()
{
// grab all anchor links on the page
var anchors = document.getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++) {
var a = anchors[i];
if (a.href && a.href.indexOf("#") != -1 // href has #
&& ((a.pathname == location.pathname) || ('/' + a.pathname == location.pathname)) // path name of url is same as current
&& (a.search == location.search)) { // query string of url is same as current
var aName = a.href.substr(1, a.href.length - 1);
a.onclick = function (e) {
// checks if the caller event e exists and grabs the target (mozilla + webkit). Grabs the IE equivalent if not.
var target = e ? e.target : event.srcElement;
// the anchor name
var anchorName = target.hash;
// cut out the hash mark
anchorName = anchorName.substr(1, anchorName.length - 1);
// grab all the anchors on the page again
anchors = document.getElementsByTagName('a');
for (var j = 0; j < anchors.length; j++) {
if (anchors[j].name == anchorName) {
// found the right anchor. scroll to it!
scrollToYOffset(anchors[j].offsetTop);
}
}
};
}
}
} |
Part two: scrollToYOffset
The method below is called by an onclick handler added by the setInternalLinks method. It’s a time-based animation with sinusoidal easing. Smooth and quick.
/**
* scrollToOffset
*
* @param yOffset The vertical offset to scroll to
*/
function scrollToYOffset(iTargetY)
{
// if the target is negative set it to 0
iTargetY = iTargetY < 0 ? 0 : iTargetY;
var frameInterval = 20; // 20 milliseconds per frame
var totalTime = 750;
// current scroll position: checks if window.pageYOffset exists (webkit + mozilla). If not, set's it to the IE equivalent
var startY = window.pageYOffset ? window.pageYOffset : window.document.body.scrollTop;
var d = iTargetY - startY; // total distance to scroll
var freq = Math.PI / (2 * totalTime); // frequency
var startTime = new Date().getTime();
var tmr = setInterval(
function () {
// check the time that has passed from the last frame
var elapsedTime = new Date().getTime() - startTime;
if (elapsedTime < totalTime) { // are we there yet?
var f = Math.abs(Math.sin(elapsedTime * freq));
window.scrollTo(0, Math.round(f*d) + startY);
} else {
clearInterval(tmr);
window.scrollTo(0, iTargetY);
}
}
, frameInterval);
} |
Above code has been tested in Firefox 3.6.6, Safari 5 and IE 7.
Credit for some help: Sitepoint: Make Internal Links Scroll Smothly with JavaScript and Cross-Browser.com: Animation Techniques