You are here
LimeBike is an economical way to travel around cities, utilizing dockless bike sharing technology. All bikes and scooters have GPS systems tucked away in them, allowing users to track the nearest available vehicle to use. On the electric bikes and scooters, the app also shows how many more miles those can travel before they run out of juice, giving users an option to find a bike that suits them best. 

To use, you need to download the LimeBike app on your smartphone (Android or iTunes, links below), have your credit or debit card ready, load your desired amount, and start exploring communities cheaply. Sometimes, using LimeBike can be as cheap as using transit for short trips.

Where and How Much to Rent

Compared to docked bikeshare systems like Ford Go Bike in the San Francisco Bay Area, LimeBike’s dockless system gives you the flexibility to travel around without the hassle of finding an available dock once you’re done with your trip.

#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line.scrollable .scrollArrow-left,
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Rates
  • Coverage Area
<
>

Payment options are as follows:

#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table-wrapper {
padding: 20px 0;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table.style-top tr:first-child td,
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table.style-top tr:first-child td .paragraph,
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table tr:last-child td {
border-bottom: none;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table td:last-of-type {
border-right: none;
}
#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Payment Plan
Amount
Features
Pay-as-You-Go
$10, $20, $50
$20 will give you a $1 coupon
$50 will give you a $3 coupon
​Auto-Reload available
​Applicable to all bike types
Pedal Bike Subscription
$29.95 monthly
$100 ride credits for pedal bikes per month
50% off each additional bike ride
Billed once monthly and auto-renewed
Applicable to pedal bikes only

function setupElement657844272105609865() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:3,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “657844272105609865”;
_Element.prototype.element_id = “b02109f7-d9e9-4c66-a1a6-82df13ab005f”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-b02109f7-d9e9-4c66-a1a6-82df13ab005f’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement657844272105609865();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement657844272105609865, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement657844272105609865();
}
});
}

Below are the going rates for the various bike types on offer:

#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table-wrapper {
padding: 20px 0;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table.style-top tr:first-child td,
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table.style-top tr:first-child td .paragraph,
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table tr:last-child td {
border-bottom: none;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table td:last-of-type {
border-right: none;
}
#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Vehicle Type
Start Rate
Going Rate
Pedal Bike
$0
$1 every 30 minutes
Electric Bike or Electric Scooter
$1
$0.15 per minute

function setupElement280277284645012582() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:3,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “280277284645012582”;
_Element.prototype.element_id = “ace05a44-9484-45e9-b2ae-a8dcc20aa761”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-ace05a44-9484-45e9-b2ae-a8dcc20aa761’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement280277284645012582();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement280277284645012582, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement280277284645012582();
}
});
}

A complete listing of where LimeBike is available can be found here.

In the San Francisco Bay Area, it is available in the following communities:

  • Alameda County: Alameda, Albany, Oakland
  • San Francisco
  • San Mateo County: Burlingame, Millbrae, South San Francisco
  • Santa Clara County: San Jose

function setupElement648038301633936778() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.6”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
// optimization
this.scrollArrowLeft = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-left’);
this.scrollArrowRight = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-right’);
this.scrollTabsBar = this.$(‘> .tabbed-box > .tabbed-box-bar > .tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.scrollTabsBar.scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘> .tabbed-box > .tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// trigger children first
content_wrapper.find(‘.tabbed-box-tab.active’).click();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘> .’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// fire resize event to handle any deterministic elements now appearing
$(window).resize();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft !== 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass('active');
} else {
this.scrollArrowRight.removeClass('active');
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass('active');
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft === 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass('active');
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it's not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we're going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it's out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) === 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta !== 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1}],”theme”:”standard”,”tabs”:2,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:0});
_Element.prototype.settings.page_element_id = “648038301633936778”;
_Element.prototype.element_id = “ebf8756d-3f37-4b11-93ed-06b0d8916bf1”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.6/assets/”;
new _Element({
el: ‘#element-ebf8756d-3f37-4b11-93ed-06b0d8916bf1’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement648038301633936778();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement648038301633936778, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement648038301633936778();
}
});
}


Manual Bike

The original version of LimeBike, these bikes allow riders to travel around town with ease and comfort. Manual pedal bikes are not available in San Jose as a City Ordinance requires the company to deploy electric bikes and scooters instead to reduce theft.

Electric Bike

Branded as Lime-E, these electric bikes have faster traction, better speeds, and a stronger ability to navigate steep hills than the pedal bikes.

Electric Scooter

Branded as Lime-S, these electric scooters allow riders to weave through traffic easily, with a speedometer to check your speed and a battery indicator showing how much life a scooter has left before recharging.
Top