Điều đầu tiên trước tiên: Đừng hoảng sợ khi sinh viên phát triển front-end gặp phải vấn đề này, bởi vì tôi sẽ giúp bạn vượt qua tất cả những cạm bẫy mà bạn phải bước vào tiếp theo, vì vậy tôi có blog này. Hy vọng điều này sẽ giúp.
Thành phần băng chuyền: Swiper@4.5.1 (phiên bản cuối cùng của 4x ổn định).
Thiết bị: Các phiên bản iOS 15x, 14 và 16 đều ổn. Vấn đề chỉ có ở phiên bản iOS 15.
Hiện tượng: Trượt sang trái phải bị kẹt, 2 tay không nối được, vừa buông tay ra sẽ bị kẹt. Không có vấn đề như vậy trong Safari hoặc WeChat trên cùng một điện thoại, chỉ trong ứng dụng.
Một số trường hợp: https://ask.csdn.net/questions/7544894 https://juejin.cn/post/7023231843004579877.
Tất nhiên không có giải pháp nào cho tất cả, chúng chỉ là gặp phải mà thôi.
Tôi đã thử hầu hết các phương pháp trên Internet và đã thay đổi phiên bản 3x, 5x nhưng không có kết quả...
Được rồi, tôi không thể tìm thấy giải pháp trực tuyến. Tôi tuân theo quy tắc cũ và xem xét các vấn đề trên github. Nó hữu ích nhưng không đặc biệt hữu ích.
Cách 1: Nâng cấp lên phiên bản 5x. Có thuộc tính mới cssMode. Sau khi bật thuộc tính này, nó sẽ sử dụng API CSS Scroll Snap hiện đại. Nó không hỗ trợ nhiều tính năng của Swiper nhưng có thể mang lại hiệu suất tốt hơn. Một số thao tác và chuyển tiếp js phức tạp sẽ được thay thế bằng css.
Nhưng: thiếu rất nhiều tính năng (không khuyến khích).
var mySwiper = new Swiper('.swiper-container', { cssMode: true });
Cách 2: Kích hoạt tính năng tăng tốc phần cứng cho css (nhưng nó chỉ giải quyết được vấn đề màn hình trắng nhấp nháy và còn lag).
1
.swiper-trượt
{
2
-webkit-backface-visibility
:
ẩn giấu
;
3
-webkit-biến đổi
:
dịch3d(0,0,0)
;
4
}
5
6
.swiper-wrapper
{
7
-webkit-transform-style
:
bảo tồn-3d
;
8
}
Phương pháp 3 https://github.com/nolimits4web/swiper/issues/4493.
1
chức năng
easeOut(thời gian hiện tại, giá trị bắt đầu, giá trị thay đổi, thời lượng) {
2
currentTime /= thời lượng;
3
trở lại
-thay đổiGiá Trị * thời gian hiện tại * (thời gian hiện tại - 2) +
giá trị bắt đầu;
4
}
5
6
chức năng
getTransitionSimulator(ele, khoảng cách, thời lượng, gọi lại) {
7
để xử lý;
8
hãy giải quyết;
9
trở lại
() =>
{
10
hãy hứa =
mới
Lời hứa(res =>
{
11
giải quyết =
độ phân giải;
12
});
13
hãy bắt đầuTime =
hiệu suất.hiện tại();
14
cancelAnimationFrame(xử lý);
15
chức năng
_hoạt ảnh() {
16
hãy để hiện tại =
hiệu suất.hiện tại();
17
//
khoảng cách để di chuyển khung này
18
hãy để disVal = easeOut(current - startTime, 0
, khoảng cách, thời gian);
19
20
gọi lại(ele, disVal);
21
nếu như
((hiện tại - startTime) / thời lượng < 1
) {
22
xử lý =
yêu cầuAnimationFrame(_animation);
23
}
khác
{
24
cancelAnimationFrame(xử lý);
25
giải quyết();
26
}
27
}
28
xử lý =
yêu cầuAnimationFrame(_animation);
29
trở lại
hứa;
30
};
31
}
32
33
Swiper.on('setTranslate', (swiper, targetTransVal) =>
{
34
const wrapper = swiper.$wrapperEl[0];
//
phần tử bao bọc
35
//
khi sử dụng chuyển tiếp để làm hoạt hình
36
nếu như
(wrapper.style.transitionDuration !== '0ms'
) {
37
//
lấy giá trị dịch gốc
38
const curTransVal =
cái này
.swiper.getTranslate();
39
//
hủy bỏ hoạt ảnh của quá trình chuyển đổi
40
wrapper.style.transitionDuration = ''
;
41
wrapper.style.transform =
`dịch3d(${curTransVal}px, 0px, 0px)`;
42
43
//
sử dụng requestFrameAnimation để tự làm hoạt hình
44
const transSimulator = getTransitionSimulator(wrapper, targetTransVal - curTransVal, 300, (el, val) =>
{
45
el.style.transform = `translate3d(${curTransVal +
val}px, 0px, 0px)`;
46
});
47
chờ transSimulator();
48
//
Kết thúc quá trình chuyển đổi, gọi lại hàm (mô phỏng việc triển khai nội bộ của Swiper)
49
Swir.onSlideToWrapperTransitionEnd.call(wrapper, { target: Wrapper });
50
51
}
52
})
Hữu ích, nhưng nó chỉ áp dụng cho việc trượt toàn trang chứ không áp dụng cho nhiều cột.
Cách 4: Dùng máy tính Mac tải link xcode về Iphone để tạo App Demo và nhúng trang H5 của bạn. Xem nếu nó bình thường, nếu có. Vậy thì không còn thắc mắc gì nữa, vấn đề không nằm ở giao diện người dùng, hãy để bộ phận phát triển iOS khắc phục sự cố. Đã giải quyết thành công.
Cuối cùng: Tôi đang nhắm mục tiêu phát triển ios ở đây. Đây thực sự là một phần nhất định của Ứng dụng ảnh hưởng đến băng chuyền toàn cầu. Than ôi, nếu bạn cũng gặp phải, vui lòng cho tôi biết giải pháp của bạn. Thanh! ! .
。
Cuối cùng, bài viết này về độ trễ và màn hình trắng nhấp nháy khi băng chuyền H5swiper được nhúng trong iOSApp kết thúc tại đây. Nếu bạn muốn biết thêm về độ trễ và màn hình trắng nhấp nháy khi băng chuyền H5swiper được nhúng trong iOSApp, vui lòng tìm kiếm bài viết CFSDN. Hoặc tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!