Индикатор загрузки для айФона
Долго я терпел, пока T-Mobile выпустит в Германии iPhone. Так и не вытерпел. Купил на eBay американский разблокированный айФон и теперь хожу себя ругаю, что так долго ждал. Телефон просто замечательный, и я не представляю, что должны сделать другие производители телефонов, чтобы составить конкуренцию. Не буду перечислять все достоинства айфона, блог у меня не про мобильники, а про вэб разработку. Как наверное многие из вас слышали, на айфоне установлен браузер Safari, и это означает, что можно писать сайты или программы нацеленные на владельцев айфона (и iPod Touch).
В поиске каких либо туториалов про разработку сайтов для айфона, наткнулся на интересную статью от Adam van den Hoven. Оказывается на айфоне не работают большие анимированные гифы. Я так ещё и не выяснил, насколько они должны быть большими, чтобы не работать. Тем не менее, Адам написал очень интересный джаваскрипт код, который генерирует индикаторы загрузки без картинок. Использует он для этого canvas, и просто рисует нужные индикаторы. Подобную технику можно использовать не только на айфоне, но и в любом браузере с поддержкой канваса (как перевести canvas на русский?).
1. Нужен следующий код:
-
function getLoading(context, bars, center, innerRadius, size, color) {
-
var animating = true,
-
currentOffset = 0;
-
-
function makeRGBA(){
-
return "rgba(" + [].slice.call(arguments, 0).join(",") + ")";
-
}
-
function drawBlock(ctx, barNo){
-
ctx.fillStyle = makeRGBA(color.red, color.green, color.blue, (bars+1-barNo)/(bars+1));
-
ctx.fillRect(-size.width/2, 0, size.width, size.height);
-
}
-
function calculateAngle(barNo){
-
return 2 * barNo * Math.PI / bars;
-
}
-
function calculatePosition(barNo){
-
angle = calculateAngle(barNo);
-
return {
-
y: (innerRadius * Math.cos(-angle)),
-
x: (innerRadius * Math.sin(-angle)),
-
angle: angle
-
};
-
}
-
function draw(ctx, offset) {
-
clearFrame(ctx);
-
ctx.save();
-
ctx.translate(center.x, center.y);
-
for(var i = 0; i<bars; i++){
-
var curbar = (offset+i) % bars,
-
pos = calculatePosition(curbar);
-
ctx.save();
-
ctx.translate(pos.x, pos.y);
-
ctx.rotate(pos.angle);
-
drawBlock(context, i);
-
ctx.restore();
-
}
-
ctx.restore();
-
}
-
function clearFrame(ctx) {
-
ctx.clearRect(0, 0, ctx.canvas.clientWidth, ctx.canvas.clientHeight);
-
}
-
function nextAnimation(){
-
if (!animating) {
-
return;
-
};
-
currentOffset = (currentOffset + 1) % bars;
-
draw(context, currentOffset);
-
setTimeout(nextAnimation, 50);
-
}
-
nextAnimation(0);
-
return {
-
stop: function (){
-
animating = false;
-
clearFrame(context);
-
},
-
start: function (){
-
animating = true;
-
nextAnimation(0);
-
}
-
};
-
}
2. HTML элемент Canvas
-
<canvas id="indicator" width="500" height="500" style="border: 1px solid black">
3. И вызов функции для запуска индикатора
-
var controller = getLoading(document.getElementById('indicator').getContext("2d"), 9, {x:250, y:250}, 10, {width: 20, height:50}, {red: 0, green: 17, blue: 58});
Вот небольшая демонстрация:
6 Comments so far
Leave a reply
Canvas переводится как “канва”, насколько я знаю.
Поддержка этой штуки в браузерах - вещь хорошая и интересная. Жаль только IE как всегда в стороне.
за сколько взяли, если не секрет? тоже хочу.)
Отдал немало - 560 евро
Но стоит того! Возможностей куча. Например на днях сделал Remote Desktop, и теперь могу с телефонона управлять своим ноутбуком.
Сейчас вот пытаюсь понять, как проапдейтить прошивку с 1.0.2 на 1.1.1.
Привет.
недавно узнала про Айфон…и просто загорелась….ХОЧУ…но вот сегодня на разных форумах поковыряласьи возникает вопрос для меня пока не понятный….каким образом он работает с нашими операторами и каким образом переводится на русскую клавиатуру???? И еще… ГДЕ его можнокупить?
Всё просто. Покупаешь разблокированный телефон (или можно это сделать самому) и можешь им пользоваться с любыми операторами.
Русскую клавиатуру можно поставить на сайте http://www.russianiphone.ru
Где купить в России я не знаю. Я из Германии и купил на eBay. Поспрашивай на RussianIphone, может подскажут.
Уцепились за цацку, ерунда, дорогой девайс за такой функционал. налодонник должен быть с qwerty клавой. Без нее- нет смысла в нем.