If you have any question left, please drop a note with the discussion link of this page.
JavaScript Product Carrousel
From Wiki.zanox.com
This is a more complex example to show how to access the zanox Product Search Web Services and how to present the results. See the Live example in our blog.
Screenshot
Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>zanox Product Carrousel</title> <script type="text/javascript">
var zxContainer = document.getElementById('zxContainer'); var applicationid = 'BE94C4947839E8AB4D67'; var apversion = '2009-02-01'; var adspace = null; var region = 'de'; var programs = '660'; var category = '20000' // http://wiki.zanox.com/en/ProductCategories; var page = '0'; var items = '10'; var minPrice = '10'; var maxPrice = '100000'; var searchString = "When someone thinks of 80’s fashion, they usually conjure up images of big hair, puffy Tutu dresses and members-only jackets. Those styles don’t seem to be cool anymore, but Jeremy Ridgeway wants you to see 80’s fashion in a new and fresh way."; var NamLen = '66'; var DesLen = '160'; var pagesize = '1'; var wdgName = 'zanox Product Carrousel'; var wdgTable; var wdgTbody; var xmlhttp; var productItems; var a = 0; var f_w = 370; var f_h = 100; var f_cx = 0; var f_cy = 0; var r = 100; var ry = 0.0; var init_i = 0; var to_draw = 0; var to_rec = 0; var bMouseDown = 0; var img_w = 80; var img_h = 60; var stre = 0.0; var alpha0 = 0.0; var intervalHandler; var tmp = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0; if(tmp) var isIE = document.namespaces ? 1 : 0; function search_input_keydown(e){ if (null == e) e = window.event ; if (e.keyCode == 13) { searching(); } } function searching(){ searchString = document.getElementById('search_input').value; var zxAdList = document.getElementById('zxAdList'); y=document.getElementById('Widget1'); zxAdList.removeChild(y); zxContextMatch(apversion, applicationid, adspace, region, programs, category, minPrice, maxPrice, page, items, searchString, 'productSearchResponseHandler'); } function addScript(url) { var script = document.createElement("script"); script.src = url + '&t=' + new Date().getMinutes(); script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); } function zxContextMatch(apversion, applicationid, adspace, region, programs, category, minPrice, maxPrice, page, items, q, callback) { var url = 'http://api.zanox.com/json/' + apversion + '/products?applicationid=' + applicationid; if (adspace) url += '&adspace=' + adspace; if (region) url += '®ion=' + region; if (programs) url += '&programs=' + programs; if (category) url += '&category=' + category; if (page) url += '&page=' + page; if (items) url += '&items=' + items; if (minPrice) url += '&minPrice=' + minPrice; if (maxPrice) url += '&maxPrice=' + maxPrice; if (callback) url += '&callback=' + callback; if (q) url += '&q=' + q; addScript(url); var zxAdList = document.getElementById('zxAdList'); wdgTable = document.createElement("table"); wdgTable.id = 'Widget1'; if (window.ActiveXObject) {// code for IE5, IE6 wdgTable.style.borderCollapse="collapse"; } zxAdList.appendChild(wdgTable); wdgTbody = document.createElement("tbody"); wdgTbody.id = 'tbd'; wdgTable.appendChild(wdgTbody); var tr1 = document.createElement("tr"); tr1.id = 'trid2'; var td1 = document.createElement("td"); td1.id = 'tdid_s'; tr1.appendChild(td1); var td2 = document.createElement("td"); td2.id = 'tdid_p1x'; tr1.appendChild(td2); td3 = document.createElement("td"); td3.id = 'tdid_wgdTitle'; td3.innerHTML = wdgName; tr1.appendChild(td3); var td4 = document.createElement("td"); td4.id = 'tdid_p1x'; tr1.appendChild(td4); var td5 = document.createElement("td"); td5.id = 'tdid_s'; tr1.appendChild(td5); wdgTbody.appendChild(tr1); var tr2 = document.createElement("tr"); tr2.id = 'trid4'; var td21 = document.createElement("td"); td21.id = 'tdid_s'; tr2.appendChild(td21); var td22 = document.createElement("td"); td22.id = 'tdid_p'; tr2.appendChild(td22); td23 = document.createElement("td"); td23.id = 'tdid_search'; tdTable = document.createElement("table"); td23.appendChild(tdTable); tdTbody = document.createElement("tbody"); tdTbody.id = 'tbd1'; tdTable.appendChild(tdTbody); tdtr = document.createElement("tr"); tdtr.id = 'tdtr_search'; tdtr_td1 = document.createElement("td"); tdtr_td1.innerHTML = '<input id = "search_input" autocomplete="off" maxlength=1024 name="search_input" onkeydown = "search_input_keydown(event);" size=42 title="search" value="' + searchString +'">'; tdtr.appendChild(tdtr_td1); tdtr_td2 = document.createElement("td"); tdtr_td2.innerHTML = '<div class="lbl1" onmousedown="searching();" > >> </div>'; tdtr.appendChild(tdtr_td2); tdtr_td3 = document.createElement("td"); tdtr_td3.innerHTML = '<div class="lbl2" onmousedown="searching();" >Search </div>'; tdtr.appendChild(tdtr_td3); tdTbody.appendChild(tdtr); tr2.appendChild(td23); var td24 = document.createElement("td"); td24.id = 'tdid_p'; tr2.appendChild(td24); var td25 = document.createElement("td"); td25.id = 'tdid_s'; tr2.appendChild(td25); wdgTbody.appendChild(tr2); var tr3 = document.createElement("tr"); tr3.id = 'trid3'; var td31 = document.createElement("td"); td31.id = 'tdids_line'; var td32 = document.createElement("td"); td32.id = 'tdid_p1'; var td33 = document.createElement("td"); td33.id = 'tdid_m'; var td34 = document.createElement("td"); td34.id = 'tdid_p1'; var td35 = document.createElement("td"); td35.id = 'tdids_line'; tr3.appendChild(td31); tr3.appendChild(td32); tr3.appendChild(td33); tr3.appendChild(td34); tr3.appendChild(td35); wdgTbody.appendChild(tr3); } function frame_onmousemove(e){ if (to_rec == 1){ var minx = f_w; if (null == e) e = window.event ; td_pics_onmouseup(e); to_rec = 0; } } function td_pics_onmousemove(e){ if (null == e) e = window.event ; a = e.clientX - f_cx ; to_draw = 1; } function draw_pics( ) { if (to_draw == 0) return; if (a>r){ a = r;} else if (a<-r){ a = -r; } alpha0 = alpha0 + 0.01; var alpha = alpha0; for (var i = 0; i < productItems.length ; i++){ if (bMouseDown == 0) { alpha = alpha + Math.PI * 2 /productItems.length; }else{ alpha = (parseInt(i) * Math.PI * 2 /productItems.length ) + Math.asin(a/r); } x = r * Math.sin(alpha) + f_cx; y = ry * Math.cos(alpha) + f_cy; if (bMouseDown == 0) {j = i; } else{ j = ( init_i + i ) % productItems.length; } s = document.getElementById('pic' + j).style; s1 = document.getElementById('img' + j); s.left = Math.round(x) + 'px'; s.top = Math.round(y) - parseInt(img_h)/2 + 'px'; s1.height = img_h * (1 - (f_cy + ry - y)/(2*ry) * 0.4); s1.width = img_w * (1 - (f_cy + ry - y)/(2*ry) * 0.4); s.zIndex = Math.round(y) ; } to_rec = 1; } function showinfo(Name, link, Des, Prog, Price){ var x = document.getElementById("tdid_name"); x.innerHTML = '<a href="' + link + '">' + Name + '</a>'; x = document.getElementById("tdid_des"); x.innerHTML = (Des!='undefined') ? Des : ''; x = document.getElementById("tdid_prog"); x.innerHTML = Prog; x = document.getElementById("tdid_price"); x.innerHTML = Price; } function td_pics_onmousedown(e){ bMouseDown = 1; var minx = f_w; if (null == e) e = window.event ; for (var i = 0; i < productItems.length ; i++){ var t; s = document.getElementById('pic' + i); t = s.offsetLeft - e.clientX ; t = Math.abs(t); if ( t < minx ){ minx = t ; init_i = i; } } } function td_pics_onmouseup(e){ bMouseDown = 0; s = document.getElementById('pic0'); alpha0 = Math.asin((s.offsetLeft - f_cx)/r); if ( s.offsetTop < f_cy ){ alpha0 = Math.PI - alpha0; } } function showpagenum(current,thereisoldone){ var pgNum=0; var where = document.getElementById('trid3'); var tr1 = document.createElement("tr"); tr1.id = 'trid1'; var td11 = document.createElement("td"); td11.id = 'tdid_s'; var td12 = document.createElement("td"); td12.id = 'tdid_p'; td12.onmousemove = frame_onmousemove; var td15 = document.createElement("td"); td15.id = 'tdid_pics_c'; td15.onmousemove = td_pics_onmousemove; td15.onmousedown = td_pics_onmousedown; td15.onmouseup = td_pics_onmouseup; var td16 = document.createElement("td"); td16.id = 'tdid_p'; td16.onmousemove = frame_onmousemove; var td17 = document.createElement("td"); td17.id = 'tdid_s'; tr1.appendChild(td11); tr1.appendChild(td12); tr1.appendChild(td15); tr1.appendChild(td16); tr1.appendChild(td17); wdgTbody.insertBefore(tr1, where); f_w = td15.offsetWidth - img_w; f_h = td15.offsetHeight - img_h; f_cx = td15.offsetLeft + parseInt(td15.offsetWidth)/2; f_cy = td15.offsetTop + parseInt(td15.offsetHeight)/2; r = f_w /2 ; stre = f_h / f_w; ry = r * stre * 0.5; for (var i = 0; i < productItems.length; i++) { var productItem = productItems[i]; var link = ''; if (productItem.url.adspace instanceof Array) { link = productItem.url.adspace[0].$; } else { link = productItem.url.adspace.$; } var imgl try{ imgl = productItem.image.small; }catch(er){ } div1 = document.createElement("div"); div1.id = 'pic' + i; div1.style.position = "absolute"; var strLink = new String(link); var strName = new String(productItem.name); if (strName.length>NamLen){ strName = strName.substring(0,NamLen); } var strDes = new String(productItem.description); if (strDes.length > DesLen){ strDes = strDes.substring(0,DesLen); } var strProg = new String(productItem.program.$); var strPrice = new String(productItem.price.toFixed(2)); if (productItem.currency == 'EUR'){ strPrice = strPrice + '€'; }else if (productItem.currency == 'GBP'){ strPrice = strPrice + '₤'; }else if (productItem.currency == 'USD'){ strPrice = strPrice + '$'; }else if (productItem.currency == 'JPY'){ strPrice = strPrice + '¥'; } else{ strPrice = strPrice + productItem.currency; } div1.innerHTML = '<a href="' + link + '"><img border=0 bordercolor="#0000ff" id ="img' + i + '" src="' + imgl + '" width="' + img_w + '" height="' + img_h + '" onmouseout="this.border = 0;" onerror="this.src=\'http://zac.zanox.com/images/no_image_carrousel.gif\';" onmouseover="this.border = 1; showinfo(\'' + strName + '\',\'' + strLink + '\',\'' + strDes + '\',\'' + strProg + '\',\'' + strPrice +'\');" /> </a>'; td15.appendChild(div1); } to_draw = 1; bMouseDown = 1; draw_pics(); bMouseDown = 0; var tr2 = document.createElement("tr"); tr2.id = 'trid5'; var td21 = document.createElement("td"); td21.id = 'tdid_s'; var td22 = document.createElement("td"); td22.id = 'tdid_p'; var td25 = document.createElement("td"); td25.id = 'tdid'; tdTable1 = document.createElement("table"); td25.appendChild(tdTable1); tdTbody1 = document.createElement("tbody"); tdTable1.appendChild(tdTbody1); var tdtr1 = document.createElement("tr"); tdtr1.id = 'trid11'; var tdtr1_td1 = document.createElement("td"); tdtr1_td1.id = 'tdid_detail'; tdTable2 = document.createElement("table"); tdtr1_td1.appendChild(tdTable2); tdTbody2 = document.createElement("tbody"); tdTable2.appendChild(tdTbody2); var tr_name = document.createElement("tr"); tr_name.id = 'trid_name'; var td_name = document.createElement("td"); td_name.id = 'tdid_name'; tr_name.appendChild(td_name); tdTbody2.appendChild(tr_name); var tr_des = document.createElement("tr"); tr_des.id = 'trid_des'; var td_des = document.createElement("td"); td_des.id = 'tdid_des'; tr_des.appendChild(td_des); tdTbody2.appendChild(tr_des); var tr_prog = document.createElement("tr"); tr_prog.id = 'trid_prog'; var td_prog = document.createElement("td"); td_prog.id = 'tdid_prog'; tr_prog.appendChild(td_prog); tdTbody2.appendChild(tr_prog); tdtr1_td1.appendChild(tdTable2); tdtr1.appendChild(tdtr1_td1); var tdtr1_td2 = document.createElement("td"); tdtr1_td2.id = 'tdid_price'; tdtr1.appendChild(tdtr1_td2); tdTbody1.appendChild(tdtr1); td25.appendChild(tdTable1); var td26 = document.createElement("td"); td26.id = 'tdid_p'; var td27 = document.createElement("td"); td27.id = 'tdid_s'; tr2.appendChild(td21); tr2.appendChild(td22); tr2.appendChild(td25); tr2.appendChild(td26); tr2.appendChild(td27); wdgTbody.insertBefore(tr2, where); clearInterval(intervalHandler); intervalHandler = setInterval('draw_pics()', 20); } function productSearchResponseHandler(data) { if (data.productsResult) { productItems = data.productsResult.productItem; showpagenum(1,false); } }
</script> <style id="zxStyle" type="text/css">
#zxContainer { background-color: #FAFAFA; border-bottom-color: Black; border-style: solid; border-width: 1px; width: 400px; } #zxAdList { margin-top: 0px; margin-bottom: 0px; font-style: normal; } a:link {color: black; text-decoration: underline} #Widget1 { background-color: #ff8000; border-spacing: 0px; border-style: none; border-width: 0px; border-color: #0000ff; margin-bottom: 20px; padding: 0px; width: 400px; font-family: San Serife, Verdana ; } #tbd { background-color: #00ff00; border-spacing: 0px; border-style: none; border-width: 0px; border-color: #000000; margin-bottom: 20px; padding: 0px; width: 400px; } #tbd1 { background-color: #ffffff; border-spacing: 0px; border-style: none; border-width: 0px; border-color: #000000; padding: 0px; } #trid1, tr.item1 /*item */ { background-color: #FFFFFF; margin: 5px; border-style: solid; border-width: 1px; height: 240px; } #trid11 /*item */ { background-color: #FFFFFF; margin: 5px; border-style: none; border-width: 1px; } #trid2 /*widget title*/ { background-image:url(background3.jpg); background-color: #fff; border-style: none; border-width: 0px; height: 45px; font-weight: bold; } #trid3 /*buttom line*/ { color: #ff8000; border-style: none; border-width: 1px; height: 2px; width: 400px; } #trid4 /*search line */ { background-color: #FFffff; /*margin: 5px;*/ border-style: none; border-width: 0px; height: 30px; } #tdtr_search { height: 30px; } #trid5 { background-color: #FFFFFF; margin: 5px; height: 80px; border-style: none; border-width: 1px; } #trid_name { height: 20px; } #trid_des { height: 40px; } #trid_prog { height: 20px; } #trid6 /*itemline */ { background-color: #FFFFFF; margin: 5px; border-style: none; border-width: 1px; height:1px; } #tdid_wgdTitle { border-style: none; border-width: 0px; padding: 0px; color: #ffffff; font-size: large; width: 366px; background:url(http://zac.zanox.com/images/carrousel_bg.gif); } #tdid { background-color: #ffffff; padding: 0px; width: 366px; } #tdid_search { background-color: #ffffff; padding: 0px; width: 366px; } #tdid_name { font-size: small; font-weight: bold; } #tdid_des { font-size: small; color: #333; } #tdid_prog { font-size: xx-small; color: #ff8000; } #tdid_price { font-size: large; font-style: normal; font-weight: bold; color: #333; /*width:80px;*/ width: 20%; vertical-align: top; text-align: center; } #tdid_pics_c { width: 366px; text-align: center; margin-bottom: 50px; } #tdid_mm { width:50%; } #tdid_detail { width:80%; } #tdid_pagenum_current { font-size: small; color: #000000; } #tdid_verticalline { padding: 1px; background-color: #ffffff; color: #ff8000; font-size: small; width: 0px; } #tdid_s, div.tds { padding: 0px; border-style: none; border-width: 0px; background-color: #ff8000; width: 2px; } #tdids_line, div.tds_line { padding: 0px; border-style: none; border-width: 0px; background-color: #ff8000; height: 1px; width: 2px; } #tdid_p, div.tdp { background-color: #ffffff; border-style: none; border-width: 0px; padding: 0px; width: 15px; } #tdid_p1, div.tdp1 { border-style: none; border-width: 0px; padding: 0px; background-color:#ff8000; width: 15px; } #tdid_p1x, div.tdp1 { border-style: none; border-width: 0px; padding: 0px; background:url(http://zac.zanox.com/images/carrousel_bg.gif); width: 15px; } #tdid_p2 { border-style: none; border-width: 0px; padding: 0px; width: 32px; } #tdid_m /*draw line*/ { background-color: #ff8000; height: 1px; width: 366px; } div.lbl1 { cursor: pointer; font-family:sans-serif; letter-spacing: -2px; font-size: 7pt; font-weight: regular; font-style: normal; color:#666; margin-left: 4px; vertical-align: bottom; } div.lbl2 { cursor: pointer; font-size: small; color:#666; font-weight: bold; font-style:normal; color:#0; } .w_back_img { background-image:url('magnify.jpg'); }
</style> </head> <body onload = "zxContextMatch(apversion, applicationid, adspace, region, programs, category, minPrice, maxPrice, page, items, searchString, 'productSearchResponseHandler');"> <ul id="zxAdList"></ul> </body> </html>
