L05 (Feb 09): Coding Lab 1
Fundamentals of JavaScript; event-based programming. The class will combine lecture-like presentation of material and hands-on programming activities.
This class is relevant to all the future programming assignments and project 2, where you will have to implement an interactive prototype of your product concept.
Bring a computer & install Chrome!
Required reading (post your written response before class):
Optional readings:
- JavaScript: The Good Parts (electronic version of this book is available through Harvard library); relevant parts include Ch 3 (through 3.4), Ch 4 (through 4.5), Ch 6 (through 6.5)
- JavaScript Guide from the Mozilla Developer Network
Slides with description of activities
Code (to be gradually revealed during class):
var team = {
teamName: "CS 179 staff",
teammates: [
{
name: "Bernd",
confidence: 3,
popularity: 0,
photo: "t5.jpg"
},
{
name: "Krzysztof",
confidence: 2.5,
popularity: 0,
photo: "k.jpg"
},
{
name: "Ofra",
confidence: 3,
popularity: 0,
photo: "t4.jpg"
},
{
name: "Sarah",
confidence: 3,
popularity: 0,
photo: "t2.jpg"
},
{
name: "Winston",
confidence: 3,
popularity: 0,
photo: "t3.jpg"
},
{
name: "Yujie",
confidence: 3,
popularity: 0,
photo: "t1.jpg"
}
],
}
function displayTeam() {
$("#teamName").html(team.teamName);
var html = "";
for (var i=0; i<team.teammates.length; i++) {
html += '<div class="teammate" data-index="' + i + '">';
html += '<div class="name">' + team.teammates[i].name + '</div>';
html += '<img src="' + team.teammates[i].photo + '" alt="' + team.teammates[i].name + '" width="150px"/>';
html += '<div class="popularity">Popularity: <span class="popularityValue">' + team.teammates[i].popularity + '</span></div>';
html += '<div class="confidence">Confidence: ' + team.teammates[i].confidence + '</div>';
html += "</div>";
}
$("#teamMembers").html(html);
$(".confidence").hide();
$(".teammate").mouseenter(function(event) {
$(this).addClass("spotlight");
$(".confidence", this).show()
});
$(".teammate").mouseleave(function(event) {
$(this).removeClass("spotlight");
$(".confidence", this).hide()
});
$(".teammate").click(function() {
incrementPopularity($(this).attr("data-index"))
});
}
function incrementPopularity(teammateIndex) {
team.teammates[teammateIndex].popularity++;
$(".teammate[data-index=" + teammateIndex + "] .popularityValue").html(team.teammates[teammateIndex].popularity);
}
$(function() {
displayTeam(team);
});