A pure hotel maid peeks at me masturbating, her lust explodes, she hides in the toilet and masturbates in her wet hole, she's so slutty she reaches orgasm.","lastmod":"2026-07-11","duration":"","url":"/play/19244847.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvMjk1Mjg3MDI5YjVjZGY3NDFiOWFhMTVhZDdlZDlmZDYuanBn.cache","vod_id":19208640,"title":"Yuna Ogura is caught up in an offline orgy! A gathering of sluts, a passionate all-night hookup party [START-163]","lastmod":"2025-12-13","duration":"2:07:22","url":"/play/19208640.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTUvZWJhNzdiMDIyZWViNWJhMTZiNDhjOTljYTM5OWYzZTQuanBn.cache","vod_id":19210373,"title":"4-Hour Ultimate Climax Compilation: Beautiful Girl Cosplay Bondage Torture Forced to Climax, Sato Haruki, Motoyama Haruka, Momose Nonoka Passionate Humiliation Episode ID-023","lastmod":"2025-12-19","duration":"3:02:59","url":"/play/19210373.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjY2NmIwNTQ5ZjI0OTNiNjI0ZDhjMTcyYzZhYzBmMDIuanBn.cache","vod_id":19145147,"title":"REAL713CN Tattooed woman Kurosaki Shizuku Hannya orgasm SEX with panties and photos.","lastmod":"2025-03-29","duration":"","url":"/play/19145147.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzIzMDUwYmM0ODEzOGM2NjJkMTRjODQzN2ZhYzUxMzEuanBn.cache","vod_id":19063358,"title":"✿Internet Celebrity Beauty✿ Top-Tier Figure, Spaghetti Strawberry Stockings, Wedding Dress Girl▌Cute Bunny▌Lewd Lust, Teasing, Tender Yogurt, Strawberry Salad, Penis Rapid Attack, Squirting, Screaming Orgasm","lastmod":"2025-03-28","duration":"00:10:43","url":"/play/19063358.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZjkwNzY3NWFmOTY5ZmQzOWQ4NzA3ZWU4MjMxY2I2ZjEuanBn.cache","vod_id":19040830,"title":"The mature woman in business attire, fresh off work, couldn't wait to have sex. Without even taking off her clothes, she pulled down her pants and started fucking her relentlessly until she reached orgasm, dripping wet and moaning incessantly.","lastmod":"2025-03-28","duration":"00:15:27","url":"/play/19040830.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNmU3ZDNjZjc4MDJhMzMxMWQyNjVjZjg4ZGVlMjM1NzkuanBn.cache","vod_id":19228087,"title":"A seductive mature woman in black stockings and high heels seduces you, her beautiful legs driving you to climax.","lastmod":"2026-04-09","duration":"0:37:49","url":"/play/19228087.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGM2MzkyYzVkZDM4MWJhNjkxYWFlMGNlZTg4NTA0ZjUuanBn.cache","vod_id":19072449,"title":"The latest work from the master of incestuous relationships between uncle and aunt in the Cape Community, Little Steel Cannon ❤️ The sister-in-law is enjoying my cock's non-stop thrusting when the brother calls and tells her to come downstairs.","lastmod":"2025-03-28","duration":"00:23:00","url":"/play/19072449.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjc0ODg4MmNhNDNiMGE5YjQyYmQ4MWVkYjNjMDNjNmYuanBn.cache","vod_id":19122728,"title":"[JVID] Suspended Giant Breasts, Forced Orgasm","lastmod":"2025-03-29","duration":"24:36","url":"/play/19122728.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvY2I5MWIwOWVjOGUwYzc1NjIwZTM5OWU4ZWUxMGYzOTAuanBn.cache","vod_id":19212804,"title":"Poor girl, more prone to orgasm! Aspiring idol girl was forcibly assaulted, powerless to resist, and forced to take erotic selfies; the tragic video was leaked. Unknown actress MUKD-554","lastmod":"2026-01-03","duration":"2:19:39","url":"/play/19212804.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MDIvYzVlYWQ1MDM1MGM0ZDc2MDcxNDEwYjU4ZDM3MTAzZDIuanBn.cache","vod_id":19183412,"title":"AI goddess Michelle Reis: Conquer my body, one climax after another, I can't stop!","lastmod":"2025-07-01","duration":"20:15","url":"/play/19183412.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvM2QzNjFjYzczOGU0NGU1ZDNjZmQ3NzUwYTA3MGJiM2UuanBn.cache","vod_id":19106110,"title":"200GANA-2255 Serious Softcore, First Time Filming. 1456 A super cute nursing student is found in a city destroyed by a rainstorm! When I listened to her tell her story, she said, \"I don't have a boyfriend, but I have a dad!\" She's a modern carnivore! However, she was very depressed and said, \"Having sex with my dad doesn't feel good at all!\" Her daily routine is to watch adult videos and masturbate, so when I suggested that she \"try making adult videos\"...! (0002).","lastmod":"2025-03-29","duration":"","url":"/play/19106110.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmRhOTlkYTBiZmE2MjExY2I2ZDI2Njg3MTM1NTQwMDcuanBn.cache","vod_id":19035219,"title":"[Chinese Subtitles] MANN-019 A slutty older sister with J-cup breasts and highly sensitive nipples.","lastmod":"2025-03-28","duration":"02:30:18","url":"/play/19035219.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNTU2MjU5NzYwNDM3YzBmOWU4Mjc0ZDBlNzYwODMwY2QuanBn.cache","vod_id":19151931,"title":"SSIS-364: A major newcomer who rejected swimsuit photo idol work and chose to debut in AV - Wing Dance's first experience, a climax, part 3.","lastmod":"2025-03-29","duration":"02:31:26","url":"/play/19151931.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNTBlODU1NTVmZjhlOTFlODY1Nzc3N2EzMjhiNzhhYTUuanBn.cache","vod_id":19102917,"title":"[Chinese Subtitles] ACHJ-021 Sometimes I just want to be a slut. Madonna exclusive, ultimate mature beauty \"Oshima Yuka\" for rent.","lastmod":"2025-03-29","duration":"02:09:40","url":"/play/19102917.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjJhNjE0YzhiZjJmYWM4MjE2NzgxNTkyMjQ2N2NjNjAuanBn.cache","vod_id":19220100,"title":"JDSY300 Female boss's luxury car is violently assaulted: Uncontrollable climax, brutally fucked and ejaculated inside, moaning echoes through the night.","lastmod":"2026-03-03","duration":"0:40:27","url":"/play/19220100.html"}]},
videoTitle: 'BEAF114 is a super famous fast nipple training slut who never stops even after orgasm.',
language: 'en',
dataKey: '01',
loadingPlayer: true,
showShare: false,
pageUrl: '',
// RecommendedMovies 组件状态
isSingleColumn: false,
pageSize: 8,
currentPage: 1,
// 计算属性(使用 getter)
get layoutIconClass() {
return this.isSingleColumn ? 'icon-view-list' : 'icon-grid';
},
get layoutClass() {
return [
'row',
'g-3',
'row-cols-1',
this.isSingleColumn ? '' : 'row-cols-2',
'row-cols-lg-4'
].filter(Boolean).join(' ');
},
// 方法
onAppMounted() {
// 设置页面 URL
this.pageUrl = window.location.href;
// 保存观看历史
this.saveWatchHistory();
// 更新标签统计
if (this.videoData.tag && this.videoData.tag.length > 0) {
this.updateTagStats(this.videoData.tag);
}
// 发送点击统计
this.hitVideoId(this.videoData.id);
// 从 Cookie 读取布局偏好
const layoutCookie = this.getCookie('list_layout');
if (layoutCookie === 'single') {
this.isSingleColumn = true;
}
// 监听 iframe 加载完成,隐藏骨架屏
// 使用 setTimeout 确保 DOM 已完全渲染
setTimeout(() => {
const iframe = document.getElementById('v2-player');
const skeleton = document.getElementById('player-skeleton');
if (iframe && skeleton) {
// 定义隐藏骨架屏的函数
const hideSkeleton = () => {
skeleton.style.transition = 'opacity 0.3s ease';
skeleton.style.opacity = '0';
setTimeout(() => {
skeleton.style.display = 'none';
}, 300);
};
// 检查 iframe 是否已经加载完成
if (iframe.contentDocument || iframe.contentWindow) {
try {
// 如果 iframe 已加载,直接隐藏骨架屏
if (iframe.contentWindow.document.readyState === 'complete') {
setTimeout(hideSkeleton, 500);
return;
}
} catch (e) {
console.log('[Video] 跨域 iframe,无法检查状态:', e.message);
// 跨域情况下无法访问 contentWindow,继续监听 load 事件
}
}
// 监听 load 事件
iframe.addEventListener('load', () => {
console.log('[Video] iframe load 事件触发');
setTimeout(hideSkeleton, 500);
});
// 添加超时保护,确保骨架屏最终会被隐藏
setTimeout(() => {
if (skeleton.style.display !== 'none') {
console.log('[Video] 超时保护触发,强制隐藏骨架屏');
hideSkeleton();
}
}, 5000); // 5秒后强制隐藏
} else {
console.error('[Video] 未找到 iframe 或 skeleton 元素');
}
}, 0);
},
// 随机跳转
async jumpToRandomVideo() {
try {
const response = await fetch(`/api/qun/randomid?t=${Date.now()}`, {
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
});
const data = await response.json();
if (data?.status === 1 && data?.data?.id) {
window.location.href = `/${this.language}/play/${data.data.id}.html`;
} else {
console.error('获取随机视频失败:', data?.message || '未知错误');
}
} catch (err) {
console.error('获取随机视频失败:', err);
}
},
// 复制分享链接
copyShareLink() {
const input = this.$refs.shareInput;
if (input) {
input.select();
input.setSelectionRange(0, 99999); // For mobile devices
// 尝试使用现代 API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(this.pageUrl).then(() => {
alert('Link copied!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
}
}
},
// 切换布局
toggleLayout() {
this.isSingleColumn = !this.isSingleColumn;
this.setCookie('list_layout', this.isSingleColumn ? 'single' : 'multi', 30);
},
// 加载更多
loadMore() {
this.currentPage++;
},
// 保存观看历史
saveWatchHistory() {
try {
const storageKey = 'watchHistory';
let history = JSON.parse(localStorage.getItem(storageKey) || '[]');
// 解码 HTML 实体编码的标题
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const video = {
id: this.videoData.id,
title: decodeHtmlEntities(this.videoData.title),
image: this.videoData.images || this.videoData.preview,
duration: this.videoData.duration || ''
};
// 过滤掉已存在的相同 ID 视频
history = history.filter(item => item.id !== video.id);
// 添加新记录到最前面
history.unshift(video);
// 限制最多保存 100 条
if (history.length > 100) {
history = history.slice(0, 100);
}
localStorage.setItem(storageKey, JSON.stringify(history));
} catch (e) {
console.error('Failed to save watch history:', e);
}
},
// 更新标签统计
updateTagStats(tags = []) {
// HTML 实体解码函数
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const storageKey = this.dataKey + 'tagWatchStats';
const lastWatchedKey = this.dataKey + 'tagLastWatched';
const raw = localStorage.getItem(storageKey);
const stats = raw ? JSON.parse(raw) : {};
// 解码标签并统计
const decodedTags = tags.map(tag => decodeHtmlEntities(tag));
decodedTags.forEach(tag => {
stats[tag] = (stats[tag] || 0) + 1;
});
localStorage.setItem(storageKey, JSON.stringify(stats));
localStorage.setItem(lastWatchedKey, JSON.stringify(decodedTags));
},
// 点击统计
hitVideoId(id) {
fetch(`/api/qun/hit?type=play&id=${id}`, {
method: 'GET',
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
}).catch(err => {
console.error('点击统计失败:', err);
});
},
// Cookie 工具方法
getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
},
setCookie(name, value, days) {
const expires = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name}=${value}; expires=${expires}; path=/`;
}
};
}