index old.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761
  1. <template>
  2. <view class="">
  3. <view class="btn" @click="takephotos">
  4. 点击保存
  5. </view>
  6. <view class="swiperBox">
  7. <swiper duration="100" :style="{height: swiperHeight+'px'}" @change='swiperChange' :current="current"
  8. :indicator-dots="false" :autoplay="false" :interval="3000" :duration="1000">
  9. <swiper-item v-for="(item,index) in list" :key="index">
  10. <view class="swiper-item swiper-itemcopy" :id='"copyswiperItem"+index'>
  11. <view class="titleBox" :style="{background: 'url('+BASE_URL+jt_bg1+')'}">
  12. <!-- <image :src="BASE_URL+item.qrimage" mode=""></image> -->
  13. <limeQrcodeVue ref="qrcodeRef"
  14. :value="BASE_URL1+`/h5/#/pages/deal/productInfo?id=${item.id}&rand_num=${item.rand_num}`"
  15. size="112rpx"></limeQrcodeVue>
  16. <view class="title">
  17. <p>{{item.title1}}</p>
  18. <p>{{item.title2}}</p>
  19. <p class="warn">{{item.title3}}</p>
  20. </view>
  21. <!-- <image class="jtbj" src="../../static/logo.png" mode=""></image> -->
  22. </view>
  23. <view class="content" :style="{background: 'url('+BASE_URL+jt_bg2+')'}">
  24. <view class="" :id='"copycontent"+index'>
  25. </view>
  26. <view class="watermark"
  27. v-if="item.watermark_info&&item.watermark_info.type==1||item.watermark_info&&item.watermark_info.type==3">
  28. <view v-for="it in 9" class=""
  29. :style="{transform: 'rotate('+item.watermark_info.angle+'deg)',opacity:(100-item.watermark_info.opacity*1)*0.01,color:item.watermark_info.color,marginTop:item.watermark_info.hh+'px',marginBottom:item.watermark_info.hh+'px',marginLeft:item.watermark_info.ww+'px',marginRight:item.watermark_info.ww+'px',fontSize:item.watermark_info.text_font+'px',fontWeight:item.watermark_info.bold==1?'bold':'',fontFamily:item.watermark_info.typeface==1?'typeface1':item.watermark_info.typeface==2?'typeface2':item.watermark_info.typeface==3?'typeface3':item.watermark_info.typeface==4?'typeface4':item.watermark_info.typeface==5?'typeface5':item.watermark_info.typeface==6?'typeface6':''}">
  30. <image :src="BASE_URL+item.watermark_info.image" mode=""
  31. v-if="item.watermark_info.image&&item.watermark_info.type==1"></image>
  32. <text
  33. v-if="item.watermark_info.water_text&&item.watermark_info.type==3">{{item.watermark_info.water_text}}</text>
  34. </view>
  35. </view>
  36. <view class="watermark1"
  37. :style="{left:item.watermark_info.waterPos==0?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==1?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==4?0+item.watermark_info.voffset+'px':item.watermark_info.waterPos==7?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==2?'calc( 40%'+' + '+item.watermark_info.xx+'px )':item.watermark_info.waterPos==5?'calc( 40%'+' + '+item.watermark_info.voffset+'px )':item.watermark_info.waterPos==8?'calc( 40%'+' + '+item.watermark_info.xx+'px )':'',top:item.watermark_info.waterPos==0?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==1?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==2?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==3?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==4?'40%':item.watermark_info.waterPos==5?'40%':item.watermark_info.waterPos==6?'40%':'',right:item.watermark_info.waterPos==3?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==6?0+item.watermark_info.waterPos+'px':item.watermark_info.waterPos==9?0+item.watermark_info.xx+'px':'',bottom:item.watermark_info.waterPos==7?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==8?0+item.watermark_info.ww+'px':item.watermark_info.waterPos==9?0+item.watermark_info.xx+'px':'',fontWeight:item.watermark_info.bold==1?'bold':'',fontFamily:item.watermark_info.typeface==1?'typeface1':item.watermark_info.typeface==2?'typeface2':item.watermark_info.typeface==3?'typeface3':item.watermark_info.typeface==4?'typeface4':item.watermark_info.typeface==5?'typeface5':item.watermark_info.typeface==6?'typeface6':''}"
  38. v-if="item.watermark_info&&item.watermark_info.type==2||item.watermark_info&&item.watermark_info.type==4">
  39. <view class=""
  40. :style="{transform: 'rotate('+item.watermark_info.angle+'deg)',color:`rgba(${hexToRgb(item.watermark_info.color).rgb},${(100-item.watermark_info.opacity*1)*0.01})`,fontSize:item.watermark_info.text_font+'px'}">
  41. <image :src="BASE_URL+item.watermark_info.image" mode=""
  42. v-if="item.watermark_info.image&&item.watermark_info.type==2"></image>
  43. <text
  44. v-if="item.watermark_info.water_text&&item.watermark_info.type==4">{{item.watermark_info.water_text}}</text>
  45. </view>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="swiper-item" :id='"swiperItem"+index'>
  50. <view class="titleBox" :style="{background: 'url('+BASE_URL+jt_bg1+')'}">
  51. <!-- <view class="titleBox"> -->
  52. <!-- <image :src="BASE_URL+item.qrimage" mode=""></image> -->
  53. <limeQrcodeVue ref="qrcodeRef"
  54. :value="BASE_URL1+`/h5/#/pages/deal/productInfo?id=${item.id}&rand_num=${item.rand_num}`"
  55. size="112rpx"></limeQrcodeVue>
  56. <view class="title">
  57. <p>{{item.title1}}</p>
  58. <p>{{item.title2}}</p>
  59. <p class="warn">{{item.title3}}</p>
  60. </view>
  61. </view>
  62. <view class="content" v-if="item.detail" :style="{background: 'url('+BASE_URL+jt_bg2+')'}">
  63. <view class="" :id='"content"+index'>
  64. <u-parse :content="item.detail"></u-parse>
  65. </view>
  66. <view class="watermark"
  67. v-if="item.watermark_info&&item.watermark_info.type==1||item.watermark_info&&item.watermark_info.type==3">
  68. <view v-for="it in 100" class=""
  69. :style="{transform: 'rotate('+item.watermark_info.angle+'deg)',opacity:(100-item.watermark_info.opacity*1)*0.01,color:item.watermark_info.color,marginTop:item.watermark_info.hh+'px',marginBottom:item.watermark_info.hh+'px',marginLeft:item.watermark_info.ww+'px',marginRight:item.watermark_info.ww+'px',fontSize:item.watermark_info.text_font+'px',fontWeight:item.watermark_info.bold==1?'bold':'',fontFamily:item.watermark_info.typeface==1?'typeface1':item.watermark_info.typeface==2?'typeface2':item.watermark_info.typeface==3?'typeface3':item.watermark_info.typeface==4?'typeface4':item.watermark_info.typeface==5?'typeface5':item.watermark_info.typeface==6?'typeface6':''}">
  70. <image :src="BASE_URL+item.watermark_info.image" mode=""
  71. v-if="item.watermark_info.image&&item.watermark_info.type==1"></image>
  72. <text
  73. v-if="item.watermark_info.water_text&&item.watermark_info.type==3">{{item.watermark_info.water_text}}</text>
  74. </view>
  75. </view>
  76. <view class="watermark1"
  77. :style="{left:item.watermark_info.waterPos==0?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==1?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==4?0+item.watermark_info.voffset+'px':item.watermark_info.waterPos==7?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==2?'calc( 40%'+' + '+item.watermark_info.xx+'px )':item.watermark_info.waterPos==5?'calc( 40%'+' + '+item.watermark_info.voffset+'px )':item.watermark_info.waterPos==8?'calc( 40%'+' + '+item.watermark_info.xx+'px )':'',top:item.watermark_info.waterPos==0?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==1?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==2?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==3?0+item.watermark_info.yy+'px':item.watermark_info.waterPos==4?'40%':item.watermark_info.waterPos==5?'40%':item.watermark_info.waterPos==6?'40%':'',right:item.watermark_info.waterPos==3?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==6?0+item.watermark_info.waterPos+'px':item.watermark_info.waterPos==9?0+item.watermark_info.xx+'px':'',bottom:item.watermark_info.waterPos==7?0+item.watermark_info.xx+'px':item.watermark_info.waterPos==8?0+item.watermark_info.ww+'px':item.watermark_info.waterPos==9?0+item.watermark_info.xx+'px':'',fontWeight:item.watermark_info.bold==1?'bold':'',fontFamily:item.watermark_info.typeface==1?'typeface1':item.watermark_info.typeface==2?'typeface2':item.watermark_info.typeface==3?'typeface3':item.watermark_info.typeface==4?'typeface4':item.watermark_info.typeface==5?'typeface5':item.watermark_info.typeface==6?'typeface6':''}"
  78. v-if="item.watermark_info&&item.watermark_info.type==2||item.watermark_info&&item.watermark_info.type==4">
  79. <view class=""
  80. :style="{transform: 'rotate('+item.watermark_info.angle+'deg)',color:`rgba(${hexToRgb(item.watermark_info.color).rgb},${(100-item.watermark_info.opacity*1)*0.01})`,fontSize:item.watermark_info.text_font+'px'}">
  81. <image :src="BASE_URL+item.watermark_info.image" mode=""
  82. v-if="item.watermark_info.image&&item.watermark_info.type==2"></image>
  83. <text
  84. v-if="item.watermark_info.water_text&&item.watermark_info.type==4">{{item.watermark_info.water_text}}</text>
  85. </view>
  86. </view>
  87. </view>
  88. </view>
  89. </swiper-item>
  90. </swiper>
  91. </view>
  92. <u-overlay :show="show" @click="show = false">
  93. <view class="warp">
  94. <view class="rect" @tap.stop>
  95. <image :style="{height: swiperHeight+'px'}" :src="url" mode=""></image>
  96. <p>长按保存到本地</p>
  97. </view>
  98. </view>
  99. </u-overlay>
  100. <u-overlay :show="show2" @click="show2 = false" @touchstart="start" @touchend="end" @touchmove="move">
  101. <view class="warp">
  102. <view class="rect2">
  103. <image src="../../static/swiper1.png" mode=""></image>
  104. <p style="color: #fff;">{{alert2}}</p>
  105. </view>
  106. </view>
  107. </u-overlay>
  108. <u-overlay :show="show1" @click="show1 = false">
  109. <view class="warp">
  110. <view class="rect1" @tap.stop>
  111. <image src="../../static/warn.png" mode=""></image>
  112. <p>{{alert1}}</p>
  113. <u-button color="#A5CF49" type="success" shape="circle" text="确认收藏" @click="addFavorite"></u-button>
  114. </view>
  115. </view>
  116. </u-overlay>
  117. </view>
  118. </template>
  119. <script setup>
  120. import limeQrcodeVue from '../../uni_modules/lime-qrcode/components/l-qrcode/l-qrcode.vue';
  121. import html2canvas from 'html2canvas';
  122. import {
  123. BASE_URL,
  124. BASE_URL1
  125. } from '../../utils/http.js'
  126. import {
  127. onLoad,
  128. onShow,
  129. onPullDownRefresh
  130. } from "@dcloudio/uni-app";
  131. import {
  132. nextTick,
  133. ref
  134. } from "vue"
  135. import {
  136. getsimpleimages,
  137. getplatformeditor,
  138. getplatformmeun
  139. } from '@/utils/api.js'
  140. let isSave = ref(false)
  141. let show = ref(false)
  142. let show1 = ref(false)
  143. let show2 = ref(false)
  144. let startData = ref({
  145. clientX: '',
  146. clientY: '',
  147. })
  148. let moveX = ref(0)
  149. let touch = ref({})
  150. // let touch=(e)=>{
  151. // console.log(123,e)
  152. // current.value++
  153. // // show2.value = false
  154. // }
  155. // 触摸touch事件
  156. let start = (e) => { //@touchstart 触摸开始
  157. startData.value.clientX = e.changedTouches[0].clientX; //手指按下时的X坐标
  158. }
  159. let end = (e) => { //@touchend触摸结束
  160. moveX.value = 0; //触摸事件结束恢复原状
  161. console.log(123, touch.value.clientX - startData.value.clientX)
  162. if (touch.value.clientX - startData.value.clientX > 0) { //在事件结束时,判断滑动的距离是否达到出发需要执行事件的要求
  163. if (current.value != 0) {
  164. current.value -= 1
  165. }
  166. } else {
  167. current.value += 1
  168. // this.touch = {};
  169. }
  170. }
  171. let move = (event) => { //@touchmove触摸移动
  172. let touch1 = event.touches[0]; //滑动过程中,手指滑动的坐标信息 返回的是Objcet对象
  173. touch.value = touch1;
  174. let data = touch1.clientX - startData.value.clientX;
  175. if (touch1.clientX < startData.value.clientX) { //向左移动
  176. if (data < -250) {
  177. data = -250;
  178. }
  179. }
  180. if (touch1.clientX > startData.value.clientX) { //向右移动
  181. if (moveX.value == 0) {
  182. data = 0
  183. } else {
  184. if (data > 50) {
  185. data = 50;
  186. }
  187. }
  188. }
  189. moveX.value = data;
  190. }
  191. let swiperChange = (e) => {
  192. current.value = e.detail.current
  193. var dom = document.getElementById('swiperItem' + current.value); // 获取dom元素
  194. if (dom && dom.children[1]) {
  195. swiperHeight.value = 67 + dom.children[1].clientHeight
  196. } else {
  197. swiperHeight.value = 67
  198. }
  199. if (current.value == list.value.length - 2) {
  200. page.value += 1
  201. getsimpleimages({
  202. page: page.value,
  203. page_num: 12
  204. }).then(res => {
  205. list.value = [...list.value, ...res.data]
  206. list.value.forEach(item => {
  207. // item.detail=getspan(item.detail)
  208. })
  209. })
  210. }
  211. // if (current.value % 10 == 0 && current.value != 0) {
  212. // page.value += 1
  213. // getsimpleimages({
  214. // page: page.value,
  215. // page_num: page_num
  216. // }).then(res => {
  217. // list.value = [...list.value, ...res.data]
  218. // list.value.forEach(item => {
  219. // // item.detail=getspan(item.detail)
  220. // })
  221. // })
  222. // }
  223. }
  224. let page_num = 1
  225. let page = ref(1)
  226. let url = ref()
  227. let swiperHeight = ref(67)
  228. let current = ref(0)
  229. let list = ref([])
  230. let refList = ref([])
  231. let setBoxRef = (el) => {
  232. if (el) {
  233. refList.value.push(el)
  234. }
  235. }
  236. //收藏网站
  237. // 收藏本站
  238. let addFavorite = () => {
  239. var url = window.location;
  240. var title = '斑马交易平台';
  241. var ua = navigator.userAgent.toLowerCase();
  242. if (ua.indexOf("360se") > -1) {
  243. alert("您的浏览器不支持自动加入收藏,请手动设置!");
  244. } else if (ua.indexOf("msie 8") > -1) {
  245. window.external.AddToFavoritesBar(url, title); //IE8
  246. } else if (document.all) { //IE类浏览器
  247. try {
  248. window.external.addFavorite(url, title);
  249. } catch (e) {
  250. alert('您的浏览器不支持自动加入收藏,请手动设置!');
  251. }
  252. } else if (window.sidebar) { //firfox等浏览器;
  253. window.sidebar.addPanel(title, url, "");
  254. } else {
  255. alert('您的浏览器不支持自动加入收藏,请手动设置!');
  256. }
  257. show1.value = false
  258. }
  259. let takephotos = () => {
  260. // var dom = document.getElementById('swiperItem' + current.value); // 获取dom元素
  261. // // var dom1 = document.getElementById('swiperItem'); // 获取dom元素
  262. // if (dom && dom.children[1]) {
  263. // swiperHeight.value = 67 + dom.children[1].clientHeight
  264. // } else {
  265. // swiperHeight.value = 67
  266. // }
  267. // html2canvas(dom).then((canvas) => {
  268. // url.value = canvas.toDataURL("image/png").replace('image/png', 'image/octet-stream');
  269. // show.value = true
  270. // });
  271. var swiper = document.getElementById('copyswiperItem' + current.value); // 获取dom元素
  272. var dom = document.getElementById('content' + current.value); // 获取dom元素
  273. var dom1 = document.getElementById('copycontent' + current.value); // 获取dom元素
  274. dom1.innerHTML = dom.innerHTML
  275. let res = domTrans(dom1)
  276. let html = forFn(res)
  277. dom1.innerHTML = html
  278. html2canvas(swiper, {
  279. allowTaint: true,
  280. useCORS: true,
  281. }).then((canvas) => {
  282. url.value = canvas.toDataURL("image/png").replace('image/png', 'image/octet-stream');
  283. show.value = true
  284. });
  285. }
  286. let alert1 = ref('')
  287. let alert2 = ref('')
  288. let jt_bg1 = ref('')
  289. let jt_bg2 = ref('')
  290. onLoad(() => {
  291. getplatformmeun().then(res => {
  292. uni.setNavigationBarTitle({
  293. title: res.data.name
  294. });
  295. jt_bg1.value = res.data.jt_bg1
  296. jt_bg2.value = res.data.jt_bg2
  297. })
  298. getplatformeditor().then(res => {
  299. alert1.value = res.data.alert1
  300. alert2.value = res.data.alert2
  301. })
  302. getsimpleimages({
  303. page: page.value,
  304. page_num: 12
  305. }).then(res => {
  306. show2.value = true
  307. list.value = res.data
  308. // list.value.forEach(item=>{
  309. // item.detail=getspan(item.detail)
  310. // })
  311. setTimeout(() => {
  312. var dom = document.getElementById('swiperItem' + current.value); // 获取dom元素
  313. if (dom && dom.children[1]) {
  314. swiperHeight.value = 67 + dom.children[1].clientHeight
  315. } else {
  316. swiperHeight.value = 67
  317. }
  318. })
  319. setTimeout(() => {
  320. show2.value = false
  321. }, 5000)
  322. })
  323. let flag = uni.getStorageSync('collect')
  324. if (!flag) {
  325. show1.value = true
  326. uni.setStorageSync('collect', true)
  327. }
  328. })
  329. onShow(() => {
  330. })
  331. function hexToRgb(val) { //HEX十六进制颜色值转换为RGB(A)颜色值
  332. // 16进制颜色值的正则
  333. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  334. // 把颜色值变成小写
  335. var color = val.toLowerCase();
  336. var result = '';
  337. if (reg.test(color)) {
  338. // 如果只有三位的值,需变成六位,如:#fff => #ffffff
  339. if (color.length === 4) {
  340. var colorNew = "#";
  341. for (var i = 1; i < 4; i += 1) {
  342. colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
  343. }
  344. color = colorNew;
  345. }
  346. // 处理六位的颜色值,转为RGB
  347. var colorChange = [];
  348. for (var i = 1; i < 7; i += 2) {
  349. colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
  350. }
  351. result = colorChange.join(",")
  352. return {
  353. rgb: result,
  354. r: colorChange[0],
  355. g: colorChange[1],
  356. b: colorChange[2]
  357. };
  358. } else {
  359. result = '无效';
  360. return {
  361. rgb: result
  362. };
  363. }
  364. }
  365. function getspan(str) {
  366. // let st=str.replace(new RegExp('font', 'g'), 'span')
  367. var list1 = str.split('</span>')
  368. var list2 = []
  369. list1.forEach(val => {
  370. if (val.indexOf("<span") > -1) {
  371. list2.push({
  372. isspan: true,
  373. arr: val.split("<span")
  374. })
  375. } else {
  376. list2.push({
  377. isspan: false,
  378. arr: val
  379. })
  380. }
  381. })
  382. var list3 = []
  383. list2.forEach(val => {
  384. if (val.isspan) {
  385. list3.push({
  386. ...val,
  387. style: val.arr[1].split('>')[0],
  388. span: val.arr[1].split('>')[1]
  389. })
  390. } else {
  391. list3.push({
  392. ...val
  393. })
  394. }
  395. })
  396. var html = ''
  397. list3.forEach(val => {
  398. if (val.isspan) {
  399. html = html + val.arr[0]
  400. var span = ''
  401. for (var a = 0; a < val.span.length; a++) {
  402. span = span + `<span${val.style}>${val.span[a]}</span>`
  403. }
  404. html = html + span
  405. } else {
  406. html = html + val.arr
  407. }
  408. })
  409. return html
  410. }
  411. onPullDownRefresh(() => {
  412. setTimeout(function() {
  413. uni.stopPullDownRefresh();
  414. }, 1000);
  415. })
  416. // 将DOM转换为js对象
  417. function domTrans(dom) {
  418. // 总dom树
  419. let tree = [];
  420. // 递归, node = 当前的节点,dataNode = 数据插入的节点
  421. const loop = (node, dataNode) => {
  422. // 当前节点的模板
  423. let temp = {
  424. type: node.nodeType,
  425. };
  426. // 如果是文本节点 或 单标签节点
  427. if (temp.type == 3 && node.nodeValue.match(/\S/)) {
  428. temp["content"] = node.nodeValue;
  429. temp["tag"] = node.nodeName;
  430. dataNode.push(temp);
  431. }
  432. // 元素节点
  433. if (temp.type == 1) {
  434. let attributes = getAttribute(node);
  435. // 如果没有属性,不添加 attributes
  436. if (attributes) temp["attributes"] = attributes;
  437. var newNode = node.childNodes
  438. var newNode2
  439. if (newNode[0] && newNode.length <= 1) {
  440. newNode2 = newNode[0].childNodes.length
  441. }
  442. // 当前节点下还有子节点
  443. if (node.childNodes.length > 1 || newNode2 > 0) {
  444. temp["children"] = [];
  445. temp["tag"] = node.nodeName.toLowerCase();
  446. for (let i = 0; i < node.childNodes.length; i++) {
  447. loop(node.childNodes[i], temp.children);
  448. }
  449. }
  450. // 当前节点下只有文本 或 单标签节点
  451. if (node.childNodes.length <= 1 && newNode2 == 0) {
  452. temp["content"] = node.innerHTML;
  453. temp["tag"] = node.nodeName.toLowerCase();
  454. }
  455. dataNode.push(temp);
  456. }
  457. };
  458. loop(dom, tree);
  459. return tree[0].children;
  460. }
  461. function forFn(arr) {
  462. let html = ``
  463. for (let i = 0; i < arr.length; i++) {
  464. let tArr = []
  465. if (arr[i].content) {
  466. tArr = arr[i].content.split("")
  467. }
  468. if (arr[i].type === 1) {
  469. if (arr[i].attributes) {
  470. if (arr[i].attributes.src) {
  471. html +=
  472. `<img class="${arr[i].attributes.class}" src="${arr[i].attributes.src}" style="${arr[i].attributes.style}">`
  473. } else {
  474. html += `<${arr[i].tag} class="${arr[i].attributes.class}" style="${arr[i].attributes.style}">`
  475. }
  476. } else {
  477. if (arr[i].tag == "img") {
  478. html += `<${arr[i].tag} style="${arr[i].attributes.style}">`
  479. } else {
  480. html += `<${arr[i].tag}>`
  481. }
  482. }
  483. if (arr[i].children) {
  484. html += forFn(arr[i].children)
  485. }
  486. html += `</${arr[i].tag}>`
  487. }
  488. tArr.forEach(el => {
  489. if (arr[i].tag === "#text") {
  490. html += `${el}`
  491. } else {
  492. if (arr[i].attributes) {
  493. if (arr[i].tag == "img") {
  494. html +=
  495. `<${arr[i].tag} class="${arr[i].attributes.class}" src="${arr[i].attributes.src}" style="${arr[i].attributes.style}">${el}</${arr[i].tag}>`
  496. } else {
  497. html +=
  498. `<${arr[i].tag} class="${arr[i].attributes.class}" style="${arr[i].attributes.style}">${el}</${arr[i].tag}>`
  499. }
  500. } else {
  501. if (arr[i].tag == "img") {
  502. html += `<${arr[i].tag} src="${arr[i].attributes.src}">${el}</${arr[i].tag}>`
  503. } else {
  504. html += `<${arr[i].tag}>${el}</${arr[i].tag}>`
  505. }
  506. }
  507. }
  508. });
  509. }
  510. // console.log(html,'====')
  511. return html
  512. }
  513. // 提取元素属性
  514. function getAttribute(dom) {
  515. let attributes = {};
  516. // let empty = true;
  517. Array.from(dom.attributes).map((item) => {
  518. attributes[item.nodeName] = item.nodeValue;
  519. // empty = false;
  520. });
  521. return attributes;
  522. }
  523. </script>
  524. <style lang="scss">
  525. .typeface1 {
  526. font-family: typeface1;
  527. }
  528. .swiper-itemcopy {
  529. position: absolute;
  530. top: 999px;
  531. }
  532. .content {
  533. padding-left: 10rpx;
  534. padding-right: 10rpx;
  535. word-break: break-all;
  536. word-wrap: break-word;
  537. overflow: hidden;
  538. position: relative;
  539. .watermark {
  540. display: flex;
  541. flex-wrap: wrap;
  542. position: absolute;
  543. top: 0;
  544. left: 0;
  545. right: 0;
  546. // bottom: 0;
  547. image {
  548. width: 100rpx;
  549. height: 100rpx;
  550. }
  551. }
  552. .watermark1 {
  553. position: absolute;
  554. image {
  555. width: 100rpx;
  556. height: 100rpx;
  557. }
  558. }
  559. }
  560. .warp {
  561. padding: 0 28rpx;
  562. display: flex;
  563. align-items: center;
  564. justify-content: center;
  565. height: 100%;
  566. }
  567. .rect {
  568. display: flex;
  569. flex-direction: column;
  570. align-items: center;
  571. width: 694px;
  572. height: auto;
  573. image {
  574. width: 100%;
  575. }
  576. p {
  577. font-size: 48rpx;
  578. color: #fff;
  579. margin-top: 12rpx;
  580. }
  581. // background-color: #fff;
  582. }
  583. @keyframes example1 {
  584. 0% {
  585. transform: translate(0);
  586. }
  587. 50% {
  588. transform: translate(-40px);
  589. }
  590. 100% {
  591. transform: translate(-80px);
  592. }
  593. 0% {
  594. transform: translate(0);
  595. }
  596. }
  597. .rect2 {
  598. display: flex;
  599. flex-direction: column;
  600. align-items: center;
  601. image {
  602. width: 374rpx;
  603. height: 361rpx;
  604. }
  605. transform: translate(0);
  606. animation:example1 1s linear 0s backwards;
  607. animation-iteration-count:infinite;
  608. }
  609. .rect1 {
  610. padding: 60rpx 60rpx;
  611. display: flex;
  612. flex-direction: column;
  613. align-items: center;
  614. width: 558rpx;
  615. // height: 438rpx;
  616. background: #FFFFFF;
  617. border-radius: 20rpx;
  618. image {
  619. max-width: 96rpx;
  620. max-height: 96rpx;
  621. }
  622. p {
  623. font-size: 30rpx;
  624. margin: 62rpx 0 40rpx;
  625. }
  626. // background-color: #fff;
  627. }
  628. page {
  629. height: 100%;
  630. .btn {
  631. font-size: 35rpx;
  632. color: #fff;
  633. text-align: center;
  634. line-height: 90rpx;
  635. float: right;
  636. width: 200rpx;
  637. height: 90rpx;
  638. background: #A5CF49;
  639. border-radius: 0rpx 0rpx 0rpx 32rpx;
  640. }
  641. .swiperBox {
  642. width: 694rpx;
  643. position: fixed;
  644. top: 50%;
  645. left: 50%;
  646. transform: translate(-50%, -50%);
  647. .swiper-item {
  648. .titleBox {
  649. position: relative;
  650. font-size: 28rpx;
  651. color: #666666;
  652. padding: 6rpx;
  653. display: flex;
  654. align-items: flex-end;
  655. image {
  656. margin-right: 4rpx;
  657. width: 112rpx;
  658. height: 112rpx;
  659. }
  660. .jtbj {
  661. width: 100%;
  662. height: 100%;
  663. position: absolute;
  664. top: 0;
  665. left: 0;
  666. right: 0;
  667. bottom: 0;
  668. z-index: 0;
  669. }
  670. .warn {
  671. font-size: 32rpx;
  672. color: #FF2828;
  673. }
  674. .title {
  675. margin-left: 4rpx;
  676. }
  677. }
  678. }
  679. }
  680. }
  681. </style>