اذهب إلى المحتوى
  • 0

كيف أغير الصورة الخلفية بعد كل 5 أو 10 ثواني في react ؟

Mohamed Lamin Mahmoudi

السؤال

import './App.css';
import React from 'react';
import {useState,useEffect} from 'react'
import Header from './components/header';
import images from '../src/img/images.jpg';
import images1 from '../src/img/images1.jpg';
import images2 from '../src/img/images2.jpg';
import images3 from '../src/img/images3.jpg';


const App =()=>{
  const [img,setImg]=useState(images); 

  let imagesArray=[images,images1,images2,images3];
  let random =Math.floor(Math.random()* imagesArray.length);
 useEffect(()=>{
   setInterval(()=>{
    setImg(imagesArray[random]);
    console.log(img)
  },8*1000);
  
 },[])
 
  return (
    <div style={{backgroundImage:`url(${img})`}} className='landing-page'>
      <div className='overlay'>
      </div>
      <Header></Header>
      <div className="introduction-text">
            <h1>We are <span>Creative</span> agency</h1>
            <p>Welcom to you i can help you four what do you need about web develpement</p>
          </div>
    </div>
  )
}
export default App ;

جربت هذه الطريقة 

الصورة تتغير لكن بعشوائية ولا تتبع الزمن المحدد اي 8 ثواني 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكن تغيير الصورة الخلفية بشكل متكرر في React باستخدام الدالة setInterval. يمكنك محاولة هذا الكود:

import './App.css';
import React, { useState, useEffect } from 'react';
import Header from './components/header';
import images from '../src/img/images.jpg';
import images1 from '../src/img/images1.jpg';
import images2 from '../src/img/images2.jpg';
import images3 from '../src/img/images3.jpg';

const App = () => {
  const [img, setImg] = useState(images);
  const imagesArray = [images, images1, images2, images3];
  const [index, setIndex] = useState(0);

  useEffect(() => {
    const intervalId = setInterval(() => {
      setIndex((index) => (index + 1) % imagesArray.length);
    }, 5000);

    return () => clearInterval(intervalId);
  }, []);

  useEffect(() => {
    setImg(imagesArray[index]);
  }, [index]);

  return (
    <div style={{ backgroundImage: `url(${img})` }} className="landing-page">
      <div className="overlay"></div>
      <Header />
      <div className="introduction-text">
        <h1>
          We are <span>Creative</span> agency
        </h1>
        <p>
          Welcome to you. I can help you with whatever you need regarding web development.
        </p>
      </div>
    </div>
  );
};

export default App;

في هذا الكود، تم استخدام دالة useEffect لتحديث الصورة الخلفية بعد تغيير الفهرس index في المصفوفة imagesArray. تم استخدام دالة setInterval لتغيير الفهرس بعد كل 5 ثوانٍ واستخدمنا دالة clearInterval في دالة useEffect الثانية لإزالة الدالة السابقة عندما يتم إعادة رسم العنصر.

تم تعيين الصورة الأولى كالصورة الافتراضية في الحالة useState، وبمجرد تغيير الفهرس، يتم تحديث الصورة الخلفية في دالة useEffect الأولى باستخدام الحالة img.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة إلى الحل الذي وفره أحمد، 

يمكن أيضًا استخدام مكتبة أكثر تطورًا لتغيير الصور بشكل دوري، مثل react-slick أو react-carousel.

على سبيل المثال، باستخدام react-slick ، يمكنك تحقيق هذه الوظيفة عن طريق التالي:

1- تثبيت المكتبة باستخدام npm:

npm install react-slick

2- استيراد المكتبة والملفات التنسيق المطلوبة منها:

import React, { useState, useEffect } from 'react';
import Slider from 'react-slick';
import images from '../src/img/images.jpg';
import images1 from '../src/img/images1.jpg';
import images2 from '../src/img/images2.jpg';
import images3 from '../src/img/images3.jpg';
import 'slick-carousel/slick/slick.css';
import 'slick-carousel/slick/slick-theme.css';
import './App.css';
import Header from './components/header';

3- استخدام المكون Slider:

const App = () => {
  const imagesArray = [images, images1, images2, images3];

  const settings = {
    dots: false,
    infinite: true,
    speed: 5000,
    slidesToShow: 1,
    slidesToScroll: 1,
    autoplay: true,
    autoplaySpeed: 5000,
    beforeChange: (current, next) => {
      // console.log('before change', current, next);
    },
    afterChange: (current) => {
      // console.log('after change', current);
    },
  };

  return (
    <Slider {...settings}>
      {imagesArray.map((img, index) => (
        <div key={index} style={{ backgroundImage: `url(${img})` }} className="landing-page">
          <div className="overlay"></div>
          <Header />
          <div className="introduction-text">
            <h1>
              We are <span>Creative</span> agency
            </h1>
            <p>
              Welcome to you. I can help you with whatever you need regarding web development.
            </p>
          </div>
        </div>
      ))}
    </Slider>
  );
};

export default App;

ستقوم هذه الطريقة بتغيير الصورة بشكل دوري كل 5 ثواني ، وتغيير الصورة بشكل سلس ومتموج.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...