Giỏ hàng
Những tiêu chí của đồng phục cho nhân viên.
    Tin tức

Những tiêu chí của đồng phục cho nhân viên.

29/10/2020

Tiêu chí bạn cần quan tâm khi thiết kế đồng phục, giúp bạn có thể tạo nên mẫu thiết kế phù hợp nhất.

Vải thun CARO THÁI - Giải pháp hoàn hảo cho áo thun đồng phục
    Tin tức

Vải thun CARO THÁI - Giải pháp hoàn hảo cho áo thun đồng phục

10/10/2020

Caro Thái là bền đẹp, không nhăn và xù lông trong quá trình sử dụng. Phù hơp cho việc may áo thun đồng phục công ty, nhân viên, quà tặng khách hàng...

BẢNG MÀU VẢI KAKI
    Tin tức

BẢNG MÀU VẢI KAKI

08/05/2020

Bảng màu vải kaki

ÁO ĐẸP CẦN LÀ CÓ DANA SPORT
    Tin tức

ÁO ĐẸP CẦN LÀ CÓ DANA SPORT

25/04/2020

Áo đủ size, bền đẹp, lấy nhanh siêu tốc trong ngày.

XU HƯỚNG ÁO ĐỒNG PHỤC NHÂN VIÊN QUÁN ĂN, CỬA HÀNG, SHOP 2020
    Tin tức

XU HƯỚNG ÁO ĐỒNG PHỤC NHÂN VIÊN QUÁN ĂN, CỬA HÀNG, SHOP 2020

21/06/2019

Đồng phục nhân bạn đã biết chọn lựa như thế nào cho phù hợp chưa? Nếu chưa thì hãy cùng với chúng tôi xem ngay bí quyết chọn nhé.

CHI NHANH 19 NGÔ VĂN SỞ - Q. LIÊN CHIỂU - ĐÀ NẴNG
    THÔNG BÁO

CHI NHANH 19 NGÔ VĂN SỞ - Q. LIÊN CHIỂU - ĐÀ NẴNG

21/02/2015

KHAI TRƯƠNG CHI NHANH 19 NGÔ VĂN SỞ - Q. LIÊN CHIỂU - ĐÀ NẴNG LÀM ÁO LỚP VỚI GIÁ CHỈ 65K

CHỌN MÀU CHO ÁO ĐỒNG PHỤC CỦA BẠN
    Tin tức

CHỌN MÀU CHO ÁO ĐỒNG PHỤC CỦA BẠN

09/12/2014

Chọn màu sắc theo hình ảnh minh họa có mã số màu cụ thể

TỔNG HỢP MẪU ÁO ĐỒNG PHỤC LỚP ĐẸP, PHONG CÁCH
    Tin tức

TỔNG HỢP MẪU ÁO ĐỒNG PHỤC LỚP ĐẸP, PHONG CÁCH

26/11/2014

Áo lớp phát triển một cách rộng dãi với nhiều mẫu áo với kiểu dáng mẫu mã khác nhau. Mỗi mẫu áo tạo ra những vẻ đẹp cùng với cá tính riêng. Nhằm giúp cho các bạn có những bộ áo lớp thật tuyệt vời lưu lại những kỉ niệm đặc biệt. Các bạn thể tham khảo cho những mẫu áo lớp để chọn cho lớp mình những mấu áo lớp đẹp và phụ hợp nhé.

ÁO THUN  - MÓN QUÀ Ý NGHĨA ĐỂ TRI ÂN KHÁCH HÀNG
    Tin tức

ÁO THUN - MÓN QUÀ Ý NGHĨA ĐỂ TRI ÂN KHÁCH HÀNG

10/11/2014

Lựa chọn quà tặng như thế nào và hình thức khuyến mãi ra sao để vừa có món quà ý nghĩa và thiết thực đối với khách hàng mà doanh nghiệp có thể tiết kiệm chi phí?

Áo thun DANA SPORT chương trình từ thiện
    SỰ KIỆN

Áo thun DANA SPORT chương trình từ thiện

29/03/2014

Áo thun DANA SPORT chương trình từ thiện cùng Samsung – Mỗi bước chạy, một tương lai

<canvas id="c"></canvas>

canvas {
  display: block;
  width: 100vw;
  height: 100vh;
}


var c = document.getElementById("c");
var ctx = c.getContext("2d");
var cH;
var cW;
var bgColor = "#FF6138";
var animations = [];
var circles = [];

var colorPicker = (function() {
  var colors = ["#FF6138", "#FFBE53", "#2980B9", "#282741"];
  var index = 0;
  function next() {
    index = index++ < colors.length-1 ? index : 0;
    return colors[index];
  }
  function current() {
    return colors[index]
  }
  return {
    next: next,
    current: current
  }
})();

function removeAnimation(animation) {
  var index = animations.indexOf(animation);
  if (index > -1) animations.splice(index, 1);
}

