|
@@ -1,8 +1,11 @@
|
|
/* eslint-disable jsx-a11y/iframe-has-title */
|
|
/* eslint-disable jsx-a11y/iframe-has-title */
|
|
-import React from "react";
|
|
|
|
|
|
+import React, { useEffect, useRef, useState } from "react";
|
|
import styles from "./index.module.scss";
|
|
import styles from "./index.module.scss";
|
|
import { GoodsType } from "@/utils/data";
|
|
import { GoodsType } from "@/utils/data";
|
|
import classNames from "classnames";
|
|
import classNames from "classnames";
|
|
|
|
+import { audioUrl } from "@/utils/env";
|
|
|
|
+import musicImg from "@/assets/img/goods/icon-music.png";
|
|
|
|
+import musicImgX from "@/assets/img/goods/icon-musicX.png";
|
|
|
|
|
|
type Props = {
|
|
type Props = {
|
|
data: GoodsType;
|
|
data: GoodsType;
|
|
@@ -10,6 +13,29 @@ type Props = {
|
|
};
|
|
};
|
|
|
|
|
|
function GoodsInfo({ data, closePageFu }: Props) {
|
|
function GoodsInfo({ data, closePageFu }: Props) {
|
|
|
|
+ // 音频的播放和暂停
|
|
|
|
+ const [audioSta, setAudioSta] = useState(false);
|
|
|
|
+ const audioRef = useRef<HTMLAudioElement>(null);
|
|
|
|
+
|
|
|
|
+ useEffect(() => {
|
|
|
|
+ const dom = audioRef.current;
|
|
|
|
+ if (dom) {
|
|
|
|
+ if (audioSta) {
|
|
|
|
+ dom.play();
|
|
|
|
+ dom.onended = () => {
|
|
|
|
+ // 音频播放结束
|
|
|
|
+ setAudioSta(false);
|
|
|
|
+ };
|
|
|
|
+ } else {
|
|
|
|
+ dom.pause();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }, [audioSta]);
|
|
|
|
+
|
|
|
|
+ useEffect(() => {
|
|
|
|
+ if (!data.id) setAudioSta(false);
|
|
|
|
+ }, [data.id]);
|
|
|
|
+
|
|
return (
|
|
return (
|
|
<div
|
|
<div
|
|
className={classNames(
|
|
className={classNames(
|
|
@@ -21,17 +47,33 @@ function GoodsInfo({ data, closePageFu }: Props) {
|
|
<div className="close" onClick={() => closePageFu()}></div>
|
|
<div className="close" onClick={() => closePageFu()}></div>
|
|
{data.id ? (
|
|
{data.id ? (
|
|
<div className="infoMain">
|
|
<div className="infoMain">
|
|
|
|
+ {/* 音频 */}
|
|
|
|
+ <audio ref={audioRef} src={`${audioUrl}${data.id}.mp3`}></audio>
|
|
|
|
+
|
|
{/* 左边模型 */}
|
|
{/* 左边模型 */}
|
|
<div className="infoL">
|
|
<div className="infoL">
|
|
<iframe src={data.link} frameBorder="0"></iframe>
|
|
<iframe src={data.link} frameBorder="0"></iframe>
|
|
</div>
|
|
</div>
|
|
{/* 右边信息 */}
|
|
{/* 右边信息 */}
|
|
<div className="infoR">
|
|
<div className="infoR">
|
|
- <div className="title">{data.name}</div>
|
|
|
|
|
|
+ <div className="title">
|
|
|
|
+ {data.name}
|
|
|
|
+ <div
|
|
|
|
+ hidden
|
|
|
|
+ className="audioBox"
|
|
|
|
+ title={audioSta ? "关闭音频" : "打开音频"}
|
|
|
|
+ onClick={() => setAudioSta(!audioSta)}
|
|
|
|
+ >
|
|
|
|
+ <img src={audioSta ? musicImg : musicImgX} alt="" />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<div className="infoP">年代:{data.age}</div>
|
|
<div className="infoP">年代:{data.age}</div>
|
|
<div className="infoP">类别:{data.sort}</div>
|
|
<div className="infoP">类别:{data.sort}</div>
|
|
<div className="infoP">尺寸:{data.size}</div>
|
|
<div className="infoP">尺寸:{data.size}</div>
|
|
- <div className="infoTxt" dangerouslySetInnerHTML={{__html:data.intro}}></div>
|
|
|
|
|
|
+ <div
|
|
|
|
+ className="infoTxt"
|
|
|
|
+ dangerouslySetInnerHTML={{ __html: data.intro }}
|
|
|
|
+ ></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
) : null}
|
|
) : null}
|