index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <template>
  2. <div class="product-layout" ref="productLayout">
  3. <div class="plate01 plate">
  4. <img class="pl01-bg" :src="`${$cdn}images/eight-bg.png`" alt="">
  5. <div class="layout" :style="{marginLeft:(split - 180)+ 'px'}">
  6. <img class="product-img" :src="`${$cdn}images/banner_pro.png`" alt="">
  7. <div class="info">
  8. <img class="txt-logo" :src="language==='en'?`${$cdn}images/pro-en.png`:`${$cdn}images/pro.png`" alt>
  9. <div class="logo-dec" v-if="language==='en'">{{langEight.introduce.title}}</div>
  10. <h2 class="b-title">{{langEight.introduce.price}}</h2>
  11. <div class="lite-line"></div>
  12. <p class="b-label" v-html="langEight.introduce.dec"></p>
  13. <div class="btns" @click="$router.push({name:'purchase'})">
  14. <div class="button"><vcenter><img :src="`${$cdn}images/product_icon_arrow.png`" alt=""></vcenter></div>
  15. <div class="button buy">{{langEight.introduce.btn}}</div>
  16. </div>
  17. </div>
  18. </div>
  19. <div class="benefit plate">
  20. <h2 class="b-title">{{langEight.introduce.subTitle}}</h2>
  21. <div class="char-con">
  22. <div :style="{'animation-delay': `${index*0.2}s`}" class="item" v-for="(benefit, index) in langEight.introduce.benefitGroup" :key="index">
  23. <i class="iconfont" :class="benefit['fontImg']"></i>
  24. <h3 class="b-label" v-html="benefit.title"></h3>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. <div class="plate02 plate">
  30. <div class="application">
  31. <h2>{{langEight.app.title}}</h2>
  32. <h2>{{langEight.app.sub[0]}}</h2>
  33. <h3>{{langEight.app.sub[1]}}</h3>
  34. <div class="download-btn">
  35. <div class="apple">App Store</div>
  36. <div class="android">Android</div>
  37. </div>
  38. </div>
  39. <div class="app-img">
  40. <img :src="`${$cdn}images/app_img1.png`" class="i1">
  41. <img :src="`${$cdn}images/app_img2.png`" class="i2">
  42. <img :src="`${$cdn}images/app_img3.png`" class="i3">
  43. </div>
  44. </div>
  45. <div class="plate03 plate">
  46. <div class="front">
  47. <div class="f-top">
  48. <h2 class="b-title" v-if="language==='en'">{{langEight.definition.title}}</h2>
  49. <img class="txt-img" v-else :src="`${$cdn}images/10K.png`" alt="">
  50. <p class="b-label" v-for="(item,i) in langEight.definition.top.dec" :key="i">{{item}}</p>
  51. </div>
  52. <div class="f-img">
  53. <video class="p3-video" src="@/assets/video/fenbianlv.mp4" autoplay muted loop></video>
  54. </div>
  55. <!-- <phone class="p3-phone" :src="require('@/assets/video/fenbianlv.mp4')"/> -->
  56. <p class="f-dec b-label">{{langEight.definition.top.intro}}</p>
  57. </div>
  58. </div>
  59. <div class="plate04 plate">
  60. <div class="hsxp-layout">
  61. <div class="hsxp-imgcon">
  62. <video class="hsxp-video" src="@/assets/video/xinpian.mp4" autoplay muted loop></video>
  63. </div>
  64. <div class="hsxp-right">
  65. <div class="b-title">{{langEight.hardware[1].title[0]}}</div>
  66. <div class="b-label">{{langEight.hardware[1].title[1]}}</div>
  67. </div>
  68. </div>
  69. <div class="qmjt-layout plate">
  70. <div class="qmjt-left">
  71. <div class="b-title">{{langEight.hardware[2].title[0]}}</div>
  72. <div class="b-label">{{langEight.hardware[2].title[1]}}</div>
  73. <div class="b-label">{{langEight.hardware[2].title[2]}}</div>
  74. </div>
  75. <div class="qmjt-imgcon">
  76. <img :src="`${$cdn}images/lens.png`" alt="">
  77. </div>
  78. </div>
  79. <!-- <div class="cgq-layout plate">
  80. <div class="cgq-imgcon">
  81. <div></div>
  82. </div>
  83. <div class="cgq-right">
  84. <div class="b-title">{{langEight.hardware[3].title[0]}}</div>
  85. </div>
  86. </div> -->
  87. <!-- <div class="jzxj-layout plate">
  88. <div class="jzxj-left">
  89. <div class="b-title">{{langEight.hardware[4].title[0]}}</div>
  90. <div class="b-label">{{langEight.hardware[4].title[1]}}</div>
  91. </div>
  92. <div class="jzxj-imgcon">
  93. <img :src="`${$cdn}images/jzxj.png`" alt="">
  94. </div>
  95. </div> -->
  96. </div>
  97. <div class="plate05" >
  98. <div class="qingxidu">
  99. <div class="b-title">{{langEight.feature.definition.title}}</div>
  100. <compare class="c-qxd" :content="langEight.feature.definition.case1.content"
  101. :back="langEight.feature.definition.case1.back"
  102. :ltxt="langEight.feature.definition.case1.lTxt"
  103. :rtxt="langEight.feature.definition.case1.rTxt"
  104. :lmask="langEight.feature.definition.case1.lMask"
  105. :rmask="langEight.feature.definition.case1.rMask"
  106. />
  107. </div>
  108. <div class="qingxidu ceju" ref="linecanvas">
  109. <div class="b-title">{{langEight.feature.ranging.title[0]}}</div>
  110. <!-- <Linecanvas :start='runLineCanvas' class="line-canvas" /> -->
  111. <img class="ceju-img" :src="runLineCanvas?`${$cdn}images/ceju.gif`:`${$cdn}images/ceju-n.gif`">
  112. <div class="line-txt b-label">
  113. <span>{{runLineCanvas?langEight.feature.ranging.sub:langEight.feature.ranging.hide}}</span>
  114. <img @click="runLineCanvas=!runLineCanvas" :src="runLineCanvas?`${$cdn}images/canvas-right.png`:`${$cdn}images/canvas-left.png`" alt="">
  115. </div>
  116. </div>
  117. <div class="qingxidu" >
  118. <div class="b-title">{{langEight.feature.manyou.title[0]}}</div>
  119. <div class="mxsc plate">
  120. <img class="mx-bg" :src="`${$cdn}images/liti1.png`" alt="">
  121. <img class="mx-1" :src="language==='en'?`${$cdn}images/liti2-en.png`:`${$cdn}images/liti2.png`" alt="">
  122. <img class="mx-2" :src="`${$cdn}images/liti3.png`" alt="">
  123. </div>
  124. </div>
  125. <div class="qingxidu last-item">
  126. <div class="b-title">{{langEight.feature.model.title[0]}}</div>
  127. <compare class="c-qxd" :content="langEight.feature.model.case2.content"
  128. :back="langEight.feature.model.case2.back"
  129. :ltxt="langEight.feature.model.case2.lTxt"
  130. :rtxt="langEight.feature.model.case2.rTxt" />
  131. </div>
  132. </div>
  133. <div class="plate06">
  134. <div class="info plate">
  135. <h2 class="b-title">{{langEight.technology.title}}</h2>
  136. <p class="b-label" v-html="langEight.technology.dec"></p>
  137. <div class="boom"></div>
  138. </div>
  139. </div>
  140. <div class="plate07">
  141. <div class="info">
  142. <div class="b-title">{{langEight.parmas.name}}</div>
  143. <img :src="`${$cdn}images/product_img_content_6.png`" alt="">
  144. <div class="standard-layout">
  145. <div class="standard-xinghao">
  146. <h3 class="s-title b-label">{{langEight.standardGroup.label}}</h3>
  147. <div class="s-value b-label">{{langEight.standardGroup.name}}</div>
  148. <p v-for="(standard,i) in langEight.standardGroup.info" :key="i">
  149. <span class="s-value b-label">{{standard.label}} :</span>
  150. <span class="s-value b-label">{{standard.value}}</span>
  151. </p>
  152. </div>
  153. <div class="standard-params">
  154. <div class="s-params1">
  155. <div class="s1-con" v-for="(item,idx) in langEight.standardGroup.params1" :key="idx">
  156. <h3 class="s-title b-label">{{item.label}}</h3>
  157. <p class="s-value b-label" v-for="(sub,i) in item.value" :key="i">
  158. {{sub}}
  159. </p>
  160. </div>
  161. </div>
  162. <div class="s-params2">
  163. <div class="s2-con" v-for="(item,idx) in langEight.standardGroup.params2" :key="idx">
  164. <h3 class="s-title b-label">{{item.label}}</h3>
  165. <p class="s-value b-label" v-for="(sub,i) in item.value" :key="i">
  166. {{sub}}
  167. </p>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. <!-- <div class="btns">
  173. <a :to="{name:'purchase'}" href="" class="button">立即购买</a>
  174. </div> -->
  175. </div>
  176. </div>
  177. </div>
  178. </template>
  179. <script>
  180. import {mapState} from 'vuex'
  181. import vcenter from '@/components/vcenter'
  182. import { getPosition } from '@/util'
  183. import phone from '@/components/phone'
  184. import number from '@/components/number'
  185. import compare from '@/components/compare'
  186. import Linecanvas from '@/components/Linecanvas'
  187. import browser from '@/util/browser'
  188. export default {
  189. data () {
  190. let params = [
  191. '1/2.3 12M CMOS感应器x2(输出像素数等同于 14M)',
  192. '30fps',
  193. '新开发的F2.0镜头',
  194. '25分钟连续拍摄'
  195. ]
  196. let params2 = [
  197. {
  198. icon: this.$cdn + 'images/icon1.png',
  199. txt: '实时分享实训世界的所有惊喜。如今,360度图像可实现即时串流!'
  200. },
  201. {
  202. icon: this.$cdn + 'images/icon2.png',
  203. txt: '使用专用智能手机应用程式,拍摄的同事检查曝光和白平衡。'
  204. },
  205. {
  206. icon: this.$cdn + 'images/icon3.png',
  207. txt: '快门速度的设定范围为1/6400秒'
  208. },
  209. {
  210. icon: this.$cdn + 'images/icon4.png',
  211. txt: '静态图像:(大)约1600'
  212. }
  213. ]
  214. return {
  215. params,
  216. params2,
  217. runLineCanvas: true,
  218. canLine: true,
  219. ismobile: browser.mobile,
  220. runNum: 'up',
  221. numArr: {},
  222. case1: {
  223. content: this.$cdn + 'video/8k.mp4',
  224. back: this.$cdn + 'video/4k.mp4',
  225. lTxt: '普通',
  226. rTxt: '4DKankan PRO',
  227. lMask: '4K高清',
  228. rMask: '8K高清图像,3倍放大'
  229. },
  230. case2: {
  231. content: this.$cdn + 'video/qingxi.mp4',
  232. back: this.$cdn + 'video/moku.mp4',
  233. lTxt: '普通',
  234. rTxt: '4DKankan PRO'
  235. }
  236. }
  237. },
  238. computed: {
  239. ...mapState({
  240. split: state => state.ui.navDivision,
  241. language: state => state.language.current,
  242. langEight: state => state.language.home.eight
  243. })
  244. },
  245. watch: {
  246. runNum: {
  247. immediate: true,
  248. handler: function (newVal) {
  249. if (newVal === 'up') {
  250. this.numArr = {
  251. type: 'up',
  252. start: 2,
  253. end: 8
  254. }
  255. } else {
  256. this.numArr = {
  257. type: 'down',
  258. start: 8,
  259. end: 2
  260. }
  261. }
  262. }
  263. }
  264. },
  265. mounted () {
  266. let height = getPosition(this.$refs.productLayout).y
  267. let lc = getPosition(this.$refs.linecanvas).y + this.$refs.linecanvas.offsetHeight
  268. let items = Array.from(this.$refs.productLayout.querySelectorAll('.plate'))
  269. this.scrollHandle = () => {
  270. if (window.innerHeight + (window.scrollY || window.pageYOffset) - 200 > lc && this.canLine) {
  271. this.canLine = false
  272. this.runLineCanvas = true
  273. }
  274. items.forEach((item, index) => {
  275. let addHeight = item.offsetParent && (item.offsetParent.nodeName).toLowerCase() === 'body' ? (item.offsetTop + height) : (item.offsetTop + item.offsetParent.offsetTop + height)
  276. if (addHeight <= window.innerHeight + (window.scrollY || window.pageYOffset) - 200) {
  277. item.classList.remove(`hide${index + 1}`)
  278. } else {
  279. item.classList.add(`hide${index + 1}`)
  280. }
  281. })
  282. }
  283. window.addEventListener('scroll', this.scrollHandle)
  284. let removeListener = () => {
  285. (Math.round(devicePixelRatio * 100) !== 100 && devicePixelRatio > 1.5) && window.removeEventListener('scroll', this.scrollHandle)
  286. }
  287. removeListener()
  288. window.addEventListener('resize', () => {
  289. removeListener()
  290. })
  291. },
  292. destroyed () {
  293. window.removeEventListener('scroll', this.scrollHandle)
  294. },
  295. components: {vcenter, Linecanvas, phone, compare, number}
  296. }
  297. </script>
  298. <style lang="scss" scoped>
  299. @import './style.scss';
  300. </style>