Scrolling fun and games with jQuery
June 17th, 2014
Parallax scrolling has been popular for some years now. Watch the nearer clouds scroll faster than the ones in the distance! But the technique has its uses.
Fixed navigation
Several sites respond to scrolling actions in creative and useful ways. For example, ABCNews removes the full navigation bar after the user scrolls it out of view, replacing it with a more compact version.
I've used the same fixed-but-responsive navigation pattern on this site. While developing it, I discovered that responding to the scroll event is sufficiently complicated to warrant a third-party library. I settled on skrollr, which works reasonably well.
Taking it further
Having gotten up to speed on the scroll event, I then wondered about other scrolling-related events that might be worth paying attention to. How about an easy way to detect if scroll bars are present? It would be nice to compensate for the slight leftward jog triggered by going from a non-scrolling page to a scrolling one. And how about detecting if the page is scrolled? That would be useful for making a "back to top" link appear. Rather than dealing with skrollr and its ilk, I wanted to find the simplest possible way to respond to the presence of these conditions.
JavaScript, of course, can easily detect both of these, either directly or indirectly. From there, it’s a short step to writing a Modernizr-style function. Start by assuming that the page isn’t scrolled in either direction, and doesn’t have scrollbars in either direction, and insert the appropriate classes on the <html>
tag: no-scroll
, no-vertical-scroll
, no-horizontal-scroll
, not-scrolled
, etc. Run the various tests, and remove and replace the appropriate classes: vertical-scroll
replaces no-vertical-scroll
, and so on.
The minified version is only 953B (see Downloads, below), so you should just paste it into your main JavaScript file. Assuming you've already called jQuery, you simply call it as follows:
$('html').add_scroll_classes();
Note that you should call this function not only on $(document).ready()
, but also on $(document).resize()
and on $(window).scroll()
. Use it in your CSS per this simplified example:
.not-scrolled-vertically .widget {
display: none;
}
.scrolled-vertically .widget {
display: block;
}
Downloads
Download the example code.
$jslibfiles: Array
(
[0] => lightbox
)
$js_list_this: Array
(
[0] => lightbox
)
$js_list: Array
(
[0] => lightbox
)
$ie_conditional_values: Array
(
)
$js_lib_files: Array
(
[jquery] => jquery-1.4.2.js
[lightbox] => jquery.lightbox.min.js
[equalcols] => jquery.equalizecols.js
[opacity] => jquery.opaqueChildren.js
[pngfix] => jquery.pngFix.js
[jloader] => jquery.jloader.js
[swfobject] => jquery.swfobject.1-0-7.js
[obfuscate] => jquery.obfuscate.js
[csstarget] => csstarget.js
[cycle] => jquery.cycle.js
[popupwindow] => jquery.popupWindow.js
[tablesorter] => jquery.tablesorter.js
[validate] => jquery.validate.min.js
[additional-methods] => additional-methods.min.js
[snowfall] => snowfall.js
[snowfall-standard] => snowfall-standard.js
[snowfall-jquery] => snowfall-jquery.min.js
[cdelaney] => cdelaney.js
)
$GLOBALS[js_lib_files]: Array
(
[jquery] => jquery-1.4.2.js
[lightbox] => jquery.lightbox.min.js
[equalcols] => jquery.equalizecols.js
[opacity] => jquery.opaqueChildren.js
[pngfix] => jquery.pngFix.js
[jloader] => jquery.jloader.js
[swfobject] => jquery.swfobject.1-0-7.js
[obfuscate] => jquery.obfuscate.js
[csstarget] => csstarget.js
[cycle] => jquery.cycle.js
[popupwindow] => jquery.popupWindow.js
[tablesorter] => jquery.tablesorter.js
[validate] => jquery.validate.min.js
[additional-methods] => additional-methods.min.js
[snowfall] => snowfall.js
[snowfall-standard] => snowfall-standard.js
[snowfall-jquery] => snowfall-jquery.min.js
[cdelaney] => cdelaney.js
)
$GLOBALS: Array
(
[_GET] => Array
(
[q] => node/7
)
[_POST] => Array
(
)
[_COOKIE] => Array
(
)
[_FILES] => Array
(
)
[_SERVER] => Array
(
[PATH] => /usr/local/bin:/bin:/usr/bin
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_ENCODING] => br,gzip
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.5
[HTTP_CONNECTION] => Keep-Alive
[HTTP_HOST] => www.cdelaney.com
[HTTP_USER_AGENT] => CCBot/2.0 (https://commoncrawl.org/faq/)
[HTTP_IF_MODIFIED_SINCE] => Sun, 11 Jun 2023 00:48:57 GMT
[HTTP_X_HTTPS] => 1
[DOCUMENT_ROOT] => /home/cdelaney/public_html
[REMOTE_ADDR] => 3.239.59.31
[REMOTE_PORT] => 60540
[SERVER_ADDR] => 69.175.23.140
[SERVER_NAME] => www.cdelaney.com
[SERVER_ADMIN] => webmaster@cdelaney.com
[SERVER_PORT] => 443
[REQUEST_SCHEME] => https
[REQUEST_URI] => /blog/scrolling-fun-and-games-with-jquery
[REDIRECT_URL] => /blog/scrolling-fun-and-games-with-jquery
[REDIRECT_REQUEST_METHOD] => GET
[HTTPS] => on
[CRAWLER_USLEEP] => 1000
[CRAWLER_LOAD_LIMIT] => 5.2
[REWRITEBASE] => /
[DOCROOT] => /
[REDIRECT_STATUS] => 200
[SSL_PROTOCOL] => TLSv1.3
[SSL_CIPHER] => TLS_AES_256_GCM_SHA384
[SSL_CIPHER_USEKEYSIZE] => 256
[SSL_CIPHER_ALGKEYSIZE] => 256
[SCRIPT_FILENAME] => /home/cdelaney/public_html/index.php
[QUERY_STRING] =>
[SCRIPT_URI] => https://www.cdelaney.com/blog/scrolling-fun-and-games-with-jquery
[SCRIPT_URL] => /blog/scrolling-fun-and-games-with-jquery
[SCRIPT_NAME] => /index.php
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_SOFTWARE] => LiteSpeed
[REQUEST_METHOD] => GET
[X-LSCACHE] => on,crawler
[PHP_SELF] => /index.php
[REQUEST_TIME_FLOAT] => 1695719380.1917
[REQUEST_TIME] => 1695719380
[HTTP_REFERER] =>
)
[_REQUEST] => Array
(
)
[GLOBALS] => Array
*RECURSION*
[timers] => Array
(
[page] => Array
(
[start] => 1695719380.193
[count] => 1
)
)
[base_url] => https://www.cdelaney.com
[base_path] => /
[base_root] => https://www.cdelaney.com
[databases] => Array
(
[default] => Array
(
[default] => Array
(
[database] => cdelaney_drupal
[username] => cdelaney_drupal
[password] => fEvP2am948H6gXW
[host] => localhost
[port] =>
[driver] => mysql
[prefix] =>
)
)
)
[cookie_domain] => .cdelaney.com
[conf] => Array
(
[additional_settings__active_tab_article] => edit-submission
[additional_settings__active_tab_blog_post] => edit-comment
[admin_theme] => seven
[anonymous] => Anonymous
[block_cache] => 0
[cache] => 0
[cache_class_cache_ctools_css] => CToolsCssCache
[cache_lifetime] => 0
[clean_url] => 1
[comment_anonymous_article] => 0
[comment_anonymous_blog_post] => 0
[comment_article] => 2
[comment_blog_post] => 2
[comment_default_mode_article] => 1
[comment_default_mode_blog_post] => 1
[comment_default_per_page_article] => 50
[comment_default_per_page_blog_post] => 50
[comment_form_location_article] => 1
[comment_form_location_blog_post] => 1
[comment_page] => 0
[comment_preview_article] => 1
[comment_preview_blog_post] => 1
[comment_subject_field_article] => 1
[comment_subject_field_blog_post] => 1
[cron_key] => BxTmnswMhBVjyyTz7xvnXkXldJdGdHnIbulZv1Wtt0A
[cron_last] => 1695715511
[css_js_query_string] => qwdpjr
[ctools_last_cron] => 1695715511
[date_default_timezone] => America/Los_Angeles
[dblog_row_limit] => 1000
[devel_api_url] => api.drupal.org
[devel_error_handlers] => Array
(
[1] => 1
)
[devel_execution] => 5
[devel_krumo_skin] => default
[devel_node_access_debug_mode] => 0
[devel_node_access_user_ajax] => 0
[devel_page_alter] => 0
[devel_query_display] => 0
[devel_query_sort] => 0
[devel_raw_names] => 0
[devel_rebuild_theme_registry] => 0
[devel_redirect_page] => 0
[devel_themer_compress_temporary_files] => 1
[devel_themer_log] => 1
[devel_use_uncompressed_jquery] => 0
[devel_xhprof_directory] =>
[devel_xhprof_enabled] =>
[devel_xhprof_url] =>
[dev_mem] => 0
[dev_timer] => 0
[disqus_api_delete] => no_action
[disqus_api_update] => 0
[disqus_developer] => 0
[disqus_domain] => cdelaney-staging
[disqus_inherit_login] => 1
[disqus_localization] => 0
[disqus_location] => content_area
[disqus_logo] => 0
[disqus_nodetypes] => Array
(
[blog_post] => blog_post
[article] => 0
[page] => 0
)
[disqus_publickey] =>
[disqus_secretkey] =>
[disqus_sso] => 0
[disqus_useraccesstoken] =>
[disqus_use_site_logo] => 0
[disqus_weight] => 50
[drupal_css_cache_files] => Array
(
[823ba1006db72809515d2221cd02ec1075d7b49b0c07f49307b3a7930bfdd9e4] => public://css/css_xE-rWrJf-fncB6ztZfd2huxqgxu4WO-qwma6Xer30m4.css
[592db66916e1dd3416cbe95bcb34a5a68775eb0b7cf95e4c858671de35290cc9] => public://css/css_LS9OUalDR9-d_lCAvF3yUWjNU6yF8ZBm84jEPRvoyuQ.css
[8a825e498166e2f96644cb7801aa9341e14995a978bb1f94150a44a5ab9ea822] => public://css/css_gArAUcbPOGS20Rj3CC1Ph_2J692LtLqNviaNUAmk_Wg.css
[fdebd8c4e97db417b89428fa0b8a974a14f1bbd7140a4cfe3f3e4b1ac6c5b45b] => public://css/css_pM3nkkEl_kie3pqHjxbMgjbGhzOY9jPxBn2Mqs908Sg.css
[ebb3f433ad4107b1ac31e9d7de0f9a5d399040e9f82b6364211dcfaadea158c0] => public://css/css_Nv0ct-zkzztuah_LbaPFF8ZkdSEk-LxBtTWMm9mN_F8.css
[032d72e2b3124645b11e59c23005327dc2b450af6aaa6bf3cad34a6a65a9d774] => public://css/css_ZDWl28hdmeinIcKg-HMrN6uKD0nTMld5NlXLmm5MH2U.css
[3521ba8941554499c437dc29b9c106b98f4beaa0293c67fb2f4538ff4b556c5a] => public://css/css_m_bFP_03GECQzC9YNbt_swIp1n4LhCYOUNrt2hxy7Jk.css
[0666226298191fc38245120e07054538aa57ab48b579708564f3617e715b540f] => public://css/css_lswNdxDgNHf-P_Lzokk0k-NPRV2F3I9U9Mhkv6TiuVc.css
[ab52e82b13b45c0f8cd074c0a752854592a364a4db7a3144c741b02d7d42794b] => public://css/css_PGbJgHCUCBf4dg7K9Kt8aAwsApndP4GZ9RuToPy3-Fk.css
[6f0d17830124c9db2c06fb3976a017b9734bdb38fd307f0fca181bf314a69256] => public://css/css_tGCIIXn7twU9gc4BiEMVuBXN6nsdSwOjeHDAK-IXDWA.css
[65ee581e47f3fa6c6ad7d9c021aae3ab51269e7a47a27e11b956611681626cb2] => public://css/css_gtnXCHMNJErLF7rozM4J6Nv_etP7cu_Z1dfkJHOui_Q.css
[909af35150eb7139d06194ea5dea2b787c713a932e9cb63c8bb7931a655758dc] => public://css/css_5aUiVWbKsqFuoHALvw3IkbfsjdeDBC98c2Z7GrCGSyg.css
[f05494fc83c9c8e2c74180252d01c9ea50f347143d606c3ea4a216ea0f24ce6e] => public://css/css_BR3eb_ceEn8jEAv9rAj8_gjpfC6A1BpCm8JGn5sUfnY.css
[4a6c11ec8b1e484d0c98115a6ee9776d7e46d18f3ddb06fb1206ccf6a3a47782] => public://css/css_3ZeX6scv29Q9W6Bfiaf7vgV0xQF7IgT2cx5a4oG8ur4.css
[1994d8b7150d1c09340786784a5f1f938fb88c8462ce22d7477e668eb508bff0] => public://css/css_Oow34ATb_XaszZiGkdFAsUPU184thRaZLKLZIwN5Lbw.css
[fb99f59634ca50e0fba4e84e68023155e5b29a96985d8a76309ce0a0db1009a9] => public://css/css_q5ec_udOLdLV_onOkK1Eku0_z9QKGZqKQBJk_s1nj9k.css
[bda7f6b5c7d4d217da8c211753e7e6cded40d4482b29ab832cea08b425987db7] => public://css/css_JsNrhTrv96uO_ECAcja2-aAZgozGslyfksQWxmC7MjY.css
[4da1a49abda886fd43159e02a74346ec3d2b87ad18b19ea33aa5417fb272a94e] => public://css/css_vQ4lFmFNGA3ez0ifgYoERX5IWbPK-zlvj5_fKfwSMyI.css
[73a112543a0217285f9e8043d9c48234b0868f6f5127a40a84c2d6ca6d0e30d8] => public://css/css_-1qKftcmPYmFHNoDVkFPe4jutDpQvFDU6rdsd5Mfuto.css
[4de0c1fcda82e7e9c3804c03d0288c1209dd8bed145ffb49f2b46988c6a243ff] => public://css/css_3E_lU9AW-mJkoPj8ifdrJRdVNalgk9Sqp_MnsaMH6Ps.css
)
[drupal_http_request_fails] =>
[drupal_js_cache_files] => Array
(
[d5d0c864c1e2c5c8ecb33cfe74138a84c029ca735323ac2c2e4900b5aa80e15c] => public://js/js_yMSKTzBO0KmozyLwajzFOrrt_kto_9mtccAkb0rm7gc.js
[111d860265abe08204bdf363fb75e432b0104dd26ec9ad3853b748098098279b] => public://js/js_KCd8rbJYUruV1tRJnh4um34UYvyhlrSVCPR1jNko2h8.js
[6e7764b4689519eea37a753cec329408e6482036a776797fdc47269188a59d53] => public://js/js_CjgB5PIyklVqKRWqFwkp3KgnU0HxockOpAEL3e1jkdQ.js
[5a5773ec0d4cdd3579c4290589afe4bcd3d023e8db32f5287fdd0fc6ce06c12e] => public://js/js_-uQx0zVjW9KSa0FRBm_IuQEDDXM8iMTcyQUPCXtCSfo.js
[d73b2ad221e8f0cadec5188d4e7d9e15d6fffd23faed1998d379097398ff07b3] => public://js/js_zrRWKhIx4rRMPEy3buhYepP5lIl0v_epHqDgC47NEtE.js
[06855983a4d9db9e23766ab3a1b69320a2808eed22b59231143193e018312442] => public://js/js_PtzyVeGAT46uZ0lMVgHBLuHKs_uMkpYepbM-OzexvSI.js
[972adc27bdddfd25dd31a30d3d68ff819df8274e546405cfe0fc25a30e91ea4b] => public://js/js_xkNJAsxwivLkU0oHKFDq0WWS98raDZFJtIqyf_bX3h8.js
[cb7ab45f9cbbb0d92cbb136293bd20ad079d066e1a3514e9ad110981b06691c1] => public://js/js_38VWQ3jjQx0wRFj7gkntZr077GgJoGn5nv3v05IeLLo.js
[05f1026dc8d520145ea1fec3b18b580cf860bc9b9185eabce8dce8510daa99bb] => public://js/js_PFdoTZ5D701F0dI0ZX-q11hiM8aly95BjvzgvC7jWrk.js
[0fa1ad633e9553c209aae99ee217fb856d92b3d958431b6e4bb2c690bb8244ef] => public://js/js__jX-421-4YklcScNZwKdLnfLkyOwmcfNfn3Flk4LXJU.js
[1a30c351624a627553d78983ad986922fa2576d2391858497e3ca6bb022b6015] => public://js/js_CC-zfeuQHcDhFtVRuKW53h30TL7j_105J32Nz8b8R38.js
[1af6dc1f7e5d718cb7bf3c3e4c27c5a392efb399ea3db56b93c10f32f1f05473] => public://js/js_0XukeTChGgXCHSovVcM3xiCnbVBwa0fXACGPfo_pnP0.js
[290924b1ade61e1b54581f138826f07e6992ef71cd4778ee353dde95f7fe41ab] => public://js/js_l98f0r1XYfmIe3FnshqRzfDysmHNzkZXBIj8D8gO5JM.js
[031199fce268bdab1a55ea7c29b722aebde576b5bc9053614a997f1541093669] => public://js/js_VudkxYYwJJFPSxHnCwmxQ59Zejgp-5OVDMgR83Wnv4U.js
[04f0eb203d5f8adcffd66c8e3784567708dd13946df038849bed100eb3edbc7e] => public://js/js_YKbk9-kDSS-Tt-1JLrV-ROmEleKaEw_evc65yl_4U_0.js
[5ee79f9a3ae07627ef8f31f212a310dbb62ace80601d58e2ee3ec6c18462d508] => public://js/js_mMuSdRh5NeaBYvACFdfxYZFykbM62b1Ir0OkbP8m74A.js
[043fa6b738a3871698fa3a0c85b87c8eddd93ba0fad572adf5b19151f30398ed] => public://js/js_MRtcp-QQFNNvR2HH1o5B6z7sRKMM0wHClTmZ66zTYkg.js
[60d5213d6cceac6af9fa98a383122fcbacec2020dce32ad2d68ade9e558d0065] => public://js/js_tC5m6azM9m2bCqibaRzWxUPXPzbLNPOHloyZQS1gWQE.js
[4aaf154e1d88c882f9b44998b444a291e422e5f764d22e465a973f405d12632f] => public://js/js_do6acYw1EVQsluyfs5D5-Eds56R64JqtwJBVXafzI2g.js
[5df3e2f5197f6bc554fc8765bad8809b622e7e4eed12b82758257939c1e803ac] => public://js/js_l2dFYWhiKPGYqPcTVqeUaXzWkM9XCFJEJYwBtlHzQuY.js
[62b9d4e66f566de4661c6417c82b71885efcd5c19479ef160a1550817ef7c002] => public://js/js_qek3V4n_ppYl1XmZVyTLSE4r3TdFeTUGkjA1m2fAuVQ.js
[8fb2668cde4fdfe759d7dedbe96ba93d99d08fac0442ddd3b6792f903645d103] => public://js/js_0AGwY9Uj64s8IBzIZqKVeXRotXC8ohRppCzam6tqXUo.js
[ab370f121801863240a311896df746339307e6809aa2d560e0a9ccf206dad56e] => public://js/js_oEcLFi0M2hh-qfHl5gg3am2lDNWtsOhqKojkUVCUa5M.js
[ab825633a66c1131c2525d95d738171329fba852993dccf14838f0ada6242ff0] => public://js/js_IkgOrrVZK1UTp2HktvFi5vo1g7b25Muyr5GoySikuic.js
)
[drupal_private_key] => 4QCRTR8E0NeXW7BcITaA7dmJ_6X7Yc6L9KHQpkBo0MA
[email__active_tab] =>
[error_level] => 2
[feed_default_items] => 10
[feed_description] =>
[feed_item_length] => teaser
[field_bundle_settings_comment__comment_node_blog_post] => Array
(
[view_modes] => Array
(
[full] => Array
(
[custom_settings] =>
)
[token] => Array
(
[custom_settings] =>
)
)
[extra_fields] => Array
(
[form] => Array
(
)
[display] => Array
(
)
)
)
[field_bundle_settings_node__blog_post] => Array
(
[view_modes] => Array
(
[full] => Array
(
[custom_settings] => 1
)
[teaser] => Array
(
[custom_settings] => 1
)
[rss] => Array
(
[custom_settings] => 1
)
[search_index] => Array
(
[custom_settings] =>
)
[search_result] => Array
(
[custom_settings] =>
)
[token] => Array
(
[custom_settings] =>
)
[revision] => Array
(
[custom_settings] =>
)
)
[extra_fields] => Array
(
[form] => Array
(
[title] => Array
(
[weight] => 0
)
[path] => Array
(
[weight] => 1
)
)
[display] => Array
(
)
)
)
[field_bundle_settings_taxonomy_term__category] => Array
(
[view_modes] => Array
(
[full] => Array
(
[custom_settings] =>
)
[token] => Array
(
[custom_settings] =>
)
)
[extra_fields] => Array
(
[form] => Array
(
)
[display] => Array
(
[description] => Array
(
[default] => Array
(
[weight] => 0
[visible] => 1
)
)
)
)
)
[file_default_scheme] => public
[file_private_path] =>
[file_public_path] => sites/default/files
[file_temporary_path] => /home/cdelaney/tmp
[filter_fallback_format] => plain_text
[install_profile] => standard
[install_task] => done
[install_time] => 1379393810
[maintenance_mode] => 0
[maintenance_mode_message] => This site is currently under maintenance. We should be back shortly. Thank you for your patience.
[menu_expanded] => Array
(
)
[menu_masks] => Array
(
[0] => 501
[1] => 493
[2] => 250
[3] => 247
[4] => 246
[5] => 245
[6] => 126
[7] => 125
[8] => 124
[9] => 123
[10] => 122
[11] => 121
[12] => 117
[13] => 63
[14] => 62
[15] => 61
[16] => 60
[17] => 59
[18] => 58
[19] => 44
[20] => 31
[21] => 30
[22] => 29
[23] => 28
[24] => 24
[25] => 21
[26] => 15
[27] => 14
[28] => 13
[29] => 11
[30] => 7
[31] => 6
[32] => 5
[33] => 3
[34] => 2
[35] => 1
)
[menu_options_article] => Array
(
[0] => main-menu
)
[menu_options_blog_post] => Array
(
[0] => main-menu
)
[menu_parent_article] => main-menu:0
[menu_parent_blog_post] => main-menu:0
[mollom_log_minimum_severity] => 6
[node_admin_theme] => 1
[node_cron_last] => 1626246318
[node_options_article] => Array
(
[0] => status
[1] => promote
)
[node_options_blog_post] => Array
(
[0] => status
)
[node_options_page] => Array
(
[0] => status
)
[node_preview_article] => 1
[node_preview_blog_post] => 1
[node_submitted_article] => 1
[node_submitted_blog_post] => 1
[node_submitted_page] =>
[page_cache_maximum_age] => 0
[page_compression] => 1
[pathauto_blog_pattern] => blogs/[user:name]
[pathauto_case] => 1
[pathauto_forum_pattern] => [term:vocabulary]/[term:name]
[pathauto_ignore_words] =>
[pathauto_max_component_length] => 100
[pathauto_max_length] => 100
[pathauto_node_article_pattern] => article/[node:title]
[pathauto_node_blog_post_pattern] => blog/[node:title]
[pathauto_node_page_pattern] => page/[node:title]
[pathauto_node_pattern] => [node:title]
[pathauto_punctuation_ampersand] => 0
[pathauto_punctuation_asterisk] => 0
[pathauto_punctuation_at] => 0
[pathauto_punctuation_backtick] => 0
[pathauto_punctuation_back_slash] => 0
[pathauto_punctuation_caret] => 0
[pathauto_punctuation_colon] => 0
[pathauto_punctuation_comma] => 0
[pathauto_punctuation_dollar] => 0
[pathauto_punctuation_double_quotes] => 0
[pathauto_punctuation_equal] => 0
[pathauto_punctuation_exclamation] => 0
[pathauto_punctuation_greater_than] => 0
[pathauto_punctuation_hash] => 0
[pathauto_punctuation_hyphen] => 1
[pathauto_punctuation_left_curly] => 0
[pathauto_punctuation_left_parenthesis] => 0
[pathauto_punctuation_left_square] => 0
[pathauto_punctuation_less_than] => 0
[pathauto_punctuation_percent] => 0
[pathauto_punctuation_period] => 0
[pathauto_punctuation_pipe] => 0
[pathauto_punctuation_plus] => 0
[pathauto_punctuation_question_mark] => 0
[pathauto_punctuation_quotes] => 0
[pathauto_punctuation_right_curly] => 0
[pathauto_punctuation_right_parenthesis] => 0
[pathauto_punctuation_right_square] => 0
[pathauto_punctuation_semicolon] => 0
[pathauto_punctuation_slash] => 0
[pathauto_punctuation_tilde] => 0
[pathauto_punctuation_underscore] => 0
[pathauto_reduce_ascii] => 0
[pathauto_separator] => -
[pathauto_taxonomy_term_category_pattern] => category/[term:parents:join-path]/[term:name]
[pathauto_taxonomy_term_pattern] => [term:vocabulary]/[term:name]
[pathauto_taxonomy_term_tags_pattern] =>
[pathauto_transliterate] =>
[pathauto_update_action] => 2
[pathauto_user_pattern] => users/[user:name]
[pathauto_verbose] => 0
[path_alias_whitelist] => Array
(
[node] => 1
[taxonomy] => 1
[user] => 1
)
[preprocess_css] => 1
[preprocess_js] => 1
[save_continue_blog_post] => Save and add fields
[settings__active_tab] => edit-visibility
[site_default_country] => US
[site_mail] => web@cdelaney.com
[site_name] => Colm Delaney
[theme_cdelaney2013_settings] => Array
(
[toggle_logo] => 1
[toggle_name] => 1
[toggle_slogan] => 1
[toggle_node_user_picture] => 1
[toggle_comment_user_picture] => 1
[toggle_comment_user_verification] => 1
[toggle_favicon] => 1
[toggle_main_menu] => 1
[toggle_secondary_menu] => 1
[default_logo] => 1
[logo_path] =>
[logo_upload] =>
[default_favicon] => 0
[favicon_path] => images/favicon-01.png
[favicon_upload] =>
[scheme] => default
[palette] => Array
(
[top] => #0779bf
[bottom] => #48a9e4
[bg] => #ffffff
[sidebar] => #f6f6f2
[sidebarborders] => #f9f9f9
[footer] => #292929
[titleslogan] => #fffeff
[text] => #3b3b3b
[link] => #0071B3
)
[theme] => cdelaney2013
[info] => Array
(
[fields] => Array
(
[top] => Header top
[bottom] => Header bottom
[bg] => Main background
[sidebar] => Sidebar background
[sidebarborders] => Sidebar borders
[footer] => Footer background
[titleslogan] => Title and slogan
[text] => Text color
[link] => Link color
)
[schemes] => Array
(
[default] => Array
(
[title] => Blue Lagoon (default)
[colors] => Array
(
[top] => #0779bf
[bottom] => #48a9e4
[bg] => #ffffff
[sidebar] => #f6f6f2
[sidebarborders] => #f9f9f9
[footer] => #292929
[titleslogan] => #fffeff
[text] => #3b3b3b
[link] => #0071B3
)
)
[firehouse] => Array
(
[title] => Firehouse
[colors] => Array
(
[top] => #cd2d2d
[bottom] => #cf3535
[bg] => #ffffff
[sidebar] => #f1f4f0
[sidebarborders] => #ededed
[footer] => #1f1d1c
[titleslogan] => #fffeff
[text] => #3b3b3b
[link] => #d6121f
)
)
[ice] => Array
(
[title] => Ice
[colors] => Array
(
[top] => #d0d0d0
[bottom] => #c2c4c5
[bg] => #ffffff
[sidebar] => #ffffff
[sidebarborders] => #cccccc
[footer] => #24272c
[titleslogan] => #000000
[text] => #4a4a4a
[link] => #019dbf
)
)
[plum] => Array
(
[title] => Plum
[colors] => Array
(
[top] => #4c1c58
[bottom] => #593662
[bg] => #fffdf7
[sidebar] => #edede7
[sidebarborders] => #e7e7e7
[footer] => #2c2c28
[titleslogan] => #ffffff
[text] => #301313
[link] => #9d408d
)
)
[slate] => Array
(
[title] => Slate
[colors] => Array
(
[top] => #4a4a4a
[bottom] => #4e4e4e
[bg] => #ffffff
[sidebar] => #ffffff
[sidebarborders] => #d0d0d0
[footer] => #161617
[titleslogan] => #ffffff
[text] => #3b3b3b
[link] => #0073b6
)
)
[] => Array
(
[title] => Custom
[colors] => Array
(
)
)
)
[css] => Array
(
[0] => css/colors.css
)
[copy] => Array
(
[0] => logo.png
)
[gradients] => Array
(
[0] => Array
(
[dimension] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
)
[direction] => vertical
[colors] => Array
(
[0] => top
[1] => bottom
)
)
)
[fill] => Array
(
)
[slices] => Array
(
)
[blend_target] => #ffffff
[preview_css] => color/preview.css
[preview_js] => color/preview.js
[preview_html] => color/preview.html
[base_image] => color/base.png
)
[favicon_mimetype] => image/png
)
[theme_default] => cdelaney2013
[update_check_disabled] => 0
[update_check_frequency] => 7
[update_last_check] => 1695715512
[update_last_email_notification] => 1695543147
[update_notification_threshold] => security
[update_notify_emails] => Array
(
[0] => web@cdelaney.com
)
[user_admin_role] => 3
[user_cancel_method] => user_cancel_block
[user_email_verification] => 1
[user_mail_cancel_confirm_body] => [user:name],
A request to cancel your account has been made at [site:name].
You may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:
[user:cancel-url]
NOTE: The cancellation of your account is not reversible.
This link expires in one day and nothing will happen if it is not used.
-- [site:name] team
[user_mail_cancel_confirm_subject] => Account cancellation request for [user:name] at [site:name]
[user_mail_password_reset_body] => [user:name],
A request to reset the password for your account has been made at [site:name].
You may now log in by clicking this link or copying and pasting it to your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password. It expires after one day and nothing will happen if it's not used.
-- [site:name] team
[user_mail_password_reset_subject] => Replacement login information for [user:name] at [site:name]
[user_mail_register_admin_created_body] => [user:name],
A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password.
After setting your password, you will be able to log in at [site:login-url] in the future using:
username: [user:name]
password: Your password
-- [site:name] team
[user_mail_register_admin_created_subject] => An administrator created an account for you at [site:name]
[user_mail_register_no_approval_required_body] => [user:name],
Thank you for registering at [site:name]. You may now log in by clicking this link or copying and pasting it to your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password.
After setting your password, you will be able to log in at [site:login-url] in the future using:
username: [user:name]
password: Your password
-- [site:name] team
[user_mail_register_no_approval_required_subject] => Account details for [user:name] at [site:name]
[user_mail_register_pending_approval_body] => [user:name],
Thank you for registering at [site:name]. Your application for an account is currently pending approval. Once it has been approved, you will receive another e-mail containing information about how to log in, set your password, and other details.
-- [site:name] team
[user_mail_register_pending_approval_subject] => Account details for [user:name] at [site:name] (pending admin approval)
[user_mail_status_activated_body] => [user:name],
Your account at [site:name] has been activated.
You may now log in by clicking this link or copying and pasting it into your browser:
[user:one-time-login-url]
This link can only be used once to log in and will lead you to a page where you can set your password.
After setting your password, you will be able to log in at [site:login-url] in the future using:
username: [user:name]
password: Your password
-- [site:name] team
[user_mail_status_activated_notify] => 1
[user_mail_status_activated_subject] => Account details for [user:name] at [site:name] (approved)
[user_mail_status_blocked_body] => [user:name],
Your account on [site:name] has been blocked.
-- [site:name] team
[user_mail_status_blocked_notify] => 0
[user_mail_status_blocked_subject] => Account details for [user:name] at [site:name] (blocked)
[user_mail_status_canceled_body] => [user:name],
Your account on [site:name] has been canceled.
-- [site:name] team
[user_mail_status_canceled_notify] => 0
[user_mail_status_canceled_subject] => Account details for [user:name] at [site:name] (canceled)
[user_pictures] => 1
[user_picture_default] =>
[user_picture_dimensions] => 1024x1024
[user_picture_file_size] => 800
[user_picture_guidelines] =>
[user_picture_path] => pictures
[user_picture_style] => thumbnail
[user_register] => 0
[user_signatures] => 0
[views_defaults] => Array
(
[comments_recent] =>
)
[404_fast_paths_exclude] => /\/(?:styles)\//
[404_fast_paths] => /\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i
[404_fast_html] => 404 Not FoundNot Found
The requested URL "@path" was not found on this server.
)
[installed_profile] =>
[update_free_access] =>
[db_url] =>
[db_prefix] =>
[drupal_hash_salt] => xgnl9vW8fpMx7Pr5oSv8Hx6fSCehWlieeg0xAF3CCTA
[is_https] => 1
[base_secure_url] => https://www.cdelaney.com
[base_insecure_url] => http://www.cdelaney.com
[user] => stdClass Object
(
[uid] => 0
[hostname] => 3.239.59.31
[roles] => Array
(
[1] => anonymous user
)
[cache] => 0
)
[locks] => Array
(
)
[lazy_session] => 1
[language] => stdClass Object
(
[language] => en
[name] => English
[native] => English
[direction] => 0
[enabled] => 1
[plurals] => 0
[formula] =>
[domain] =>
[prefix] =>
[weight] => 0
[javascript] =>
[dir] => ltr
)
[language_content] => stdClass Object
(
[language] => en
[name] => English
[native] => English
[direction] => 0
[enabled] => 1
[plurals] => 0
[formula] =>
[domain] =>
[prefix] =>
[weight] => 0
[javascript] =>
[dir] => ltr
)
[language_url] => stdClass Object
(
[language] => en
[name] => English
[native] => English
[direction] => 0
[enabled] => 1
[plurals] => 0
[formula] =>
[domain] =>
[prefix] =>
[weight] => 0
[javascript] =>
[dir] => ltr
)
[multibyte] => 1
[theme] => cdelaney2013
[base_theme_info] => Array
(
)
[drupal_test_info] =>
[theme_key] => cdelaney2013
[theme_info] => stdClass Object
(
[filename] => sites/all/themes/cdelaney2013/cdelaney2013.info
[name] => cdelaney2013
[type] => theme
[owner] => themes/engines/phptemplate/phptemplate.engine
[status] => 1
[bootstrap] => 0
[schema_version] => -1
[weight] => 0
[info] => Array
(
[name] => Colm Delaney 2013
[description] => A simple theme, designed to integrate with an existing static site.
[core] => 7.x
[regions] => Array
(
[header] => Header
[help] => Help
[page_top] => Page top
[page_bottom] => Page bottom
[highlight] => Highlighted
[sidebar_first] => Sidebar first
[content] => Content
[sidebar_last] => Sidebar second
[footer] => Footer
[dashboard_main] => Dashboard (main)
[dashboard_sidebar] => Dashboard (sidebar)
[dashboard_inactive] => Dashboard (inactive)
)
[engine] => phptemplate
[features] => Array
(
[0] => logo
[1] => favicon
[2] => name
[3] => slogan
[4] => node_user_picture
[5] => comment_user_picture
[6] => comment_user_verification
[7] => main_menu
[8] => secondary_menu
)
[screenshot] => sites/all/themes/cdelaney2013/screenshot.png
[php] => 5.2.4
[stylesheets] => Array
(
)
[scripts] => Array
(
)
[mtime] => 1388095829
[overlay_regions] => Array
(
[0] => dashboard_main
[1] => dashboard_sidebar
[2] => dashboard_inactive
[3] => content
[4] => help
)
[regions_hidden] => Array
(
[0] => page_top
[1] => page_bottom
)
)
[prefix] => phptemplate
[engine] => phptemplate
)
[theme_engine] => phptemplate
[theme_path] => sites/all/themes/cdelaney2013
[_options] => Array
(
[custom_functions] => Array
(
[output_tag_meta_1] => custom_output_tag_meta_1
[output_tag_css_global] => custom_output_tag_css_global
[output_postamble] => custom_output_postamble
)
)
[js_lib_files] => Array
(
[jquery] => jquery-1.4.2.js
[lightbox] => jquery.lightbox.min.js
[equalcols] => jquery.equalizecols.js
[opacity] => jquery.opaqueChildren.js
[pngfix] => jquery.pngFix.js
[jloader] => jquery.jloader.js
[swfobject] => jquery.swfobject.1-0-7.js
[obfuscate] => jquery.obfuscate.js
[csstarget] => csstarget.js
[cycle] => jquery.cycle.js
[popupwindow] => jquery.popupWindow.js
[tablesorter] => jquery.tablesorter.js
[validate] => jquery.validate.min.js
[additional-methods] => additional-methods.min.js
[snowfall] => snowfall.js
[snowfall-standard] => snowfall-standard.js
[snowfall-jquery] => snowfall-jquery.min.js
[cdelaney] => cdelaney.js
)
[_testvar] => apricot
[_testvar2] =>
[_nav] => Array
(
[0] => Array
(
[link_label] => Home
[path] => /
[page_title] => Colm Delaney
[h1] =>
[menu] => Main, Utility
[slug] => home
[description] => Colm Delaney, based in Seattle, provides web design, development, and consulting services.
[path_edited] => /
[level] => 0
[has_children] =>
)
[1] => Array
(
[link_label] => About
[path] => /about/
[page_title] => About
[h1] => About
[menu] => Main, Utility, Footer
[slug] => about
[description] => Colm Delaney's background, educational and professional history, experience, and design philosophy.
[path_edited] => about/
[level] => 1
[has_children] =>
)
[2] => Array
(
[link_label] => Work
[path] => /work/
[page_title] => Work
[h1] => Work
[menu] => Main, Utility, Footer
[slug] => work
[description] => View selected examples of Colm Delaney's completed web projects, including case studies.
[path_edited] => work/
[level] => 1
[has_children] =>
)
[3] => Array
(
[link_label] => Blog
[path] => /blog/
[page_title] => Blog
[h1] => Blog
[menu] => Main
[slug] => blog
[description] =>
[path_edited] => blog/
[level] => 1
[has_children] =>
)
[4] => Array
(
[link_label] => Contact
[path] => /contact/
[page_title] => Contact
[h1] => Contact
[menu] => Main, Utility, Footer
[slug] => contact
[description] => Contact Colm Delaney by email, phone, mail, and social media.
[path_edited] => contact/
[level] => 1
[has_children] =>
)
[5] => Array
(
[link_label] => Other
[path] => /other/
[page_title] => Other
[h1] => Other
[menu] =>
[slug] => other
[description] =>
[path_edited] => other/
[level] => 1
[has_children] =>
)
[6] => Array
(
[link_label] => Template
[path] => /template/
[page_title] => Template
[h1] => Template
[menu] =>
[slug] => template
[description] =>
[path_edited] => template/
[level] => 1
[has_children] =>
)
)
[_breadcrumbs] => Array
(
)
[_test] =>
[_page_data] => Array
(
[id] => blog-scrolling-fun-and-games-with-jquery
[page_title] => Blog
[h1] =>
[parent_slug] => blog
[class_string] => blog
[level] => 1
[meta_description_edited] =>
)
)
https://cdn.cdelaney.com/js/cdelaney.js is a CDN URL
live
/
$fileurl_equivalent: /js/cdelaney.js