Her işi sunucu yapardı...
Tarayıcının tek görevi önüne geleni göstermekti...
Bazen işler yolunda gitmezdi...
Siteler artık dinamik ve akıcı.
Tarayıcılar güçlü.
Kullanıcı deneyimi önemli.
İstemci (Client): Tarayıcı (Chrome, Safari, Firefox vs.)
Sunucu (Server): Bir teknoloji!
İstemci "istek" gönderir. Sunucu bunu işler ve cevap gönderir.
Tüm Web bunun üzerine kurulu. Çok çılgın, değil mi?
Görsel: http://demosthenes.info/
Site = HTML + CSS + JavaScript
HTML: | Yapı + İçerik |
CSS: | Görünüş |
JS: | Dinamik bileşenler / uygulama |
html, body {
background: #364B66;
font-family: Helvetica, Arial, Sans !important;
}
body {
color: #333333;
}
#header {
padding: 10px 0;
}
img {
border: 1px black;
}
.special {
color: red;
}
.special:hover {
color: red;
}
Kaynak: Play Framework! Yabe
p {
text-align: center;
}
Tüm p
elemanlarını etkiler.
<p>Bunu etkiler.</p>
<img src="...">
<p>Bunu da.</p>
#mySpecialElement: {
color: red;
font-size: 25px;
}
#mySpecialElement
id'li elemanı etkiler.
<p>Etkisiz.</p>
<p id="mySpecialElement">Ben özelim!</p>
.error: {
color: red;
font-weight: bold;
}
div.error: {
color: yellow;
}
İlki error
sınıfına sahip her şeyi, ikincisi error
sınıfına sahip div
elemanlarını etkiler.
<p class="error">Ben kırmızı ve koyuyum.</p>
<div class="error">Ben sarı ve koyuyum!</div>
<div id="header" class="upper-content">
I'm the only header in the page!
</div>
<div class="upper-content advertisement">
I also have upper-content class. And I also have advertisement class on me!
</div>
p strong {
color: red;
}
div#special.test.test2 > span {
font-size: 50px;
}
span:hover {
font-weight: bold;
}
<div id="special" class="test2 test">
<span>
The span
<span>The inner span!</span>
</span>
<p>The p<strong>Strong inside p</strong></p>
</div>
<p style="color:red">Some red text.</p>
Çok tercih edilmez. Neden?
Yönetmesi zor.
<head>
<style type="text/css">
p {
color: blue;
font-size: 12px;
}
</style>
</head>
Tartışma — Avantajlar & Dezavantajlar?
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
Tartışma — Avantajlar & Dezavantajlar?
Aynı stil dosyası birden fazla sayfada kullanılır.
Önbellek sayesinde, hız artar, maliyet azalır.
Büyük projelerde yönetimi kolay.
<html>
<head>
<script>
alert("I am a JavaScript!");
</script>
</head>
<body>
<p>I am a P</p>
<script>
alert("I am a JS in body!");
</script>
</body>
</html>
<script src="javascript.js"></script>
Tanımlama
var info;
Değer atama
var info2 = 'JavaScript iyidir!';
info = 'JavaScript iyidir!';
var aString = "Bu bir stringtir."; /* Tek ya da çift tırnak olabilir. */
var aNumber = 12; /* Bu bir sayıdır */
var aBoolean = true;
var anUndefined; /* Bu değersizdir. */
var anotherUndefined = undefined;
var aNull = null; /* Değerinin olmaması bir değerdir. */
var anEmptyArray = [];
var cars = ['Dacia', 'Renault', 'Opel'];
console.debug(cars[0]); /* Dacia */
cars[0] = 'Nissan';
cars.length; /* 3 */
cars.push('Honda');
animals.pop(); /* returns Honda */
var one = 1; /* Number 1 */
var oneS = "1"; /* String 1 */
one == oneS /* true */ /* çok sakat! */
one === oneS /* false */
one != oneS /* false */ /* çok sakat! */
one !== oneS /* true */
_
veya $
ile başlar._
ve $
içerir
/* Yöntem 1 */
function myFunction(name) {
alert('hello' + name);
}
myFunction(name); /* Kullanım */
/* Yöntem 2 */
var sayHello = function(name) { alert("Hello " + name); };
var sayHi = function(name) { alert("Hi " + name); };
var myFunction2 = sayHello;
myFunction2(name); /* Hello Umut. */
myFunction2 = sayHi;
myFunction2(name); /* Hi Umut. */
Dıştaki değişkenler, içeride kullanılabilir.
var user = "umut";
var setAlarm = function(message, timeout) {
handle = function() {
console.log("Şimdi " + user + "uyandırılacak...");
console.log(message);
};
setTimeout(handle, timeout);
}
setAlarm("Uyan kardeş sabah oldu!", 100);
// handle() Erişilemez.
Daha fazlası için: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ve http://howtonode.org/why-use-closure
Değişken kapsamları fonksiyon başına hesaplanır.
Değişken kapsamları fonksiyon başına hesaplanır.
var name1 = "a";
var aFunction = function(condition) {
var name1 = "c";
if(condition) {
var name2 = "b";
}
alert(name2)
}
aFunction(true);
alert(name1);
(function(){
var foo = 'Hello';
var bar = 'World!'
function baz(){
return foo + ' ' + bar;
}
})();
var myObject = {
myProperty: 'hello i am string',
aNumberProperty: 12,
anInnerObject: {
innerOne: "a",
innerTwo: function(param) { console.debug("Param is " + param); }
},
myMethod: function() {
console.log(this);
return this;
}
}
var car = {
brand: 'Ford',
model: 'Fiesta'
};
console.log(car.brand);
console.log(car['model']);
var myObj = {
one: "example 1",
two: {
twoOne: "example 2.1",
twoTwo: "example 2.2"
},
tree: "example 3"
};
delete myObj.tree;
myObj.four = "example 4";
myObj.two.twoOne = "example 2.1.3";
/* myObj.five.one = NOT POSSIBLE! */
JavaScript'in HTML ile buluştuğu yer...
JavaScript ile DOM'a erişmek ve DOM'u modifiye etmek için bazı nesneler vardır:
window
, document
...
document.body
document.URL
window.location
<div id="myElement">This a div id'd myElement</div>
var item = document.getElementById('myitem');
item.style.color = 'red';
document.body.innerHTML = 'Tüm sayfayı değiştirdim.
';
var xmlhttp;
if (window.XMLHttpRequest) {
/* IE7+ and others */
xmlhttp = new XMLHttpRequest();
} else {
/* IE6 */
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
Bir JavaScript kütüphanesidir.
Web sayfanıza eklersiniz.
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
</head>
İndirip eklemek vs. CDN kullanmak
, bunları unutun!document.getElementById()
, document.getElementsByTagName()
jQuery selectorleri: Kolay, cross browser
var divs = $("div"); // Sayfadaki tüm div'ler
var img = $("#header"); // header id'sine sahip element
var images = $(".picture"); // picture class'ına sahip tüm elementler
var something = $("div")
.children("p.class1")
.find("h1.class2")
.filter(".class3")
.parent()
.siblings("div.class3")
.find("*");
/* Amcasının oğlunun eltisinin kaynının dedesinin
komşusunun Ankara'daki kızının üçüncü kuzeni... */
<img id="mainpicture" src="http://www.nokia.com/logo.png">
var img = $('#mainpicture');
img.attr('src'); /* returns http://www.nokia.com/logo.png */
img.attr('src', 'http://www.microsoft.com/logo.png');
img.css('width');
img.css('width', '200px');
img.addClass("newlogo");
Hokus pokus!
<img id="mainpicture" class="newlogo" src="http://www.microsoft.com/logo.png" style="width: 200px;">
<div id="results">Sonuç bulunamadı.!</div>
<div>Sonuç mu? Ne sonucu? Sonuç ne arar la bazarda?</div>
var resultDiv = $('#results');
resultDiv.html(); /* returns "Sonuç bulunamadı.!" */
resultDiv.html('12 sonuç bulundu.');
$("div").not(resultDiv).remove();
Hokus Pokus!
<div id="results">12 sonuç bulundu.</div>
XSS?
<body></body>
$('<div></div>')
.attr("id", "myPrecious")
.text("You shall not pass!")
.appendTo($(body));
Expecto Patronum! *
<body>
<div id="myPrecious">You shall not pass!</div>
</body>
$(document).ready(function() {
alert("Bu mesaj tüm sayfa yüklendikten sonra görünür.");
});
Event: Bir şey oldu!
Mesela...
click
— Bir elemente tıklandı.mousemove
— Mouse ile elementin üzerinde geziliyor.ready
— Bir şey hazır?
<div id="counter">not ready!</div>
<a id="increase" href="http://www.google.com/">Click me to increase</a>
$(document).ready(function() {
var counter = 0;
var counterDiv = $("#counter");
var increaseA = $("#increase");
/* init */
counterDiv.text(counter); /* Bu olmasaydı ne olurdu? */
increaseA.click(function(event) {
event.preventDefault(); /* Bu da nesi? */
counter++;
counterDiv.text(counter);
});
});
Asynchronous JavaScript And XML
alert("submitting ajax");
$.ajax({
url: 'http://www.example.com/getUserList',
data: {
count: 20,
name: "Şeyda"
},
method: "GET",
dataType: 'json',
success: function (data) {
/* { "users": [
{ "firstName": "Şeyda", "lastName": "Benzer" },
{ "firstName": "Şeyda", "lastName": "Bora" }
]
}
*/
alert(data.users[0].firstName);
},
error: function(data) {
alert("Bir hata oluştu.");
}
});
alert("submitted ajax");
Başka bir sürü özellik de sunar tabi...
var tessel = require('tessel');
var servos = require('servo-pca9685').connect(tessel.port('A'));
var degrees = 0;
setInterval(function () {
servos.moveServo(1, degrees);
degrees = degrees == 0 ? 180 : 0;
}, 500);
Gerçek zamanlı uygulamalar