pressure
Version:
Pressure is a lightweight JavaScript library for both Force Touch and 3D Touch through a single API.
203 lines (172 loc) • 5.29 kB
JavaScript
$(function () {
$('[data-toggle="popover"]').popover({trigger: 'manual'});
});
Pressure.set('.device-circle', {
change: function(force){
console.log(force);
this.style.width = Pressure.map(force, 0, 1, 10, $(this).data('size')) + 'em';
this.style.height = Pressure.map(force, 0, 1, 10, $(this).data('size')) + 'em';
this.style.marginTop = '-' + Pressure.map(force, 0, 1, 10, $(this).data('size'))/2 + 'em';
this.style.marginLeft = '-' + Pressure.map(force, 0, 1, 10, $(this).data('size'))/2 + 'em';
},
startDeepPress: function(){
this.style.backgroundColor = '#5bc0de';
},
endDeepPress: function(){
this.style.backgroundColor = '#d9534f';
},
end: function(){
this.style.width = '10em';
this.style.height = '10em';
this.style.marginTop = '-5em';
this.style.marginLeft = '-5em';
}
}, {polyfillSpeedDown: 250});
Pressure.set('.device-circle', {
change: function(){
$('.pressure-failed').hide();
},
unsupported: function(){
$('.pressure-failed').show();
}
}, {polyfill: false});
var block = {
change: function(force, event){
this.style.width = ((200 * force) + 200) + 'px';
this.innerHTML = force;
this.style.backgroundColor = "rgb(" + parseInt(Pressure.map(force, 0, 1, 255, 0)) + ",100," + parseInt(Pressure.map(force, 0, 1, 0, 255)) +")";
this.style.color = force > 0.3 ? 'white' : 'black';
},
end: function(){
this.style.width = '200px';
this.innerHTML = 0;
this.style.backgroundColor = 'rgb(255,100,0)';
this.style.color = 'black';
},
unsupported: function(){
this.innerHTML = 'Sorry! Check the devices and browsers that Pressure works on above ^^^^';
}
}
Pressure.set('#el1', block);
Pressure.set('#el2', block, {only: 'mouse'});
Pressure.set('#el3', block, {only: 'touch'});
Pressure.set('#el4', block, {only: 'pointer'});
Pressure.set('#pressure-test', {
start: function(){
this.innerHTML = 'Pressure is Supported!';
},
unsupported: function(){
this.innerHTML = 'Pressure is NOT Supported!';
}
});
Pressure.set('#peanuts', {
change: function(force, event){
this.style.webkitFilter = 'blur(' + Pressure.map(force, 0, 0.7, 20, 0) + 'px)';
},
end: function(){
this.style.webkitFilter = 'blur(20px)';
},
unsupported: function(){
this.innerHTML = 'Your device / browser does not support this :(';
}
});
var saveForce = 0;
Pressure.set('#text-sizer', {
change: function(force){
if(force > saveForce){
this.style.fontSize = Pressure.map(force, 0, 1, 16, 30);
saveForce = force;
}
},
end: function(){
saveForce = 0;
}
});
Pressure.set('#cube-btn', {
change: function(force){
document.getElementById('spinning-cube').style.webkitTransform = 'rotateZ(' + Pressure.map(force, 0, 1, 0, 360) + 'deg)';
},
end: function(){
document.getElementById('spinning-cube').style.webkitTransform = 'rotateZ(0deg)';
}
});
Pressure.set('#popover', {
startDeepPress: function(force){
$(this).popover('show');
},
endDeepPress: function(){
$(this).popover('hide');
}
});
// docs
Pressure.set('#output-element', {
change: function(force, event){
this.innerHTML = force;
}
}, {polyfill: false});
Pressure.set('#element-touch', {
change: function(force, event){
this.innerHTML = force + 'on an iphone';
}
}, {only: 'touch', polyfill: false});
Pressure.set('#element-mouse', {
change: function(force, event){
this.innerHTML = force + 'on a Mac';
}
}, {only: 'mouse', polyfill: false});
Pressure.set('#element-pointer', {
change: function(force, event){
this.innerHTML = force + 'on a pointer device';
}
}, {only: 'pointer', polyfill: false});
Pressure.set('#element-touch-prevent', {}, {only: 'touch', preventDefault: false});
Pressure.set('#element-mouse-prevent', {}, {only: 'mouse', preventDefault: false});
Pressure.set('#polyfill-example', {
change: function(force, event){
this.innerHTML = force;
},
end: function(){
this.innerHTML = 0;
},
unsupported: function(){
alert("Oh no, this device does not support pressure.")
}
});
Pressure.set('#polyfill-speed-up', {
change: function(force, event){
this.innerHTML = force;
},
end: function(){
this.innerHTML = 0;
}
}, {polyfillSpeedUp: 5000});
Pressure.set('#polyfill-speed-down', {
change: function(force, event){
this.innerHTML = force;
},
end: function(){
this.innerHTML = 0;
}
}, {polyfillSpeedDown: 2000});
// Twitter BTN
window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
// Google Analytics
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-72492481-1', 'auto');
ga('send', 'pageview');