WIP TimePicker - initial commit (not working), Added class for TouchGestures detection (for future use)
This commit is contained in:
parent
602c61568c
commit
f83eeeb03b
10
src/Connected.Components/Components/TimePicker.razor
Normal file
10
src/Connected.Components/Components/TimePicker.razor
Normal file
@ -0,0 +1,10 @@
|
||||
<div>
|
||||
<span>
|
||||
<input id="hour" type="number" min="0" max="59" step="1" @bind-value="@Hour" />
|
||||
<label for="hour">hrs</label>
|
||||
<input id="minute" type="number" min="0" max="59" step="1" @bind-value="@Minute" />
|
||||
<label for="minute">min</label>
|
||||
<input id="minute" type="number" min="0" max="59" step="1" @bind-value="@Second" />
|
||||
<label for="minute">sec</label>
|
||||
</span>
|
||||
</div>
|
20
src/Connected.Components/Components/TimePicker.razor.cs
Normal file
20
src/Connected.Components/Components/TimePicker.razor.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Connected.Components;
|
||||
public partial class TimePicker: ComponentBase
|
||||
{
|
||||
[Parameter]
|
||||
public TimeOnly Time { get; set; } = TimeOnly.FromDateTime(DateTime.Now);
|
||||
|
||||
private int Hour = 0;
|
||||
private int Minute = 0;
|
||||
private int Second = 0;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Hour = Time.Hour;
|
||||
Minute = Time.Minute;
|
||||
Second = Time.Second;
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
}
|
22
src/Connected.Components/Enums/TouchGesture.cs
Normal file
22
src/Connected.Components/Enums/TouchGesture.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Connected.Enums;
|
||||
public enum TouchGesture
|
||||
{
|
||||
[Description("swipeleft")]
|
||||
SwipeLeft,
|
||||
[Description("swiperight")]
|
||||
SwipeRight,
|
||||
[Description("swipeup")]
|
||||
SwipeUp,
|
||||
[Description("swipedown")]
|
||||
SwipeDown,
|
||||
[Description("pinch")]
|
||||
Pinch,
|
||||
[Description("zoom")]
|
||||
Zoom,
|
||||
[Description("tap")]
|
||||
Tap,
|
||||
[Description("none")]
|
||||
None,
|
||||
}
|
76
src/Connected.Components/Utilities/TouchGestures.cs
Normal file
76
src/Connected.Components/Utilities/TouchGestures.cs
Normal file
@ -0,0 +1,76 @@
|
||||
using Connected.Enums;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using System.Reflection.Metadata.Ecma335;
|
||||
|
||||
namespace Connected.Utilities;
|
||||
public static class TouchGestures
|
||||
{
|
||||
public static TouchGesture GetTouchGesture(TouchPoint[] TouchPoints, DateTime GestureStart)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (TouchPoints is not null)
|
||||
{
|
||||
/* handling tap
|
||||
* TouchPoints --> array with one point inside suggesting user tapped the screen
|
||||
*/
|
||||
if (TouchPoints.Length == 1)
|
||||
{
|
||||
var point = TouchPoints[0];
|
||||
return TouchGesture.Tap;
|
||||
}
|
||||
/* handling swipe with one finger
|
||||
* TouchPoints --> array of exactly two points start and end point, suggesting one finger was used and dragged across the screen
|
||||
*/
|
||||
if (TouchPoints.Length == 2)
|
||||
{
|
||||
var startPoint = TouchPoints[0];
|
||||
var endPoint = TouchPoints[1];
|
||||
|
||||
const double swipeThreshold = 0.8;
|
||||
var diffX = startPoint.ClientX - endPoint.ClientX;
|
||||
var diffY = startPoint.ClientY - endPoint.ClientY;
|
||||
var diffTime = DateTime.Now - GestureStart;
|
||||
var velocityX = Math.Abs(diffX / diffTime.Milliseconds);
|
||||
var velocityY = Math.Abs(diffY / diffTime.Milliseconds);
|
||||
|
||||
//dismiss touch gestures if user slowly touched the screen, preventing accidental or unwanted touches
|
||||
if (velocityX < swipeThreshold && velocityY < swipeThreshold)
|
||||
return TouchGesture.None;
|
||||
|
||||
//preventing false gesture detection if the swipe is too diagonal
|
||||
if (Math.Abs(velocityX - velocityY) < 0.5)
|
||||
return TouchGesture.None;
|
||||
|
||||
if (velocityX >= swipeThreshold)
|
||||
{
|
||||
if (diffX < 0)
|
||||
return TouchGesture.SwipeRight;
|
||||
else
|
||||
return TouchGesture.SwipeLeft;
|
||||
}
|
||||
if (velocityY >= swipeThreshold)
|
||||
{
|
||||
if (diffX < 0)
|
||||
return TouchGesture.SwipeUp;
|
||||
else
|
||||
return TouchGesture.SwipeDown;
|
||||
}
|
||||
}
|
||||
/* handling zoom, pinch, mutifinger swipe
|
||||
* TouchPoints --> array of more than 2 points, suggesting two or more fingers were used to make a gesture
|
||||
*/
|
||||
if (TouchPoints.Length > 2)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
}
|
||||
return TouchGesture.None;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return TouchGesture.None;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user