04/10/2018, 20:05

Tạo Photo Gallery với AngularJS và CSS3

Hôm nay mình sẽ giới thiệu cho các bạn cách làm hiệu ứng gallery cho ảnh với sự trợ giúp của AngularJS và CSS3. Bộ trình diễn này không hề phức tạp mà rất là dễ dàng áp dụng cho website hay các web app. Qua bài viết này, các bạn sẽ có kinh nghiệm trong việc tạo hiệu ứng 3D bằng CSS3, đồng thời cũng ...

Hôm nay mình sẽ giới thiệu cho các bạn cách làm hiệu ứng gallery cho ảnh với sự trợ giúp của AngularJS và CSS3. Bộ trình diễn này không hề phức tạp mà rất là dễ dàng áp dụng cho website hay các web app. Qua bài viết này, các bạn sẽ có kinh nghiệm trong việc tạo hiệu ứng 3D bằng CSS3, đồng thời cũng học thêm về cách sử dụng AngularJS, một frameword dành cho web app đang rất được thịnh hành hiện nay.

photo-gallery-with-angularjs-and-css3

Xem Demo | Download

HTML

Đầu tiên, các bạn chèn những khai báo cho angular.js và các file cần thiết như sau :

<!DOCTYPE html>
<html ng-app="photogallery">
<head>
    <meta charset="utf-8" />
    <meta name="author" content="Script Tutorials" />
    <title>Tạo Photo Gallery với AngularJS và CSS3</title>
    <meta name="description" content="Photo Gallery with AngularJS and CSS3 - demo page">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta name="viewport" content="awidth=device-awidth, initial-scale=1, maximum-scale=1, user-scalable=no" />

     
    <link href="demo.css" rel="stylesheet" type="text/css" />
     <link rel="icon" href="http://www.thuthuatweb.net/wp-content/themes/HostingSite/favicon.ico" type="image/x-ico"/>
     
    <script src="js/jquery-2.0.3.min.js"></script>
    <script src="http://code.angularjs.org/1.2.0rc1/angular.js"></script>
    <script src="http://code.angularjs.org/1.2.0rc1/angular-animate.min.js"></script>
    <script src="http://code.angularjs.org/1.2.0rc1/angular-touch.min.js"></script>
    <script src="js/app.js"></script>
</head>

Kế tiếp là chèn đoạn sau vào bên trong thẻ <body>

<body ng-controller="MainCtrl">

Tiếp tục, chèn thêm đoạn html  như sau để tạo khung chuẩn cho gallery

 
    <div class="container slider">

         
        <img ng-repeat="photo in photos" class="slide" ng-swipe-right="showPrev()" ng-swipe-left="showNext()" ng-show="isActive($index)" ng-src="{{photo.src}}" />

         
        <a class="arrow prev" href="#" ng-click="showPrev()"></a>
        <a class="arrow next" href="#" ng-click="showNext()"></a>

         
        <ul class="nav">
            <li ng-repeat="photo in photos" ng-class="{'active':isActive($index)}">
                <img ng-src="{{photo.src}}" alt="{{photo.desc}}" title="{{photo.desc}}" ng-click="showPhoto($index);" />
            </li>
        </ul>

    </div>

CSS

Để tạo hiệu ứng 3D cho ảnh, các bạn sử dụng toàn bộ đoạn css sau :

.arrow {
    cursor: pointer;
    display: block;
    height: 64px;
    margin-top: -35px;
    outline: medium none;
    position: absolute;
    top: 50%;
    awidth: 64px;
    z-index: 5;
}
.arrow.prev {
    background-image: url("../images/prev.png");
    left: 20px;
    opacity: 0.2;
    transition: all 0.2s linear 0s;
}
.arrow.next {
    background-image: url("../images/next.png");
    opacity: 0.2;
    right: 20px;
    transition: all 0.2s linear 0s;
}
.arrow.prev:hover{
    opacity:1;
}
.arrow.next:hover{
    opacity:1;
}

