Tell our dentists about your teeth and get a free treatment plan
In Clinic Visit
Let’s get you booked in for a free consultation
Make an Enquiry
Leave your details and one of the team will be in touch within 24 hours to help you
Thank you, Omar
One of our Treatment Co-ordinator’s will be in touch with you shortly to confirm
your
appointment.
Got a Question?
Speak live with one of our expert dental care
team
members.
Visit×
Online Visit
Tell our dentists about your teeth and get a free treatment plan
Visit×
Emergency Visit
Visit×
In Clinic Visit
Book a free consultation with our treatment co-ordinator.
tag on yout theme's header.php
Read the detailed step-by-step at https://humbertosilva.com/visual-composer-infinite-image-carousel/
*/
// auxiliary code to create triggers for the add and remove class for later use
(function($){
$.each(["addClass","removeClass"],function(i,methodname){
var oldmethod = $.fn[methodname];
$.fn[methodname] = function(){
oldmethod.apply( this, arguments );
this.trigger(methodname+"change");
return this;
}
});
})(jQuery);
// main function for the infinite loop
function vc_custominfiniteloop_init(vc_cil_element_id){
var vc_element = '#' + vc_cil_element_id; // because we're using this more than once let's create a variable for it
window.maxItens = jQuery(vc_element).data('per-view'); // max visible items defined
window.addedItens = 0; // auxiliary counter for added itens to the end
// go to slides and duplicate them to the end to fill space
jQuery(vc_element).find('.vc_carousel-slideline-inner').find('.vc_item').each(function(){
// we only need to duplicate the first visible images
if (window.addedItens < window.maxItens) {
if (window.addedItens == 0 ) {
// the fisrt added slide will need a trigger so we know it ended and make it "restart" without animation
jQuery(this).clone().addClass('vc_custominfiniteloop_restart').removeClass('vc_active').appendTo(jQuery(this).parent());
} else {
jQuery(this).clone().removeClass('vc_active').appendTo(jQuery(this).parent());
}
window.addedItens++;
}
});
// add the trigger so we know when to "restart" the animation without the user knowing about it
jQuery('.vc_custominfiniteloop_restart').bind('addClasschange', null, function(){
// navigate to the carousel element , I know, its ugly ...
var vc_carousel = jQuery(this).parent().parent().parent().parent();
// first we temporarily change the animation speed to zero
jQuery(vc_carousel).data('vc.carousel').transition_speed = 0;
// make the slider go to the first slide without animation and because the fist set of images shown
// are the same that are being shown now the slider is now "restarted" without that being visible
jQuery(vc_carousel).data('vc.carousel').to(0);
// allow the carousel to go to the first image and restore the original speed
setTimeout("vc_cil_restore_transition_speed('"+jQuery(vc_carousel).prop('id')+"')",100);
});
}
// restore original speed setting of vc_carousel
function vc_cil_restore_transition_speed(element_id){
// after inspecting the original source code the value of 600 is defined there so we put back the original here
jQuery('#' + element_id).data('vc.carousel').transition_speed = 600;
}
// init
jQuery(document).ready(function(){
// find all vc_carousel with the defined class and turn them into infine loop
jQuery('.vc_custominfiniteloop').find('div[data-ride="vc_carousel"]').each(function(){
// allow time for the slider to be built on the page
// because the slider is "long" we can wait a bit before adding images and events needed
var vc_cil_element = jQuery(this).prop("id");
setTimeout("vc_custominfiniteloop_init('"+vc_cil_element+"')",2000);
});
jQuery(".dropdown-trigger2,.site-navigation-explore").mouseenter(function () {
jQuery(this).closest(".site-header").toggleClass("active2");
jQuery(this).closest(".site-header").toggleClass("contrast");
});
jQuery(".site-navigation-explore,.hiderightmenu").mouseleave(function () {
jQuery(".site-header").removeClass("active2");
jQuery(".site-header").removeClass("contrast");
jQuery(".c_darkmode .site-header").addClass("contrast");
});
const SECRET_KEY = "ab6cd84a-3488-4e67-a9aa-cb0eab68f008";
var formemail = jQuery('#wpforms-3276-field_4').val();
const hashedEmail = CryptoJS.AES.encrypt(formemail, SECRET_KEY);
jQuery('input#wpforms-3276-field_16').val(hashedEmail);
jQuery("#wpforms-form-3276").submit(function(){
//alert(formemail);
dataLayer.push({
'event': 'GA4ID',
'hash': hashedEmail
});
});
});
function init_smile_bg_marquee() {
if (jQuery(".background-slider").length) {
jQuery('.background-slider').slick({
speed: 7000,
autoplay: true,
autoplaySpeed: 0,
centerMode: true,
cssEase: 'linear',
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: true,
infinite: true,
initialSlide: 1,
arrows: false,
buttons: false
});
}
}
if (jQuery(".background-slider").length) {
init_smile_bg_marquee();
}
});