AngularJS Example:
by Vojtech Mares
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<div ng-app>
<div ng-controller="PostsController">
<div id="posts_strip" ng-init="init()" ng-mouseover="conf.posts_move_flag=false" ng-mouseout="conf.posts_move_flag=true">
<div class="shadow left"> </div>
<a ng-repeat="(k, n) in posts track by $index" ng-style="{'left': get_left_margin($index)}" id="posts_{{$index}}" rel="nofollow" target="_blank" href="{{n.link}}">
<span class="title">{{n.title}}</span>
</a>
<div class="shadow right"> </div>
</div>
</div>
</div>
CSS
#posts_strip {
width: 100%;
border-bottom: 1px dotted #cccccc;
display: block;
height: 17px;
position: relative;
overflow: hidden;
}
#posts_strip a {
display: inline-block;
text-decoration: none;
margin-right: 20px;
z-index: 1;
position: absolute;
top: 0px;
width: 450px;
vertical-align: top;
}
#posts_strip a span {
cursor: pointer;
display: inline-block;
color: #343434;
font-weight: bold;
padding-right: 5px;
z-index: 1;
}
#posts_strip a span.date {
display: inline-block;
font-weight: normal;
color: #888888;
}
#news_strip a:hover span.title {
text-decoration: underline;
}
#posts_strip div.shadow{
position: absolute;
top: 0px;
width: 30px;
height: 100%;
z-index: 5;
background: #ffffff;
}
#news_strip div.shadow.left{
left: 0px;
-webkit-box-shadow: 10px 0px 10px #fff;
-moz-box-shadow: 10px 0px 10px #fff;
box-shadow: 10px 0px 10px #fff;
}
#posts_strip div.shadow.right{
right: 0px;
-webkit-box-shadow: -10px 0px 10px #fff;
-moz-box-shadow: -10px 0px 10px #fff;
box-shadow: -10px 0px 10px #fff;
}
JavaScript
function PostsController($scope, $interval, $element) {
$scope.posts = [];
$scope.conf = {
posts_pos: 0,
posts_margin: 10,
posts_move_flag: true,
loop: true,
interval: 25
};
// $scope.containerWidth = $element.width();
$scope.init = function() {
debugger;
$scope.posts = data;
$interval($scope.posts_move ,$scope.conf.interval);
};
$scope.get_left_margin = function(idx) {
var $left = $scope.conf.posts_pos;
for (var ri=0; ri < idx; ri++) {
if (document.getElementById('posts_'+ri)) {
$left += $scope.conf.posts_margin + angular.element(document.getElementById('posts_'+ri))[0].offsetWidth;
}
}
return $left+'px';
};
$scope.posts_move = function() {
if ($scope.conf.posts_move_flag) {
$scope.conf.posts_pos++;
if ( angular.element(document.getElementById('posts_0'))[0].offsetLeft > angular.element(document.getElementById('posts_strip'))[0].offsetWidth + $scope.conf.posts_margin ) {
var first_new = $scope.posts[0];
$scope.posts.push(first_new);
$scope.posts.shift();
$scope.conf.posts_pos += angular.element(document.getElementById('posts_0'))[0].offsetWidth + $scope.conf.posts_margin;
}
}
};
}
var data = [{"title":"asdsad","link": "asdas"},{"title":"sasasa","link": "asda"}];