DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

The Latest JavaScript Topics

article thumbnail
Deploy React Apps for Free With Firebase
The fastest and easiest way to deploy your react apps online with fire-base hosting by google, explained step by step in detail with screenshots and snippets.
Updated July 6, 2020
by Yajas Sardana
· 48,782 Views · 28 Likes
article thumbnail
SVG-Path Animation in React Native
Program Statement: Designing mesmerizing, interactive timeline for the user’s weight loss journey. For the past few months, we are working on a health app that helps users in their weight loss journey. Here we call it more of a Wellness Journey. This app keeps track of your weight, your inches, water intake, and of course your calories. We are creating a platform that acts as a personal assistant in their journey. Lately, our users have been asking us for a feature in the app where they can view their entire journey i.e what was their weight when they started, and how things progressed along the weeks, their major achievements (things like the 1st pound lost, after a month and so on….). So we decided to give it a go. Read along to see what we came up with. Solution: After brainstorming with UX designer, UI designer, and fellow developers, and discussing multiple approaches from a simple listing to complex timelines we finally settled on the one which had maximum opportunity for micro-interactions, animation, and user engagement. The idea was to show the weight loss journey to a user, quite symbolic of the journey on the road which can have milestones in between based on the achievements the user has attained. A path that will be laid out in front of the user and then will be filled accordingly to the point where the user has reached a particular point in the duration of the program. Below is the final implementation of the feature in our app. I am only going to cover the animating path in this blog and other animation and interaction in the next one. Step 1 Drawing leader line Leader Line is the centerline (dotted line in the above video) which is equidistant from the inner and outer contour line. This is the simplest part of this animation. We have to draw a series of connected horizontal lines and semicircles. The above illustration explains how we draw in SVG. You can read more about SVG paths here. The negative sign in horizontal lines means we want our lines drawn from right to left. Arcs in SVG require extra attention. Arcs accept parameters as 'RX', 'ry', 'x-axis rotation', 'large arc flag', 'sweep flag', 'finalX', 'finalY'. As we are drawing a semicircle, we don’t need an 'x-axis rotation flag' and 'large arc flag'. 'Sweep flag' determines which side we want to draw. 1 means the positive side and 0 mean the negative side. To know more about SVG arc check this link. Java x 27 1 export function getPath(month, line) { 2 let fullPath = 'M90 100'; 3 const forwardLine = 'l${line.width} 0'; 4 const backwardLine = 'l${-line.width} 0'; 5 const leftCurve = 'a${line.radius} ${line.radius} 0 0 0 0 ${line.radius * 2}'; 6 const rightCurve = 'a${line.radius} ${line.radius} 0 0 1 0 ${ 7 line.radius * 2 8 }'; 9 10 for (let i = 0; i < month; ++i) { 11 if (i % 2 == 0) { 12 fullPath += '${forwardLine} ${rightCurve}'; 13 } else { 14 fullPath += '${backwardLine} ${leftCurve}'; 15 } 16 } 17 18 return fullPath; 19 } 20 . 21 . App.js 22 . 23 this.granularity = 5;this.leaderLineProperty = { 24 lineWidth: width - 180, 25 radius: 50, 26 }; 27 this.path = PathHelper.getPath(this.month, PathHelper.LeaderPathProperty); From the above line of code, we have our leader line ready. Step 2 For this step, I want you to stop and have a look at the animation video above. Our ultimate goal is to animate the path. For smooth animation, we have to break down into smaller segments and then attach them piece by piece. To divide the leader line into smaller chunks we will use the SVG-path-properties library. Java xxxxxxxxxx 1 40 1 // path is our leader line svg, totalDays is the no of segments we have divided our lines into radius is distance between leader line and outer, inner line 2 getPathProperty(path, totalDays, radius) { 3 const pathProperty = new svgPathProperties(path); 4 const pathSegmentArray = []; 5 6 let { 7 x: 8 previousX, y:previousY 9 } = pathProperty.getPropertiesAtLength(0); 10 11 for (let i = 1; i <= totalDays; ++i) { 12 const leaderSegment = (i / totalDays) * 13 pathProperty.getTotalLength(); 14 15 const{ x:lx, y:ly 16 } =pathProperty.getPropertiesAtLength(leaderSegment); 17 18 const diffX = lx - previousX; 19 const diffY = ly - previousY; 20 previousX = lx; 21 previousY = ly; 22 23 const angleForOuterContourLine = Math.atan2(diffY, diffX); 24 const angleForInnerContourLine = Math.PI - 25 angleForOuterContourLine; 26 27 const ox = lx + radius * Math.sin(angleForOuterContourLine); 28 const oy = ly - radius * Math.cos(angleForOuterContourLine); 29 const ix = lx - radius * Math.sin(angleForInnerContourLine); 30 const iy = ly - radius * Math.cos(angleForInnerContourLine); 31 32 const point = { 33 outer: {x: ox, y:oy }, 34 leader:{x: lx, y:ly }, 35 inner: {x: ix, y:iy }, 36 }; pathSegmentArray.push(point); 37 } 38 39 return pathSegmentArray; 40 } Suppose the height of the road is 20pt. Then to make a close path from a single line we need an outer and inner line having 10 points distance from the leader line each. In the above lines of codes, we get points for the leader line directly. Now we have to calculate the same for the inner and outer line. Another point of significance that I would like to mention here is that we just can’t subtract or add 10 to the leader lines to get our outer and the inner path without considering direction. Just like vectors, we will also use direction here and for this, we will use our old friend ‘Trigonometry’. We will get two points on the leader line and find the angle between the line formed by the last two points and the x-axis. If you have two points, (x0, y0) and (x1, y1), then the angle of the line joining them (relative to the X-axis) is given by: theta = atan2((y1 – y0), (x1 – x0)) We know tanθ = Perpendicular / Base = (Difference in height)/(Difference in width). We can calculate θ by using the formula for the tan inverse. After calculating angle we calculate x and y position as: Δx = radius * sin(θ) Δy = radius * cos(θ) Step 3 Now since we have coordinates for the inner and outer path, we need to translate them into a closed SVG path to form our road. Here D3 library comes to our rescue. We use the d3-shapes’ “area” method to get our path. Java xxxxxxxxxx 1 45 1 // progress is a no. between 0 to totalDays and 'pathSegment' is an object containing our inner and outer path segmentsexport const calculateProgressArea = (progress, pathSegment) => { 2 const forwardArray = []; 3 const backwardArray = []; 4 5 let point = pathSegment[0]; 6 forwardArray.push(point.outer); 7 backwardArray.push(point.inner); 8 9 for (let i = 1; i < progress; ++i) { 10 point = pathSegment[i]; 11 forwardArray.push(point.outer); 12 backwardArray.push(point.inner); 13 } 14 15 backwardArray.reverse(); 16 const allPoint = [...forwardArray, ...backwardArray, forwardArray[0]]; 17 18 const area = d3 19 .area() 20 .x1((x) => { 21 return x.x; 22 }) 23 .y1((y) => { 24 return y.y; 25 }) 26 .y0(allPoint[0].y) 27 .x0(allPoint[0].x); 28 29 return area(allPoint); 30 };. 31 . In App.js 32 .this.area = PathHelper.calculateProgressArea( 33 this.totalDays, 34 this.pathSegmentArray, 35 );. 36 . In render function 37 . 38 45 Please note that I am appending the Inner path point at the end of the Outer path point. Step 4 Till now we have only laid down the solid block of the path. Now we have to animate the path as well. As I said earlier, for animating the path we will render pieces after pieces. By pieces, I meant we will take a small subset from the outer and inner path segment array and convert it into a path and render it. Java xxxxxxxxxx 1 15 1 addAnimationListener = () => { 2 this.state.animation.addListener(({value}) => { 3 const progress = value * this.totalDays; 4 const path = PathHelper.calculateProgressArea( 5 progress, 6 this.pathSegmentArray, 7 ); 8 9 if (this.progressPath) { 10 this.progressPath.setNativeProps({ 11 d: path, 12 }); 13 } 14 }); 15 }; Final output:-
Updated July 6, 2020
by Nitish Prasad
· 9,898 Views · 1 Like
article thumbnail
Deploy Your Angular App on GitHub Pages
Learn more about deploying your Angular app on GitHub Pages.
Updated June 30, 2020
by Sanjay Saini
· 39,917 Views · 8 Likes
article thumbnail
Create Progress Bar Using Ngx-Bootstrap In Angular 8
In this article, we are going to learn how to create a progress bar using ngx-bootstrap in Angular 8.
June 29, 2020
by Siddharth Gajbhiye
· 11,892 Views · 3 Likes
article thumbnail
How to Add Responsive Design to React Native Apps
In this article, we discuss how to make React Native apps responsive with Flexbox, aspect ratios, and Facebook's Dimesions API.
June 29, 2020
by Gilad David Maayan
· 50,694 Views · 2 Likes
article thumbnail
Ngx-Bootstrap DateRange Picker and Date Picker
In this article, we are going to learn the use of Ngx-Bootstrap DateRange Picker and Date Picker in Angular 8.
June 26, 2020
by Siddharth Gajbhiye
· 23,463 Views · 2 Likes
article thumbnail
Stretching Async/Await With Lambdas
Are you doing the right use of async/await without constraining scalability? Check out some use cases providing limited concurrency and the right fixes.
June 25, 2020
by Miguel Gamboa
· 19,544 Views · 23 Likes
article thumbnail
Discussing State Management in Angular and Vue
Let’s see how state management (Server, Persistent, router, Client, Transient, and Local UI) goes for frameworks like Angular and Vue.
June 25, 2020
by Hiren Dhaduk
· 14,051 Views · 2 Likes
article thumbnail
Angular Logging and Log-Back
In this article, we will see how to do Client-Side Logging and Server Side Log-back in an Angular application.
Updated June 22, 2020
by Aakash Jangid
· 27,555 Views · 5 Likes
article thumbnail
Debug a Node.js Application Running in a Docker Container
This article shows how you can debug a simple Node.js application running in a Docker container. Use this tutorial as a reference while building your own!
June 19, 2020
by Sudip Sengupta DZone Core CORE
· 19,508 Views · 4 Likes
article thumbnail
Protractor Tutorial: Handle Mouse Actions and Keyboard Events
With keyboard and mouse actions, you can perform hover, drag and drop, keys up events. See how to use them with the Action class in Selenium Protractor!
June 19, 2020
by Harshit Paul
· 9,377 Views · 4 Likes
article thumbnail
React Native WebView — Loading HTML in React Native
In this article, see a tutorial on how to load HTML in React Native.
June 17, 2020
by Krissanawat Kaewsanmuang
· 15,431 Views · 2 Likes
article thumbnail
How to Develop Your Node.Js Docker Applications Faster
In this article, we’ll show a tutorial and example on how to use Docker’s host volumes and nodemon to write Node faster and radically reduce the time you spend testing.
June 16, 2020
by Ethan J Jackson
· 12,869 Views · 4 Likes
article thumbnail
How to Use a Camera in React Native
In this article, we will describe the basic implementation of Capturing Photos and Videos in React Native.
June 16, 2020
by krissanawatt kaewsanmunag
· 9,987 Views · 1 Like
article thumbnail
The Fastest JavaScript Data Grid — A Performance Analysis
There are many data grid offerings in the market that tout enhanced capabilities to display and manage analysis. We set out to see which popular offerings can withstand the true test of performance as it relates to “Big Data”.
June 16, 2020
by David Greene
· 10,958 Views · 3 Likes
article thumbnail
Working With Timers in Node.js
In this post, we will see what timers are in general and how we can use timers in our Node.js applications.
June 11, 2020
by Jawad Hasan Shani DZone Core CORE
· 9,075 Views · 2 Likes
article thumbnail
Basic Guide for Debian Packaging (NodeJS)
The demand for application software is high. Debian comes with over 51,000 packages — for free! Check out this basic guide for Debian packaging. (NodeJS)
June 9, 2020
by Manas Kashyap
· 4,751 Views · 5 Likes
article thumbnail
Node.js Http Module to Consume Spring RESTful Web Application
In this article, we discuss how to use Node's HTTP module to perform CRUD operations on the frontend of a full-stack app.
June 8, 2020
by Divya M
· 11,990 Views · 3 Likes
article thumbnail
Handling Multiple Windows With Protractor For Selenium Testing
Learn how to handle multiple browser windows and tabs in Protractor framework for Selenium with examples in this complete guide. Read Now!
June 5, 2020
by Aditya Dwivedi
· 8,999 Views · 1 Like
article thumbnail
How to Use Bootstrap to Build Beautiful Angular Apps
Take a look at this detailed tutorial that demonstrates how to use Bootstrap to build an Angular application from start to finish.
June 5, 2020
by Matt Raible
· 7,231 Views · 1 Like
  • Previous
  • ...
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • ...
  • Next
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook
×