.nav {
    bottom: -4px;
    display: block;
    height: 48px;
    left: 0;
    margin: 0 auto;
    padding: 1em 0 0.8em;
    position: absolute;
    right: 0;
    text-align: center;
    awidth: 100%;
    z-index: 5;
}
.nav li {
    border: 5px solid #AAAAAA;
    border-radius: 5px;
    cursor: pointer;
    display: inline-block;
    height: 30px;
    margin: 0 8px;
    position: relative;
    awidth: 50px;
}
.nav li.active {
    border: 5px solid #FFFFFF;
}
.nav li img {
    awidth: 100%;
}

.slider {
    border: 15px solid #FFFFFF;
    border-radius: 5px;
    height: 500px;
    margin: 20px auto;
    position: relative;
    awidth: 800px;

    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    -ms-perspective: 1000px;
    -o-perspective: 1000px;
    perspective: 1000px;

    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    -ms-transform-style: preserve-3d;
    -o-transform-style: preserve-3d;
    transform-style: preserve-3d;
}
.slide {
    position: absolute;
    top: 0;
    left: 0;
}
.slide.ng-hide-add {
    opacity:1;

    -webkit-transition:1s linear all;
    -moz-transition:1s linear all;
    -o-transition:1s linear all;
    transition:1s linear all;

    -webkit-transform: rotateX(50deg) rotateY(30deg);
    -moz-transform: rotateX(50deg) rotateY(30deg);
    -ms-transform: rotateX(50deg) rotateY(30deg);
    -o-transform: rotateX(50deg) rotateY(30deg);
    transform: rotateX(50deg) rotateY(30deg);

    -webkit-transform-origin: right top 0;
    -moz-transform-origin: right top 0;
    -ms-transform-origin: right top 0;
    -o-transform-origin: right top 0;
    transform-origin: right top 0;
}
.slide.ng-hide-add.ng-hide-add-active {
    opacity:0;
}
.slide.ng-hide-remove {
    -webkit-transition:1s linear all;
    -moz-transition:1s linear all;
    -o-transition:1s linear all;
    transition:1s linear all;

    display:block!important;
    opacity:0;
}
.slide, .slide.ng-hide-remove.ng-hide-remove-active {
    opacity:1;
}

JavaScript

Đây là toàn bộ đoạn script mà các bạn cần sử dụng cho gallery chạy.

'use strict';

angular.module('photogallery', ['ngAnimate', 'ngTouch'])
  .controller('MainCtrl', function ($scope) {

    // Set of Photos
    $scope.photos = [
        {src: 'https://farm9.staticflickr.com/8042/7918423710_e6dd168d7c_b.jpg', desc: 'Image 01'},
        {src: 'https://farm9.staticflickr.com/8449/7918424278_4835c85e7a_b.jpg', desc: 'Image 02'},
        {src: 'https://farm9.staticflickr.com/8457/7918424412_bb641455c7_b.jpg', desc: 'Image 03'},
        {src: 'https://farm9.staticflickr.com/8179/7918424842_c79f7e345c_b.jpg', desc: 'Image 04'},
        {src: 'https://farm9.staticflickr.com/8315/7918425138_b739f0df53_b.jpg', desc: 'Image 05'},
        {src: 'https://farm9.staticflickr.com/8461/7918425364_fe6753aa75_b.jpg', desc: 'Image 06'}
    ];

    // initial image index
    $scope._Index = 0;

    // if a current image is the same as requested image
    $scope.isActive = function (index) {
        return $scope._Index === index;
    };

    // show prev image
    $scope.showPrev = function () {
        $scope._Index = ($scope._Index > 0) ? --$scope._Index : $scope.photos.length - 1;
    };

    // show next image
    $scope.showNext = function () {
        $scope._Index = ($scope._Index < $scope.photos.length - 1) ? ++$scope._Index : 0;
    };

    // show a certain image
    $scope.showPhoto = function (index) {
        $scope._Index = index;
    };
});

Nếu bạn nào chưa biết gì về Angular.js thì có lẽ sẽ hơi khó hiểu khi đọc đoạn code bên trên, rất tiếc là mình không có nhiều thời gian để giải thích cặn kẽ cho các bạn. Nếu các bạn có thắc mắc gì thì đừng ngần ngại để lại lời nhắn dưới dạng comment, để mình và mọi người có thể giải thích và chia sẻ kiến thức cho nhau.

Chúc các bạn thành công !

Tags: angular.js css3 photo gallery

Chuyên Mục: Css, Javascript

Bài viết được đăng bởi webmaster

0