From d42ce05380c4a8f1848ad409b2ac8ed848723399 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Mon, 5 Feb 2024 13:05:50 +0300 Subject: [PATCH] fix: Safari 3D fix for webview fixes #7167 --- src/modules/effect-coverflow/effect-coverflow.mjs | 2 +- src/modules/effect-creative/effect-creative.mjs | 2 +- src/modules/effect-cube/effect-cube.mjs | 6 +++++- src/modules/effect-flip/effect-flip.mjs | 2 +- src/shared/get-browser.mjs | 11 +++++++++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/modules/effect-coverflow/effect-coverflow.mjs b/src/modules/effect-coverflow/effect-coverflow.mjs index 94725b8e9..9e84cc5d4 100644 --- a/src/modules/effect-coverflow/effect-coverflow.mjs +++ b/src/modules/effect-coverflow/effect-coverflow.mjs @@ -57,7 +57,7 @@ export default function EffectCoverflow({ swiper, extendParams, on }) { if (Math.abs(rotateX) < 0.001) rotateX = 0; if (Math.abs(scale) < 0.001) scale = 0; - if (swiper.browser && swiper.browser.isSafari) { + if (swiper.browser && swiper.browser.need3dFix) { if ((Math.abs(rotateY) / 90) % 2 === 1) { rotateY += 0.001; } diff --git a/src/modules/effect-creative/effect-creative.mjs b/src/modules/effect-creative/effect-creative.mjs index 4a9390e9d..941578082 100644 --- a/src/modules/effect-creative/effect-creative.mjs +++ b/src/modules/effect-creative/effect-creative.mjs @@ -89,7 +89,7 @@ export default function EffectCreative({ swiper, extendParams, on }) { // set rotates r.forEach((value, index) => { let val = data.rotate[index] * Math.abs(progress * multiplier); - if (swiper.browser && swiper.browser.isSafari && (Math.abs(val) / 90) % 2 === 1) { + if (swiper.browser && swiper.browser.need3dFix && (Math.abs(val) / 90) % 2 === 1) { val += 0.001; } r[index] = val; diff --git a/src/modules/effect-cube/effect-cube.mjs b/src/modules/effect-cube/effect-cube.mjs index 46bfb0eda..dfdeb5e80 100644 --- a/src/modules/effect-cube/effect-cube.mjs +++ b/src/modules/effect-cube/effect-cube.mjs @@ -124,7 +124,11 @@ export default function EffectCube({ swiper, extendParams, on }) { if (progress <= 1 && progress > -1) { wrapperRotate = slideIndex * 90 + progress * 90; if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; - if (swiper.browser && swiper.browser.isSafari && (Math.abs(wrapperRotate) / 90) % 2 === 1) { + if ( + swiper.browser && + swiper.browser.need3dFix && + (Math.abs(wrapperRotate) / 90) % 2 === 1 + ) { wrapperRotate += 0.001; } } diff --git a/src/modules/effect-flip/effect-flip.mjs b/src/modules/effect-flip/effect-flip.mjs index 04af07d0c..49af1731a 100644 --- a/src/modules/effect-flip/effect-flip.mjs +++ b/src/modules/effect-flip/effect-flip.mjs @@ -65,7 +65,7 @@ export default function EffectFlip({ swiper, extendParams, on }) { rotateY = -rotateY; } - if (swiper.browser && swiper.browser.isSafari) { + if (swiper.browser && swiper.browser.need3dFix) { if ((Math.abs(rotateY) / 90) % 2 === 1) { rotateY += 0.001; } diff --git a/src/shared/get-browser.mjs b/src/shared/get-browser.mjs index 1c8656036..260093258 100644 --- a/src/shared/get-browser.mjs +++ b/src/shared/get-browser.mjs @@ -1,9 +1,11 @@ import { getWindow } from 'ssr-window'; +import { getDevice } from './get-device.mjs'; let browser; function calcBrowser() { const window = getWindow(); + const device = getDevice(); let needPerspectiveFix = false; function isSafari() { const ua = window.navigator.userAgent.toLowerCase(); @@ -20,10 +22,15 @@ function calcBrowser() { needPerspectiveFix = major < 16 || (major === 16 && minor < 2); } } + const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent); + const isSafariBrowser = isSafari(); + const need3dFix = isSafariBrowser || (isWebView && device.ios); + return { - isSafari: needPerspectiveFix || isSafari(), + isSafari: needPerspectiveFix || isSafariBrowser, needPerspectiveFix, - isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent), + need3dFix, + isWebView, }; }