function calcPageFillRadius(x, y) {
  var l = Math.max(x - 0, cW - x);
  var h = Math.max(y - 0, cH - y);
  return Math.sqrt(Math.pow(l, 2) + Math.pow(h, 2));
}

function addClickListeners() {
  document.addEventListener("touchstart", handleEvent);
  document.addEventListener("mousedown", handleEvent);
};

function handleEvent(e) {
    if (e.touches) { 
      e.preventDefault();
      e = e.touches[0];
    }
    var currentColor = colorPicker.current();
    var nextColor = colorPicker.next();
    var targetR = calcPageFillRadius(e.pageX, e.pageY);
    var rippleSize = Math.min(200, (cW * .4));
    var minCoverDuration = 750;
    
    var pageFill = new Circle({
      x: e.pageX,
      y: e.pageY,
      r: 0,
      fill: nextColor
    });
    var fillAnimation = anime({
      targets: pageFill,
      r: targetR,
      duration:  Math.max(targetR / 2 , minCoverDuration ),
      easing: "easeOutQuart",
      complete: function(){
        bgColor = pageFill.fill;
        removeAnimation(fillAnimation);
      }
    });
    
    var ripple = new Circle({
      x: e.pageX,
      y: e.pageY,
      r: 0,
      fill: currentColor,
      stroke: {
        width: 3,
        color: currentColor
      },
      opacity: 1
    });
    var rippleAnimation = anime({
      targets: ripple,
      r: rippleSize,
      opacity: 0,
      easing: "easeOutExpo",
      duration: 900,
      complete: removeAnimation
    });
    
    var particles = [];
    for (var i=0; i<32; i++) {
      var particle = new Circle({
        x: e.pageX,
        y: e.pageY,
        fill: currentColor,
        r: anime.random(24, 48)
      })
      particles.push(particle);
    }
    var particlesAnimation = anime({
      targets: particles,
      x: function(particle){
        return particle.x + anime.random(rippleSize, -rippleSize);
      },
      y: function(particle){
        return particle.y + anime.random(rippleSize * 1.15, -rippleSize * 1.15);
      },
      r: 0,
      easing: "easeOutExpo",
      duration: anime.random(1000,1300),
      complete: removeAnimation
    });
    animations.push(fillAnimation, rippleAnimation, particlesAnimation);
}

function extend(a, b){
  for(var key in b) {
    if(b.hasOwnProperty(key)) {
      a[key] = b[key];
    }
  }
  return a;
}

var Circle = function(opts) {
  extend(this, opts);
}

Circle.prototype.draw = function() {
  ctx.globalAlpha = this.opacity || 1;
  ctx.beginPath();
  ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI, false);
  if (this.stroke) {
    ctx.strokeStyle = this.stroke.color;
    ctx.lineWidth = this.stroke.width;
    ctx.stroke();
  }
  if (this.fill) {
    ctx.fillStyle = this.fill;
    ctx.fill();
  }
  ctx.closePath();
  ctx.globalAlpha = 1;
}

var animate = anime({
  duration: Infinity,
  update: function() {
    ctx.fillStyle = bgColor;
    ctx.fillRect(0, 0, cW, cH);
    animations.forEach(function(anim) {
      anim.animatables.forEach(function(animatable) {
        animatable.target.draw();
      });
    });
  }
});

var resizeCanvas = function() {
  cW = window.innerWidth;
  cH = window.innerHeight;
  c.width = cW * devicePixelRatio;
  c.height = cH * devicePixelRatio;
  ctx.scale(devicePixelRatio, devicePixelRatio);
};

(function init() {
  resizeCanvas();
  if (window.CP) {
    // CodePen's loop detection was causin' problems
    // and I have no idea why, so...
    window.CP.PenTimer.MAX_TIME_IN_LOOP_WO_EXIT = 6000; 
  }
  window.addEventListener("resize", resizeCanvas);
  addClickListeners();
  if (!!window.location.pathname.match(/fullcpgrid/)) {
    startFauxClicking();
  }
  handleInactiveUser();
})();

function handleInactiveUser() {
  var inactive = setTimeout(function(){
    fauxClick(cW/2, cH/2);
  }, 2000);
  
  function clearInactiveTimeout() {
    clearTimeout(inactive);
    document.removeEventListener("mousedown", clearInactiveTimeout);
    document.removeEventListener("touchstart", clearInactiveTimeout);
  }
  
  document.addEventListener("mousedown", clearInactiveTimeout);
  document.addEventListener("touchstart", clearInactiveTimeout);
}

function startFauxClicking() {
  setTimeout(function(){
    fauxClick(anime.random( cW * .2, cW * .8), anime.random(cH * .2, cH * .8));
    startFauxClicking();
  }, anime.random(200, 900));
}

function fauxClick(x, y) {
  var fauxClick = new Event("mousedown");
  fauxClick.pageX = x;
  fauxClick.pageY = y;
  document.dispatchEvent(fauxClick);
}