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

السؤال

نشر

الفانكشن اللي اسمها cx

شغاله وكله تمام ولكن لما استدعيها في عنصر اخر كي يتم تنفيذها مش بتتنفذ كما هو مطلوب ما المشكله ؟؟؟؟؟

الصورة في الاسفل

الكود كامل علي موقع codepen

 

حسوب.png

Recommended Posts

  • 0
نشر

المشكلة هي ان الوظيفة cx ليست هي المسؤولة عن ظهور القلوب على الشاشة،

ولكن المسؤول عن ذلك هو الوظيفة التالي :

let er = setInterval(() => { cx(); }, 3);
setInterval(() => {
  clearInterval(er)
}, 3000);

والتي انت جعلتها تعمل عند النقر على الزر randam heart في هذا الجزء من الكود :

bttn.addEventListener("click",(params) => {
  let er= setInterval(() => { cx();  } , 3);
  setInterval(() => {
    clearInterval(er)
  }, 3000);

})

وهذا الجزء من الكود وضعته في الوظيفة cx نفسها وهذا خطأ.

الصحيح ان يكون شكل الكود كالتالي :

let cx = () => {
    let contenerheart = document.getElementById("contenerheart");
    let hhart = document.createElement("div");
    hhart.classList.add("hart");
    hhart.innerText = "❤️";
    contenerheart.append(hhart);
    console.log(contenerheart);
    hhart.style.left = `${Math.random() * 100}%`
    hhart.style.animationDuration = `${Math.random() * 2}s`
};
const doCx = () => {
    let er = setInterval(() => { cx(); }, 3);
    setInterval(() => {
        clearInterval(er)
    }, 3000);
}
let bttn = document.getElementById("bttn")
bttn.addEventListener("click", (params) => {
    doCx()
})

ولجعل الزر randam يعمل يجب استدعاء الـ doCx بدلا عن الـ cx كالتالي :

btn.addEventListener("click", () => {
    freme.innerHTML = inner[l];
    l++;
    if (l > inner.length - 1) {
        l = 0;
    }
    doCx()
});

فيصبح ملف الجافاسكريبت بالكامل بالشكل التالي : index.js

  • 0
نشر (معدل)

السلام عليكم .

الخطأ في الكود أن حضرتك قمتى بوضع ال eventListener بداخل ال cx()  function 

bttn.addEventListener("click",(params) => {
 let er= setInterval(() => { cx();  } , 3);
setInterval(() => {
  clearInterval(er)
}, 3000);

})

 

إذا فإن هذا الجزء من الكود لن يتم تنفيذه إلا باستدعاء ال cx() function  حيث ان الدوال لا يتم تنفيذ الاكواد بداخلها إلا عندما يتم إستدعائها.

وال cx() function لا تستدعى إلا بالضغط على زر randam.

إذا قمتى بالضغط على زر randam ثم الضغط على randam heart ستجدينه يعمل .

وبذلك فإن  الحل هو وضع هذا الجزء خارج نطاق ال cx() function ومن الافضل وضعها فى ال global scope في نهاية الكود .

 let bttn =document.getElementById("bttn")
bttn.addEventListener("click",(params) => {
 let er= setInterval(() => { cx();  } , 3);
setInterval(() => {
  clearInterval(er)
}, 3000);

})

 

 

تم التعديل في بواسطة محمد عاطف11

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...