Forecast data

This commit is contained in:
Max Lynch
2013-10-23 19:19:09 -05:00
parent 65e0835c08
commit dd1acc44e1
7 changed files with 91 additions and 7 deletions

35
dist/js/ionic.js vendored
View File

@ -115,8 +115,7 @@ window.ionic = {
// Trigger a new event
trigger: function(eventType, data) {
// TODO: Do we need to use the old-school createEvent stuff?
var event = new CustomEvent(eventType, data);
var event = new CustomEvent(eventType, { detail: data });
// Make sure to trigger the event on the given target, or dispatch it from
// the window if we don't have an event target
@ -2492,13 +2491,17 @@ window.ionic = {
ionic.Utils.extend(opts, {
decelerationRate: ionic.views.Scroll.prototype.DECEL_RATE_NORMAL,
dragThresholdY: 10,
resistance: 2
resistance: 2,
scrollEventName: 'momentumScrolled',
intertialEventInterval: 50
});
this.el = opts.el;
this.decelerationRate = opts.decelerationRate;
this.dragThresholdY = opts.dragThresholdY;
this.resistance = opts.resistance;
this.scrollEventName = opts.scrollEventName;
this.inertialEventInterval = opts.inertialEventInterval;
// Listen for drag and release events
ionic.onGesture('drag', function(e) {
@ -2528,6 +2531,8 @@ window.ionic = {
* @param {easing} the animation function to use for easing
*/
scrollTo: function(x, y, time, easing) {
var _this = this;
easing = easing || 'cubic-bezier(0.1, 0.57, 0.1, 1)';
var el = this.el;
@ -2535,6 +2540,22 @@ window.ionic = {
el.style.webkitTransitionTimingFunction = easing;
el.style.webkitTransitionDuration = time;
el.style.webkitTransform = 'translate3d(0,' + y + 'px, 0)';
// Start triggering events as the element scrolls from inertia.
// This is important because we need to receive scroll events
// even after a "flick" and adjust, etc.
this._momentumStepTimeout = setTimeout(function eventNotify() {
var scrollTop = parseFloat(_this.el.style.webkitTransform.replace('translate3d(', '').split(',')[1]) || 0;
ionic.trigger(_this.scrollEventName, {
target: _this.el,
scrollTop: -scrollTop
});
if(_this._isDragging) {
_this._momentumStepTimeout = setTimeout(eventNotify, _this.inertialEventInterval);
}
}, this.inertialEventInterval)
console.log('TRANSITION ADDED!');
},
@ -2551,6 +2572,8 @@ window.ionic = {
console.log('REMOVING TRANSITION');
this.el.style.webkitTransitionDuration = '0';
clearTimeout(this._momentumStepTimeout)
},
/**
@ -2580,6 +2603,7 @@ window.ionic = {
window.requestAnimationFrame(function() {
var content;
// The drag stopped already, don't process this one
if(_this._isStopped) {
_this._initDrag();
return;
@ -2611,6 +2635,11 @@ window.ionic = {
}
// Update the new translated Y point of the container
_this.el.style.webkitTransform = 'translate3d(0,' + newY + 'px, 0)';
ionic.trigger(_this.scrollEventName, {
target: _this.el,
scrollTop: -newY
});
}
});
},

View File

@ -16,8 +16,7 @@
// Trigger a new event
trigger: function(eventType, data) {
// TODO: Do we need to use the old-school createEvent stuff?
var event = new CustomEvent(eventType, data);
var event = new CustomEvent(eventType, { detail: data });
// Make sure to trigger the event on the given target, or dispatch it from
// the window if we don't have an event target

View File

@ -8,13 +8,17 @@
ionic.Utils.extend(opts, {
decelerationRate: ionic.views.Scroll.prototype.DECEL_RATE_NORMAL,
dragThresholdY: 10,
resistance: 2
resistance: 2,
scrollEventName: 'momentumScrolled',
intertialEventInterval: 50
});
this.el = opts.el;
this.decelerationRate = opts.decelerationRate;
this.dragThresholdY = opts.dragThresholdY;
this.resistance = opts.resistance;
this.scrollEventName = opts.scrollEventName;
this.inertialEventInterval = opts.inertialEventInterval;
// Listen for drag and release events
ionic.onGesture('drag', function(e) {
@ -44,6 +48,8 @@
* @param {easing} the animation function to use for easing
*/
scrollTo: function(x, y, time, easing) {
var _this = this;
easing = easing || 'cubic-bezier(0.1, 0.57, 0.1, 1)';
var el = this.el;
@ -51,6 +57,22 @@
el.style.webkitTransitionTimingFunction = easing;
el.style.webkitTransitionDuration = time;
el.style.webkitTransform = 'translate3d(0,' + y + 'px, 0)';
// Start triggering events as the element scrolls from inertia.
// This is important because we need to receive scroll events
// even after a "flick" and adjust, etc.
this._momentumStepTimeout = setTimeout(function eventNotify() {
var scrollTop = parseFloat(_this.el.style.webkitTransform.replace('translate3d(', '').split(',')[1]) || 0;
ionic.trigger(_this.scrollEventName, {
target: _this.el,
scrollTop: -scrollTop
});
if(_this._isDragging) {
_this._momentumStepTimeout = setTimeout(eventNotify, _this.inertialEventInterval);
}
}, this.inertialEventInterval)
console.log('TRANSITION ADDED!');
},
@ -67,6 +89,8 @@
console.log('REMOVING TRANSITION');
this.el.style.webkitTransitionDuration = '0';
clearTimeout(this._momentumStepTimeout)
},
/**
@ -96,6 +120,7 @@
window.requestAnimationFrame(function() {
var content;
// The drag stopped already, don't process this one
if(_this._isStopped) {
_this._initDrag();
return;
@ -127,6 +152,11 @@
}
// Update the new translated Y point of the container
_this.el.style.webkitTransform = 'translate3d(0,' + newY + 'px, 0)';
ionic.trigger(_this.scrollEventName, {
target: _this.el,
scrollTop: -newY
});
}
});
},

View File

@ -12,5 +12,9 @@ angular.module('ionic.weather', ['ionic.weather.services', 'ionic.weather.direct
Weather.getAtCurrentLocation(function(resp) {
$scope.current = resp.current_observation;
Weather.getForecast(resp.location.lat, resp.location.lon, function(resp) {
console.log('Forecast', resp);
$scope.forecast = resp.forecast.simpleforecast;
});
});
});

View File

@ -30,7 +30,7 @@
<div id="scroller" class="scroll padding" style="margin-top:44px">
<small-weather>
<h5>{{current.weather}}</h5>
<h5>H: {{current.high}} L: {{current.low}}</h5>
<h5>H: {{forecast.forecastday[0].high.fahrenheit}} L: {{forecast.forecastday[0].low.fahrenheit}}</h5>
<h1 class="current-temp">{{current.temp_f | int}}&deg;</h1>
</small-weather>
<weather-box title="Forecast" style="height: 400px">
@ -46,5 +46,11 @@
el: s,
decelerationRate: 0.87
});
var height = window.innerHeight;
s.addEventListener('momentumScrolled', function(e) {
// here you might add a nice blur or header fade effect
// based on how far the scrolling has gone up
});
</script>
</html>

View File

@ -10,7 +10,22 @@ angular.module('ionic.weather.services', ['ngResource'])
method: 'JSONP'
}
});
var forecastResource = $resource(baseUrl + '/forecast/q/:coords.json', {
callback: 'JSON_CALLBACK'
}, {
get: {
method: 'JSONP'
}
});
return {
getForecast: function(lat, lng, cb) {
forecastResource.get({
coords: lat + ',' + lng
}, cb);
},
getAtCurrentLocation: function(cb) {
var _this = this;

View File

@ -43,6 +43,7 @@
var scroll = new ionic.views.Scroll({
el: s
});
</script>
</body>
</html>