آموزش ساخت سخنان انگیزشی روزانه + ساعت و تاریخ با js

ساخت سخنان انگیزشی روزانه با js – برخی از وبسایت ها قصد دارند که سخنی از بزرگان یا افراد موفق را به صورت روزانه نمایش دهند .
در این آموزش قصد داریم علاوه بر نقل قول های روزانه ساعت و تاریخ را نمایش دهیم همچنین یک خلاقیت جالبی که به خرج خواهیم داد استفاده از آیکون روز یا شب در برنامه است که در زمان روشنایی بخش روز فعال و در زمانی که هوا تاریک است شب را نمایش می دهد .
صفحه اصلی برنامه index.html
قبل از هر کاری کتابخانه تبدیل تاریخ میلادی به شمسی farvardin.js را دانلود کرده و همانند زیر ضمیمه کنید .
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<title>Rapidcode.iR - سورس کد</title>
<link rel="stylesheet" href="static/css/main.css">
</head>
<body>
<div class="container">
<a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>
<div class="day-quote">
<div class="dan-status">
<img class="dan" id="day" src="static/img/dan-status.svg" alt="status">
<div class="dan-cover"></div>
</div>
<div class="date-details">
<div class="dt time"><strong>ساعت : </strong><span id="val">x1</span></div><br>
<div class="dt date"><strong>تاریخ : </strong><span id="val">x2</span></div><br>
<div class="dt quote"><strong>نقل قول : </strong><p id="val">x3</p><a id="val2" href="#">x4</a></div>
</div>
<div class="clearfix"></div>
</div>
</div>
<script src="static/js/lib/farvardin.min.js"></script>
<script src="static/js/app.js"></script>
</body>
</html>
فایل api-date.php جهت دریافت اطلاعات زمان و تاریخ
<?php
header("Content-Type: application/json");
date_default_timezone_set("Asia/Tehran");
$timestamp = time();
$latitude = 35.69;
$longitude = 51.42;
$date_details = date_sun_info($timestamp , $latitude ,$longitude );
$sunrise_ts = $date_details['sunrise'];
$sunset_ts = $date_details['sunset'];
$statusDay = "night";
if($sunrise_ts <= $timestamp && $timestamp < $sunset_ts) $statusDay = "day";
$dateJsonList = [
"timestamp" => $timestamp,
"date" => date("Y-m-d"),
"time" => date("H:i:s"),
"statusDay" => $statusDay
];
die(json_encode($dateJsonList));
?>
فایل main.css
استایل برنامه در اسکریپت زیر :
.clearfix , .clearfix::after , .clearfix::before{
content: "";
clear: both;
}
.day-quote{
padding: 5px;
background-color: mediumspringgreen;
color: #000;
border-radius: 0 0 14px 39px;
}
.dan-status{
width: 150px;
height: 150px;
overflow: hidden;
float: right;
position: relative;
}
.dan-status .dan{
width: 100%;
transition: 0.3s all;
}
.dan-status .dan#day{
transform: rotate(0deg);
}
.dan-status .dan#night{
transform: rotate(180deg);
}
.dan-status .dan-cover{
position: absolute;
top: 41%;
width: 100%;
height: 53%;
background-color: #8bc34a6b;
border-radius: 0 0 100px 100px;
}
.date-details{
padding: 40px 15px;
}
.dt{
display: inline-block;
}
.dt.quote{
margin-top: 15px;
}
.dt.date span{
float: left;
}
.dt.quote p{
display: block;
margin: 10px 0 0 0 !important;
}
.dt.quote a{
float: left;
text-decoration: none;
background-color: #ff9800;
color: black;
border: none;
padding: 5px;
font-weight: bold;
border-radius: 8px;
margin-top: 15px;
}
فایل app.js
در کد زیر به 2 تا از endpoint ها درخواست مان را می فرستیم :
1- همان فایل api-date.php است
2- آدرس https://api.rapidcode.ir/quote/ که نقل قول ها را دریافت می کنیم .
const randomInt = Math.floor(Math.random() * 100) + 1;
const quoteURL = "https://api.rapidcode.ir/quote/";
const dateURL = location.href + "api-date.php";
let secondsInterval = null;
let timestamp = 0;
let timeCheckSeconds = 0;
let everySecondsApiCheck = 10;
funcSendGetData(quoteURL , {"lid" : randomInt} , function(res){
if(res.status == 1){
const data = res.content;
document.querySelector(".dt.quote #val").textContent = data.Quote;
document.querySelector(".dt.quote #val2").textContent = data.Author;
}
});
funcSendGetData(dateURL , {} , funcDateUpdate);
function funcSendGetData(url, dataLists , customFunc) {
const xhr = new XMLHttpRequest();
xhr.responseType = "json";
const queryString = new URLSearchParams;
if (dataLists && typeof dataLists == "object") {
for(const dataList in dataLists) queryString.append(dataList , dataLists[dataList]);
} else dataLists = "";
xhr.open("GET", url + "?" + queryString.toString());
xhr.setRequestHeader("Content-Type" , "application/json");
xhr.onreadystatechange = function (e) {
if (this.status === 200 && this.readyState == this.DONE) {
const res = this.response;
customFunc(res);
} else if (this.status < 200 && this.readyState == this.DONE) {
window.alert("خطای شبکه");
console.error("ERR");
}
}
xhr.send();
}
function funcDateUpdate(res){
document.querySelector(".dt.time #val").textContent = res.time;
timestamp = res.timestamp;
const date = new Date(timestamp * 1000);
document.querySelector(".dt.date #val").textContent = farvardin.gregorianToSolar(date.getFullYear() , (date.getMonth() + 1) , (date.getDay()+1) , "string")
document.querySelector(".dan").id = res.statusDay;
clearInterval(secondsInterval);
secondsInterval = setInterval(function(){
if(everySecondsApiCheck<=timeCheckSeconds){
timeCheckSeconds = 0;
funcSendGetData(dateURL , {} , funcDateUpdate);
}
timestamp++;
const miliSeconds = timestamp * 1000;
const date = new Date(miliSeconds);
const Hours = (date.getHours() < 10 ? "0" : "") + date.getHours();
const Minutes = (date.getMinutes() < 10 ? "0" : "") + date.getMinutes();
const seconds = (date.getSeconds() < 10 ? "0" : "") + date.getSeconds();
document.querySelector(".dt.time #val").textContent = Hours + ":" + Minutes + ":" + seconds;
timeCheckSeconds++;
} , 1000)
}
خروجی برنامه نقل قول روزانه

ارسال نظر