{"id":101,"date":"2017-09-28T08:47:21","date_gmt":"2017-09-28T08:47:21","guid":{"rendered":"http:\/\/localhost\/namos\/?page_id=101"},"modified":"2026-01-20T16:45:48","modified_gmt":"2026-01-20T15:45:48","slug":"about","status":"publish","type":"page","link":"https:\/\/www.chloemelody.com\/index.php\/about\/","title":{"rendered":"About me"},"content":{"rendered":"<p>[vc_row css=&#8220;.vc_custom_1506588475272{padding-top: 240px !important;padding-bottom: 100px !important;}&#8220;][vc_column width=&#8220;1\/2&#8243; animate=&#8220;fade&#8220;]  \n  <div class=\"title\">\n      <h3> chloemelody<\/h3> \n      <ul class=\"list\">\n<li><strong>motion design<\/strong><\/li>\n<li><strong>illustration<\/strong><\/li>\n<li><strong>animation<\/strong><\/li>\n<\/ul>\n  <\/div>\n\n[\/vc_column][vc_column width=&#8220;1\/2&#8243; animate=&#8220;fade&#8220;][vc_column_text el_class=&#8220;subtitle-big&#8220; css=&#8220;.vc_custom_1729504759929{margin-bottom: 0px !important;}&#8220;]I am a freelancer specialized in 2d and 3D motiondesign, illustration and animation with 15 years of experience.<\/p>\n<p>In my career so far, I have collaborated with a wide range of brands and developed a broad spectrum of styles and techniques.<br \/>\nWhether it\u2019s dynamic animations for social media, explanatory films, product visualizations, fair appearance and shows, I love bringing typography, graphics, and characters to life.<\/p>\n<p>&nbsp;<\/p>\n<p>[\/vc_column_text][vc_column_text el_class=&#8220;subtitle-big&#8220;]<strong>Software:<\/strong><br \/>\n2D &#8211; After Effects \/ Trapcode, Plexus, Elements 3D, Optical Flares,<br \/>\nPhotoshop, Illustrator, Procreate<\/p>\n<p>3D &#8211; Cinema 4D \/ xParticles, Octane, Redshift[\/vc_column_text][\/vc_column][\/vc_row][vc_row fullwidth=&#8220;yes&#8220;][vc_column]  \n<div class=\"section big-height\">\n    <div class=\"parallax\" style=\"background-image: url('https:\/\/www.chloemelody.com\/wp-content\/uploads\/2019\/12\/B\u00fcro_2.png')\"><\/div>\n<\/div>\n[\/vc_column][\/vc_row][vc_row css=&#8220;.vc_custom_1506673783592{padding-top: 100px !important;padding-bottom: 100px !important;}&#8220;][vc_column width=&#8220;1\/4&#8243; animate=&#8220;bottommove&#8220; distance=&#8220;60&#8243; time=&#8220;0.9&#8243; after=&#8220;0.1&#8243;]  \n  <div class=\"title\">\n      <h6> <strong>-<\/strong>Chloe Dolic<\/h6> \n        <\/div>\n\n[\/vc_column][vc_column width=&#8220;3\/4&#8243; animate=&#8220;bottommove&#8220; distance=&#8220;60&#8243; time=&#8220;0.9&#8243; after=&#8220;0.1&#8243;]\t\n  <div class=\"content-team\">\n    <div class=\"slideshow-team\">\n            <div class=\"pieces\" style=\"background-image: url(https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/ChloeFoto.png)\"><\/div>\n    <\/div>\n    <nav class=\"menu-team\">\n          <\/nav>\n  <\/div>\n<script type=\"text\/javascript\">\n(function($) { \"use strict\";\n    $(document).ready(function() {\n  \/**\n * pieces.js\n * http:\/\/www.codrops.com\n *\n * Licensed under the MIT license.\n * http:\/\/www.opensource.org\/licenses\/mit-license.php\n * \n * Copyright 2017, Codrops\n * http:\/\/www.codrops.com\n *\/\n{\n  \/\/ Helper vars and functions.\n  const is3DBuggy = navigator.userAgent.indexOf('Firefox') > 0;\n\n  \/\/ From https:\/\/davidwalsh.name\/javascript-debounce-function.\n  function debounce(func, wait, immediate) {\n    var timeout;\n    return function() {\n      var context = this, args = arguments;\n      var later = function() {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  };\n\n  \/\/ from http:\/\/www.quirksmode.org\/js\/events_properties.html#position\n  const getMousePos = (e) => {\n    let posx = 0;\n    let posy = 0;\n    if (!e) {let e = window.event};\n    if (e.pageX || e.pageY)   {\n      posx = e.pageX;\n      posy = e.pageY;\n    }\n    else if (e.clientX || e.clientY)  {\n      posx = e.clientX + document.body.scrollLeft\n        + document.documentElement.scrollLeft;\n      posy = e.clientY + document.body.scrollTop\n        + document.documentElement.scrollTop;\n    }\n    return {\n      x : posx,\n      y : posy\n    };\n  }\n\n  class Pieces {\n    constructor(el, options) {\n      this.DOM = {};\n      this.DOM.el = el;\n      this.options = {\n        \/\/ Number of pieces \/ Layout (rows x cols).\n        pieces: {rows: 12, columns: 10},\n        hasTilt: false,\n        \/\/ Main image tilt: max and min angles.\n        tilt: {maxRotationX: -2, maxRotationY: 2, maxTranslationX: 4, maxTranslationY: -2},\n        delay: 0, \/\/ Number || Array(random number from [min,max], e.g. [0,300] would set a random delay per piece from 0 to 300)\n        \/\/ background image src.\n        bgimage: 'none',\n        \/\/ default animations:\n        animationDefaults: {\n          duration: 600,\n          easing: [0.2,1,0.3,1],\n          delay: (t,i) => {\n            return i*parseInt(t.dataset.delay);\n          },\n          translateX: (t,i) => { \n            return t.dataset.column < this.getTotalColumns()\/2 ? anime.random(50,100)+'px' : anime.random(-100,-50)+'px';\n          },\n          translateY: (t,i) => { \n            return anime.random(-1000,-800)+'px';\n          },\n          opacity: {\n            value: 0,\n            duration: 600,\n            easing: 'linear'\n          }\n        }\n      };\n      Object.assign(this.options, options);\n      this.init();\n    }\n    init() {\n      \/\/ Window sizes.\n      this.win = {width: window.innerWidth, height: window.innerHeight};\n      \/\/ Container sizes.\n      this.dimensions = {width: this.DOM.el.offsetWidth, height: this.DOM.el.offsetHeight};\n      \/\/ Render all the pieces defined in the options.\n      this.layout();\n      \/\/ Init tilt.\n      if ( this.options.hasTilt ) {\n        this.initTilt();\n      }\n      \/\/ Init\/Bind events\n      this.initEvents();\n    }\n    layout() {\n      \/\/ The source of the main image.\n      this.imgsrc = this.DOM.el.style.backgroundImage.replace('url(','').replace(')','').replace(\/\\\"\/gi, \"\");\n      \/\/ The background image.\n      this.DOM.el.style.backgroundImage = this.options.bgimage !== 'none' ? `url(${this.options.bgimage})` : 'none';\n      \/\/ Create the pieces and add them to the DOM (append it to the main element).\n      this.pieces = [];\n      for (let r = 0; r < this.options.pieces.rows; r++) {\n        for (let c = 0; c < this.options.pieces.columns; c++) {\n          const piece = this.createPiece(r,c);  \n          piece.style.backgroundPosition = `${-1*c*100}% ${-1*100*r}%`;\n          this.pieces.push(piece);\n        }\n      }\n    }\n    createPiece(row, column) {\n      const w = Math.round(this.dimensions.width\/this.options.pieces.columns);\n      const h = Math.round(this.dimensions.height\/this.options.pieces.rows);\n      const piece = document.createElement('div');\n\n      piece.style.backgroundImage = `url(${this.imgsrc})`;\n      piece.className = 'piece';\n      piece.style.width = `${w}px`;\n      piece.style.height = `${h}px`;\n      piece.style.backgroundSize = `${w*this.options.pieces.columns+4}px auto`;\n      piece.dataset.row = row;\n      piece.dataset.column = column;\n      piece.dataset.delay = this.options.delay instanceof Array ? anime.random(this.options.delay[0],this.options.delay[1]) : this.options.delay;\n      this.DOM.el.appendChild(piece);\n      this.DOM.el.style.width = `${w*this.options.pieces.columns}px`;\n      this.DOM.el.style.height = `${h*this.options.pieces.rows}px`;\n\n      return piece;\n    }\n    \/\/ Set the pieces background image.\n    setImage(imgsrc) {\n      this.imgsrc = imgsrc;\n      for(const piece of this.pieces) {\n        piece.style.backgroundImage = `url(${this.imgsrc})`;\n      }\n    }\n    initTilt() {\n      if ( is3DBuggy ) return;\n      this.DOM.el.style.transition = 'transform 0.2s ease-out';\n      this.tilt = true;\n    }\n    removeTilt() {\n      if ( is3DBuggy ) return;\n      this.tilt = false;\n    }\n    initEvents() {\n      \/\/ Mousemove event \/ Tilt functionality.\n      const onMouseMoveFn = (ev) => {\n        requestAnimationFrame(() => {\n          if ( !this.tilt ) {\n            if ( is3DBuggy ) {\n              this.DOM.el.style.transform = 'none';\n            }\n            return false;\n          }\n          const mousepos = getMousePos(ev);\n          const docScrolls = {left : document.body.scrollLeft + document.documentElement.scrollLeft, top : document.body.scrollTop + document.documentElement.scrollTop};\n          const mouseposScroll = { x : mousepos.x - docScrolls.left, y : mousepos.y - docScrolls.top };\n          const rotX = 2*this.options.tilt.maxRotationX\/this.win.height*mouseposScroll.y - this.options.tilt.maxRotationX;\n          const rotY = 2*this.options.tilt.maxRotationY\/this.win.width*mouseposScroll.x - this.options.tilt.maxRotationY;\n          const transX = 2*this.options.tilt.maxTranslationX\/this.win.width*mouseposScroll.x - this.options.tilt.maxTranslationX;\n          const transY = 2*this.options.tilt.maxTranslationY\/this.win.height*mouseposScroll.y - this.options.tilt.maxTranslationY;\n\n          this.DOM.el.style.transform = `perspective(1000px) translate3d(${transX}px, ${transY}px,0) rotate3d(1,0,0,${rotX}deg) rotate3d(0,1,0,${rotY}deg)`;\n        });\n      };\n\n      \/\/ Window resize.\n      const onResizeFn = debounce(() => {\n        this.win = {width: window.innerWidth, height: window.innerHeight};\n        this.DOM.el.style.width = this.DOM.el.style.height = '';\n        const elBounds = this.DOM.el.getBoundingClientRect();\n        this.dimensions = {width: elBounds.width, height: elBounds.height};\n        for (let i = 0, len = this.pieces.length; i < len; i++) {\n          const w = Math.round(this.dimensions.width\/this.options.pieces.columns);\n          const h = Math.round(this.dimensions.height\/this.options.pieces.rows);\n          const piece = this.pieces[i];\n          \n          piece.style.width = `${w}px`;\n          piece.style.height = `${h}px`;\n          piece.style.backgroundSize = `${w*this.options.pieces.columns+4}px auto`;\n          this.DOM.el.style.width = `${w*this.options.pieces.columns}px`;\n          this.DOM.el.style.height = `${h*this.options.pieces.rows}px`;\n        }\n      }, 20);\n\n      document.addEventListener('mousemove', onMouseMoveFn);\n      window.addEventListener('resize', (ev) => onResizeFn());\n    }\n    getTotalRows() {\n      return this.options.pieces.rows;\n    }\n    getTotalColumns() {\n      return this.options.pieces.columns;\n    }\n    animate(animeopts) {\n      animeopts = animeopts || this.options.animationDefaults;\n      let opts = {\n        targets: this.pieces\n      };\n      Object.assign(opts, animeopts);\n      anime.remove(this.pieces);\n      anime(opts);\n    }\n  };\n  window.Pieces = Pieces;\n};\n\n    {\n      \n      const menuItems = Array.from(document.querySelectorAll('.menu-team > .menu__item-team'));\n      \n      const piecesObj = new Pieces(document.querySelector('.slideshow-team > .pieces'), {\n        pieces: {rows: 14, columns: 12},\n        delay: [0,40],\n        hasTilt: true,\n        tilt: {\n          maxRotationX: -1, \n          maxRotationY: -1, \n          maxTranslationX: -5, \n          maxTranslationY: -2\n        }\n      });\n      \n      let isAnimating = false;\n      let current = 0;\n\n      const openImage = (ev, item, pos) => {\n        ev.preventDefault();\n        if ( isAnimating || current === pos ) {\n          return false;\n        }\n        isAnimating = true;\n        menuItems[current].classList.remove('menu__item--current-team');\n        current = pos;\n        menuItems[current].classList.add('menu__item--current-team');\n        const imgsrc = item.dataset.image;\n\n        piecesObj.animate({\n          duration: 200,\n          easing: 'easeOutQuad',\n          delay: (t,i,l) => {\n            return parseInt(t.dataset.row) * parseInt(t.dataset.delay);\n          },\n          translateX: (t,i) => {\n            return anime.random(-50,50)+'px';\n          },\n          translateY: (t,i) => { \n            return anime.random(-800,-200)+'px';\n          },\n          rotateZ: (t,i) => { \n            return anime.random(-45,45)+'deg';\n          },\n          opacity: 0,\n          complete: () => {\n            piecesObj.setImage(imgsrc);\n\n            piecesObj.animate({\n              duration: 500,\n              easing: [0.3,1,0.3,1],\n              delay: (t,i,l) => {\n                return parseInt(t.dataset.row) * parseInt(t.dataset.delay);\n              },\n              translateX: 0,\n              translateY: () => {\n                return [anime.random(200,800)+'px','0px'];\n              },\n              rotateZ: 0,\n              opacity: {\n                value: 1,\n                duration: 500,\n                easing: 'linear'\n              },\n              complete: () => {\n                isAnimating = false;\n              }\n            });\n          }\n        });\n      };\n\n      menuItems.forEach((item,pos) => item.addEventListener('click', (ev) => openImage(ev,item,pos)));\n    } \n});\n})(jQuery);\n\n<\/script>\n[\/vc_column][\/vc_row][vc_row css=&#8220;.vc_custom_1506594497644{padding-top: 100px !important;padding-bottom: 100px !important;}&#8220;][vc_column width=&#8220;1\/4&#8243; animate=&#8220;bottommove&#8220; distance=&#8220;60&#8243; time=&#8220;0.9&#8243; after=&#8220;0.1&#8243;]  \n  <div class=\"title\">\n      <h6> <strong>-<\/strong>what I do<\/h6> \n        <\/div>\n\n[\/vc_column][vc_column width=&#8220;1\/4&#8243;]  \n  <div class=\"about-wrap\">\n    <div class=\"about-icon\">\n      <i class=\"\"><\/i>\n    <\/div>\n    <h6>Motion Design<\/h6>\n    <p>2D and 3D<\/p>\n  <\/div>\n\n[\/vc_column][vc_column width=&#8220;1\/4&#8243;]  \n  <div class=\"about-wrap\">\n    <div class=\"about-icon\">\n      <i class=\"\"><\/i>\n    <\/div>\n    <h6>Illustration<\/h6>\n    <p>Characterdesign, Storyboards, Wall designs and Lettering<\/p>\n  <\/div>\n\n[\/vc_column][vc_column width=&#8220;1\/4&#8243;]  \n  <div class=\"about-wrap\">\n    <div class=\"about-icon\">\n      <i class=\"\"><\/i>\n    <\/div>\n    <h6>Animation<\/h6>\n    <p>Frame by frame animation, Mixed Media<\/p>\n  <\/div>\n\n[\/vc_column][\/vc_row][vc_row css=&#8220;.vc_custom_1506672829674{padding-top: 100px !important;padding-bottom: 100px !important;}&#8220;][vc_column]            \n        <div id=\"owl-logos-8700259\" class=\"owl-logos owl-carousel owl-theme\">\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Porsche.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Kia.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Ferrero.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/VW.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Pepsi.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Audi.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Deutsche-Bank.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/opel.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/ZDFdigital.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Tesa.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Allianz.png\" alt=\"\"><\/div>\n                            <div class=\"item\"><img decoding=\"async\" src=\"https:\/\/www.chloemelody.com\/wp-content\/uploads\/2024\/10\/Braun.png\" alt=\"\"><\/div>\n                    <\/div>\n\n        <script>\n            (function($) { \"use strict\";\n                $(document).ready(function() {\n                    $(\"#owl-logos-8700259\").owlCarousel({\n                      items : 5,\n                      itemsDesktop : [1000,4], \n                      itemsDesktopSmall : [900,3],\n                      itemsTablet: [600,2], \n                      itemsMobile : false, \n                      navigation: false,\n                      pagination : false,\n                      autoPlay : 3000,\n                      slideSpeed : 300\n                    });\n                }); \n            })(jQuery); \n        <\/script>\n\n[\/vc_column][\/vc_row]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[vc_row css=&#8220;.vc_custom_1506588475272{padding-top: 240px !important;padding-bottom: 100px !important;}&#8220;][vc_column width=&#8220;1\/2&#8243; animate=&#8220;fade&#8220;][\/vc_column][vc_column width=&#8220;1\/2&#8243; animate=&#8220;fade&#8220;][vc_column_text el_class=&#8220;subtitle-big&#8220; css=&#8220;.vc_custom_1729504759929{margin-bottom: 0px !important;}&#8220;]I am a freelancer specialized in 2d and 3D motiondesign, illustration and animation with 15 years of experience. In my career so far, I have collaborated with a wide range of brands and developed a broad spectrum of styles and techniques. Whether [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/template-canvas.php","meta":{"footnotes":""},"class_list":["post-101","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/pages\/101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/comments?post=101"}],"version-history":[{"count":23,"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/pages\/101\/revisions"}],"predecessor-version":[{"id":891,"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/pages\/101\/revisions\/891"}],"wp:attachment":[{"href":"https:\/\/www.chloemelody.com\/index.php\/wp-json\/wp\/v2\/media?parent=101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}