وقفة فليكسليدر عندما تراكب مفتوح
-
09-12-2019 - |
سؤال
ونحن نعمل حاليا على المشروع الذي يستخدم البرنامج المساعد فليكسليدر (المكتسبة مؤخرا من قبل وو ثيمات).لدينا العديد من النوافذ المنبثقة في هذه الصفحة ونريد أن يتوقف شريط التمرير مؤقتا عندما تكون النوافذ المنبثقة نشطة ويستأنف عند إغلاق النوافذ المنبثقة.وقفة يعمل فقط أول الذهاب ' جولة واستئناف المنزلق لا يعمل.يوجد أدناه الرمز الذي نستخدمه في شريط التمرير.لقد حاولت تبديل وظيفة" ابدأ "مع جميع المكالمات المتاحة باستثناء مكالمة" إنهاء".
$w('#slider-frame').flexslider({ animation: 'fade', directionNav: false, slideshowSpeed: 4000, controlNav: true, pauseOnHover: true, manualControls: '#indicator-dots li', start: function(slider){ $w('.roi-click').click(function(){ slider.trigger('mouseenter'); }); $w('div#ovrly, a#close').click(function(){ slider.trigger('mouseleave'); }); } });
الرابط إلى الصفحة هو http://www.whitehardt.com/sandbox/whitehardt-v3.
أي مساعدة في هذا سيكون موضع تقدير كبير.
المحلول
تحرير
أعتقد أنني اكتشفت ما يجري هنا.المشكلة هي أن لديك أحداث متضاربة مستمرة.
- فليكسليدر يبدأ الرسوم المتحركة عن طريق القيام
setInterval
وتخزين معرف الفاصل الزمني في متغير حالة داخلي (slider.animatedSlides
). - فليكسليدر مؤقتا عند تحوم فوق الشريحة.يقوم بذلك عن طريق مسح الفاصل الزمني للرسوم المتحركة باستخدام
clearInterval()
. - النقر فوق
roi
اربط الشريحة ، التي تتوقف مؤقتا مرة أخرى ، عن طريق مسح ما هو الآن فاصل زمني غير موجود. - تحتوي الصفحة على تراكب عليها ، مما يعني أنك تقوم بعمل ملف
mouseleave
على فليكسليدر ، لذلك يبدأ الرسوم المتحركة مرة أخرى معsetInterval()
ويخزن معرف الفاصل الزمني. - يمكنك إغلاق التراكب ، بالنقر فوق الزر إغلاق أو التراكب ، وعند هذه النقطة تتصل
resume()
, ، والذي يقوم أيضا بـsetInterval()
, ، الكتابة فوق معرف الفاصل الزمني المخزن.لذا, الآن لديك اثنين من الرسوم المتحركة الذهاب, ، ومن هنا جاءت السرعة المزدوجة. زائد, في المرة القادمة التي تتصل فيهاpause()
, ، لديه حق الوصول فقط لمسح الفاصل الزمني الأخير الذي قمت بتعيينه لأنه تجاوز المعرف المخزن.لذلك ، لم يعد بإمكانك مسح الفاصل الزمني من الخطوة 3.لذلك ، سوف تذهب بين وجود الرسوم المتحركة فاصل واحد الذهاب (بطيئة) ، عندmouseenter
واثنان عندماmouseleave
(سريع).
بدلا من التوقف عند النقر ، يمكنك التوقف مؤقتا #ovrly
تمرير الماوس ، واستئناف عند النقر ، لأن الماوس الخروج من فليكسليدر قبل تمرير الماوس من تراكب.
$w('#slider-frame').flexslider({
animation: 'fade',
directionNav: false,
slideshowSpeed: 4000,
controlNav: true,
pauseOnHover: true,
manualControls: '#indicator-dots li',
start: function(slider){
$w('div#ovrly').mouseover(function(){
slider.pause();
});
$w('div#ovrly, a#close').click(function() {
slider.resume();
});
}
});
لكن, ، قد تواجه مشكلات مماثلة ، اعتمادا على ما إذا كان الماوس فوق شريط التمرير أم لا عند إغلاق التراكب...لكنني لست متأكدا.من الناحية المثالية ، فليكسليدر لن تبدأ الرسوم المتحركة الجديدة إذا كان واحد بالفعل الذهاب.هل يمكن أن الإختراق هذا في فليكسليدر.شبيبة:
//FlexSlider: Automatic Slideshow Pause
slider.pause = function() {
// Only pause if running
if(slider.animatedSlides == null) {
return;
}
clearInterval(slider.animatedSlides);
// Clear the interval ID
slider.animatedSlides = null;
if (slider.vars.pausePlay) {
slider.pausePlay.removeClass('pause').addClass('play').text(slider.vars.playText);
}
}
//FlexSlider: Automatic Slideshow Start/Resume
slider.resume = function() {
// Only resume if paused
if(slider.animatedSlides != null) {
return;
}
slider.animatedSlides = setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
if (slider.vars.pausePlay) {
slider.pausePlay.removeClass('play').addClass('pause').text(slider.vars.pauseText);
}
}
هل يمكن أن تفرط هذه الوظائف في الخاص بك start:
وظيفة المعلمة.
سيؤدي هذا التغيير إلى حل السرعة وحقيقة أنه لا يمكنك التوقف مرة أخرى.ستظل تواجه مشكلة استئناف شريط التمرير عندما ينبثق التراكب الخاص بك.هذا يمكن حلها مع mouseover
الحل الذي ذكرته من قبل.
هنا هو كمان أن يظهر mouseover
الحل: http://jsfiddle.net/jtbowden/TWN5t/
يبدو كما لو أنك قد لا تحتاج إلى الاختراق الثاني ، على الرغم من أنه رمز أفضل.
نصائح أخرى
jeff b، شكرا على إصلاح JS.نظرا لأنه لا يعمل مع فرع 2.x من FlexSlider، أعتقد أنه فقط مقابل 1.x
لأولئك الموجودين على 2.x، تم تقديم إصلاح بواسطة NVartolomei: https://github.com/woothemes/flexslider/pull/322
واجهت نفس المشكلة التي تعمل مع brightcove + flexslider. هنا الحل الخاص بي:
قبل giveacodicetagpre.
ثم giveacodicetagpre.
pauseplayplay .flex لعب CSS العتامة: 0